@deephaven/golden-layout 0.19.2-beta.10 → 0.19.2-beta.11
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/dist/LayoutManager.d.ts +313 -0
- package/dist/LayoutManager.d.ts.map +1 -0
- package/dist/LayoutManager.js +468 -450
- package/dist/LayoutManager.js.map +1 -1
- package/dist/base.d.ts +16 -0
- package/dist/base.d.ts.map +1 -0
- package/dist/base.js +6 -6
- package/dist/base.js.map +1 -1
- package/dist/config/Config.d.ts +146 -0
- package/dist/config/Config.d.ts.map +1 -0
- package/dist/config/{defaultConfig.js → Config.js} +6 -6
- package/dist/config/Config.js.map +1 -0
- package/dist/config/ItemConfig.d.ts +66 -0
- package/dist/config/ItemConfig.d.ts.map +1 -0
- package/dist/config/ItemConfig.js +14 -0
- package/dist/config/ItemConfig.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +2 -6
- package/dist/config/index.js.map +1 -1
- package/dist/container/ItemContainer.d.ts +91 -0
- package/dist/container/ItemContainer.d.ts.map +1 -0
- package/dist/container/ItemContainer.js +110 -85
- package/dist/container/ItemContainer.js.map +1 -1
- package/dist/container/index.d.ts +3 -0
- package/dist/container/index.d.ts.map +1 -0
- package/dist/container/index.js +2 -4
- package/dist/container/index.js.map +1 -1
- package/dist/controls/BrowserPopout.d.ts +83 -0
- package/dist/controls/BrowserPopout.d.ts.map +1 -0
- package/dist/controls/BrowserPopout.js +135 -101
- package/dist/controls/BrowserPopout.js.map +1 -1
- package/dist/controls/DragProxy.d.ts +67 -0
- package/dist/controls/DragProxy.d.ts.map +1 -0
- package/dist/controls/DragProxy.js +135 -110
- package/dist/controls/DragProxy.js.map +1 -1
- package/dist/controls/DragSource.d.ts +30 -0
- package/dist/controls/DragSource.d.ts.map +1 -0
- package/dist/controls/DragSource.js +37 -29
- package/dist/controls/DragSource.js.map +1 -1
- package/dist/controls/DragSourceFromEvent.d.ts +30 -0
- package/dist/controls/DragSourceFromEvent.d.ts.map +1 -0
- package/dist/controls/DragSourceFromEvent.js +49 -36
- package/dist/controls/DragSourceFromEvent.js.map +1 -1
- package/dist/controls/DropTargetIndicator.d.ts +14 -0
- package/dist/controls/DropTargetIndicator.d.ts.map +1 -0
- package/dist/controls/DropTargetIndicator.js +18 -14
- package/dist/controls/DropTargetIndicator.js.map +1 -1
- package/dist/controls/Header.d.ts +145 -0
- package/dist/controls/Header.d.ts.map +1 -0
- package/dist/controls/Header.js +414 -271
- package/dist/controls/Header.js.map +1 -1
- package/dist/controls/HeaderButton.d.ts +9 -0
- package/dist/controls/HeaderButton.d.ts.map +1 -0
- package/dist/controls/HeaderButton.js +19 -13
- package/dist/controls/HeaderButton.js.map +1 -1
- package/dist/controls/Splitter.d.ts +12 -0
- package/dist/controls/Splitter.d.ts.map +1 -0
- package/dist/controls/Splitter.js +36 -20
- package/dist/controls/Splitter.js.map +1 -1
- package/dist/controls/Tab.d.ts +91 -0
- package/dist/controls/Tab.d.ts.map +1 -0
- package/dist/controls/Tab.js +131 -119
- package/dist/controls/Tab.js.map +1 -1
- package/dist/controls/TransitionIndicator.d.ts +25 -0
- package/dist/controls/TransitionIndicator.d.ts.map +1 -0
- package/dist/controls/TransitionIndicator.js +53 -39
- package/dist/controls/TransitionIndicator.js.map +1 -1
- package/dist/controls/index.d.ts +11 -0
- package/dist/controls/index.d.ts.map +1 -0
- package/dist/controls/index.js +10 -22
- package/dist/controls/index.js.map +1 -1
- package/dist/errors/ConfigurationError.d.ts +6 -0
- package/dist/errors/ConfigurationError.d.ts.map +1 -0
- package/dist/errors/ConfigurationError.js +15 -8
- package/dist/errors/ConfigurationError.js.map +1 -1
- package/dist/errors/index.d.ts +2 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +1 -4
- package/dist/errors/index.js.map +1 -1
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/items/AbstractContentItem.d.ts +233 -0
- package/dist/items/AbstractContentItem.d.ts.map +1 -0
- package/dist/items/AbstractContentItem.js +284 -242
- package/dist/items/AbstractContentItem.js.map +1 -1
- package/dist/items/Component.d.ts +30 -0
- package/dist/items/Component.d.ts.map +1 -0
- package/dist/items/Component.js +61 -42
- package/dist/items/Component.js.map +1 -1
- package/dist/items/Root.d.ts +18 -0
- package/dist/items/Root.d.ts.map +1 -0
- package/dist/items/Root.js +68 -38
- package/dist/items/Root.js.map +1 -1
- package/dist/items/RowOrColumn.d.ts +157 -0
- package/dist/items/RowOrColumn.d.ts.map +1 -0
- package/dist/items/RowOrColumn.js +219 -187
- package/dist/items/RowOrColumn.js.map +1 -1
- package/dist/items/Stack.d.ts +108 -0
- package/dist/items/Stack.d.ts.map +1 -0
- package/dist/items/Stack.js +218 -151
- package/dist/items/Stack.js.map +1 -1
- package/dist/items/index.d.ts +8 -0
- package/dist/items/index.d.ts.map +1 -0
- package/dist/items/index.js +7 -12
- package/dist/items/index.js.map +1 -1
- package/dist/utils/BubblingEvent.d.ts +8 -0
- package/dist/utils/BubblingEvent.d.ts.map +1 -0
- package/dist/utils/BubblingEvent.js +18 -9
- package/dist/utils/BubblingEvent.js.map +1 -1
- package/dist/utils/ConfigMinifier.d.ts +21 -0
- package/dist/utils/ConfigMinifier.d.ts.map +1 -0
- package/dist/utils/ConfigMinifier.js +121 -121
- package/dist/utils/ConfigMinifier.js.map +1 -1
- package/dist/utils/DragListener.d.ts +34 -0
- package/dist/utils/DragListener.d.ts.map +1 -0
- package/dist/utils/DragListener.js +103 -70
- package/dist/utils/DragListener.js.map +1 -1
- package/dist/utils/EventEmitter.d.ts +59 -0
- package/dist/utils/EventEmitter.d.ts.map +1 -0
- package/dist/utils/EventEmitter.js +64 -70
- package/dist/utils/EventEmitter.js.map +1 -1
- package/dist/utils/EventHub.d.ts +55 -0
- package/dist/utils/EventHub.d.ts.map +1 -0
- package/dist/utils/EventHub.js +83 -105
- package/dist/utils/EventHub.js.map +1 -1
- package/dist/utils/ReactComponentHandler.d.ts +54 -0
- package/dist/utils/ReactComponentHandler.d.ts.map +1 -0
- package/dist/utils/ReactComponentHandler.js +58 -56
- package/dist/utils/ReactComponentHandler.js.map +1 -1
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +7 -21
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/utils.d.ts +25 -0
- package/dist/utils/utils.d.ts.map +1 -0
- package/dist/utils/utils.js +21 -145
- package/dist/utils/utils.js.map +1 -1
- package/package.json +9 -5
- package/dist/config/ItemDefaultConfig.js +0 -8
- package/dist/config/ItemDefaultConfig.js.map +0 -1
- package/dist/config/defaultConfig.js.map +0 -1
package/dist/controls/Tab.js
CHANGED
|
@@ -1,92 +1,104 @@
|
|
|
1
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
+
|
|
1
3
|
import $ from 'jquery';
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
+
import { isComponent } from "../items/index.js";
|
|
5
|
+
import { DragListener } from "../utils/index.js";
|
|
6
|
+
import DragProxy from "./DragProxy.js";
|
|
7
|
+
|
|
4
8
|
/**
|
|
5
9
|
* Represents an individual tab within a Stack's header
|
|
6
10
|
*
|
|
7
|
-
* @param
|
|
8
|
-
* @param
|
|
9
|
-
*
|
|
10
|
-
* @constructor
|
|
11
|
+
* @param header
|
|
12
|
+
* @param contentItem
|
|
11
13
|
*/
|
|
14
|
+
export default class Tab {
|
|
15
|
+
/**
|
|
16
|
+
* The tab's html template
|
|
17
|
+
*/
|
|
18
|
+
constructor(header, contentItem) {
|
|
19
|
+
var _this$_layoutManager$;
|
|
12
20
|
|
|
13
|
-
|
|
14
|
-
this.header = header;
|
|
15
|
-
this.contentItem = contentItem;
|
|
16
|
-
this.element = $(Tab._template);
|
|
17
|
-
this.titleElement = this.element.find('.lm_title');
|
|
18
|
-
this.closeElement = this.element.find('.lm_close_tab');
|
|
19
|
-
this.closeElement[contentItem.config.isClosable ? 'show' : 'hide']();
|
|
20
|
-
this.isActive = false;
|
|
21
|
-
this.setTitle(contentItem.config.title);
|
|
22
|
-
this.contentItem.on('titleChanged', this.setTitle, this);
|
|
23
|
-
this._layoutManager = this.contentItem.layoutManager;
|
|
21
|
+
_defineProperty(this, "header", void 0);
|
|
24
22
|
|
|
25
|
-
|
|
26
|
-
this._dragListener = new utils.DragListener(this.element);
|
|
23
|
+
_defineProperty(this, "contentItem", void 0);
|
|
27
24
|
|
|
28
|
-
this
|
|
25
|
+
_defineProperty(this, "element", $(Tab._template));
|
|
29
26
|
|
|
30
|
-
this
|
|
31
|
-
}
|
|
27
|
+
_defineProperty(this, "titleElement", void 0);
|
|
32
28
|
|
|
33
|
-
|
|
34
|
-
this._onCloseClickFn = utils.fnBind(this._onCloseClick, this);
|
|
35
|
-
this._onTabContentFocusInFn = utils.fnBind(this._onTabContentFocusIn, this);
|
|
36
|
-
this._onTabContentFocusOutFn = utils.fnBind(this._onTabContentFocusOut, this);
|
|
37
|
-
this.element.on('click', this._onTabClickFn);
|
|
38
|
-
this.element.on('auxclick', this._onTabClickFn);
|
|
39
|
-
|
|
40
|
-
if (this.contentItem.config.isClosable) {
|
|
41
|
-
this.closeElement.on('click', this._onCloseClickFn);
|
|
42
|
-
this.closeElement.on('mousedown', this._onCloseMousedown);
|
|
43
|
-
} else {
|
|
44
|
-
this.closeElement.remove();
|
|
45
|
-
}
|
|
29
|
+
_defineProperty(this, "closeElement", void 0);
|
|
46
30
|
|
|
47
|
-
|
|
48
|
-
this.contentItem.emit('tab', this);
|
|
49
|
-
this.contentItem.layoutManager.emit('tabCreated', this);
|
|
31
|
+
_defineProperty(this, "isActive", false);
|
|
50
32
|
|
|
51
|
-
|
|
52
|
-
// add focus class to tab when content
|
|
53
|
-
this.contentItem.container._contentElement.on('focusin click', this._onTabContentFocusInFn).on('focusout', this._onTabContentFocusOutFn);
|
|
33
|
+
_defineProperty(this, "_layoutManager", void 0);
|
|
54
34
|
|
|
55
|
-
this
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
35
|
+
_defineProperty(this, "_dragListener", void 0);
|
|
36
|
+
|
|
37
|
+
this.header = header;
|
|
38
|
+
this.contentItem = contentItem;
|
|
39
|
+
this.titleElement = this.element.find('.lm_title');
|
|
40
|
+
this.closeElement = this.element.find('.lm_close_tab');
|
|
41
|
+
this.closeElement[contentItem.config.isClosable ? 'show' : 'hide']();
|
|
42
|
+
this.setTitle(contentItem.config.title);
|
|
43
|
+
this.contentItem.on('titleChanged', this.setTitle, this);
|
|
44
|
+
this._layoutManager = this.contentItem.layoutManager;
|
|
45
|
+
|
|
46
|
+
if ((_this$_layoutManager$ = this._layoutManager.config.settings) !== null && _this$_layoutManager$ !== void 0 && _this$_layoutManager$.reorderEnabled && contentItem.config.reorderEnabled) {
|
|
47
|
+
this._dragListener = new DragListener(this.element);
|
|
48
|
+
|
|
49
|
+
this._dragListener.on('dragStart', this._onDragStart, this);
|
|
50
|
+
|
|
51
|
+
this.contentItem.on('destroy', this._dragListener.destroy, this._dragListener);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
this._onTabClick = this._onTabClick.bind(this);
|
|
55
|
+
this._onCloseClick = this._onCloseClick.bind(this);
|
|
56
|
+
this._onTabContentFocusIn = this._onTabContentFocusIn.bind(this);
|
|
57
|
+
this._onTabContentFocusOut = this._onTabContentFocusOut.bind(this);
|
|
58
|
+
this.element.on('click', this._onTabClick);
|
|
59
|
+
this.element.on('auxclick', this._onTabClick);
|
|
60
|
+
|
|
61
|
+
if (this.contentItem.config.isClosable) {
|
|
62
|
+
this.closeElement.on('click', this._onCloseClick);
|
|
63
|
+
this.closeElement.on('mousedown', this._onCloseMousedown);
|
|
64
|
+
} else {
|
|
65
|
+
this.closeElement.remove();
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
this.contentItem.tab = this;
|
|
69
|
+
this.contentItem.emit('tab', this);
|
|
70
|
+
this.contentItem.layoutManager.emit('tabCreated', this);
|
|
64
71
|
|
|
72
|
+
if (isComponent(this.contentItem)) {
|
|
73
|
+
// add focus class to tab when content
|
|
74
|
+
this.contentItem.container._contentElement.on('focusin click', this._onTabContentFocusIn).on('focusout', this._onTabContentFocusOut);
|
|
65
75
|
|
|
66
|
-
|
|
67
|
-
|
|
76
|
+
this.contentItem.container.tab = this;
|
|
77
|
+
this.contentItem.container.emit('tab', this);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
68
80
|
/**
|
|
69
81
|
* Sets the tab's title to the provided string and sets
|
|
70
82
|
* its title attribute to a pure text representation (without
|
|
71
83
|
* html tags) of the same string.
|
|
72
|
-
*
|
|
73
|
-
* @public
|
|
74
|
-
* @param {String} title can contain html
|
|
84
|
+
* @param title can contain html
|
|
75
85
|
*/
|
|
76
|
-
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
setTitle() {
|
|
89
|
+
var title = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
77
90
|
// Disabling for illumon project, we want to manage our own tooltips
|
|
78
91
|
// this.element.attr( 'title', lm.utils.stripTags( title ) );
|
|
79
92
|
this.titleElement.html(title);
|
|
80
|
-
}
|
|
81
|
-
|
|
93
|
+
}
|
|
82
94
|
/**
|
|
83
95
|
* Sets this tab's active state. To programmatically
|
|
84
96
|
* switch tabs, use header.setActiveContentItem( item ) instead.
|
|
85
|
-
*
|
|
86
|
-
* @public
|
|
87
|
-
* @param {Boolean} isActive
|
|
97
|
+
* @param isActive
|
|
88
98
|
*/
|
|
89
|
-
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
setActive(isActive) {
|
|
90
102
|
if (isActive === this.isActive) {
|
|
91
103
|
return;
|
|
92
104
|
}
|
|
@@ -98,20 +110,21 @@ utils.copy(Tab.prototype, {
|
|
|
98
110
|
} else {
|
|
99
111
|
this.element.removeClass('lm_active');
|
|
100
112
|
}
|
|
101
|
-
}
|
|
102
|
-
|
|
113
|
+
}
|
|
103
114
|
/**
|
|
104
115
|
* Destroys the tab
|
|
105
116
|
*
|
|
106
117
|
* @private
|
|
107
118
|
* @returns {void}
|
|
108
119
|
*/
|
|
109
|
-
_$destroy: function _$destroy() {
|
|
110
|
-
this.element.off('click', this._onTabClickFn);
|
|
111
|
-
this.element.off('auxclick', this._onTabClickFn);
|
|
112
|
-
this.closeElement.off('click', this._onCloseClickFn);
|
|
113
120
|
|
|
114
|
-
|
|
121
|
+
|
|
122
|
+
_$destroy() {
|
|
123
|
+
this.element.off('click', this._onTabClick);
|
|
124
|
+
this.element.off('auxclick', this._onTabClick);
|
|
125
|
+
this.closeElement.off('click', this._onCloseClick);
|
|
126
|
+
|
|
127
|
+
if (isComponent(this.contentItem)) {
|
|
115
128
|
this.contentItem.container._contentElement.off();
|
|
116
129
|
}
|
|
117
130
|
|
|
@@ -120,29 +133,32 @@ utils.copy(Tab.prototype, {
|
|
|
120
133
|
|
|
121
134
|
this._dragListener.off('dragStart', this._onDragStart);
|
|
122
135
|
|
|
123
|
-
this._dragListener =
|
|
136
|
+
this._dragListener = undefined;
|
|
124
137
|
}
|
|
125
138
|
|
|
126
139
|
this.element.remove();
|
|
127
|
-
}
|
|
128
|
-
|
|
140
|
+
}
|
|
129
141
|
/**
|
|
130
142
|
* Callback for the DragListener
|
|
131
143
|
*
|
|
132
|
-
* @param
|
|
133
|
-
* @param
|
|
134
|
-
*
|
|
135
|
-
* @private
|
|
136
|
-
* @returns {void}
|
|
144
|
+
* @param x The tabs absolute x position
|
|
145
|
+
* @param y The tabs absolute y position
|
|
137
146
|
*/
|
|
138
|
-
|
|
139
|
-
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
_onDragStart(x, y) {
|
|
150
|
+
var _this$contentItem$par;
|
|
151
|
+
|
|
152
|
+
if ((_this$contentItem$par = this.contentItem.parent) !== null && _this$contentItem$par !== void 0 && _this$contentItem$par.isMaximised) {
|
|
140
153
|
this.contentItem.parent.toggleMaximise();
|
|
141
154
|
}
|
|
142
155
|
|
|
143
|
-
|
|
144
|
-
|
|
156
|
+
if (!this._dragListener) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
145
159
|
|
|
160
|
+
new DragProxy(x, y, this._dragListener, this._layoutManager, this.contentItem, this.header.parent);
|
|
161
|
+
}
|
|
146
162
|
/**
|
|
147
163
|
* Callback when the contentItem is focused in
|
|
148
164
|
*
|
|
@@ -152,14 +168,11 @@ utils.copy(Tab.prototype, {
|
|
|
152
168
|
* assume that the surrogate already propagated from triggering the native event and prevent that from happening
|
|
153
169
|
* again here. This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the bubbling surrogate
|
|
154
170
|
* propagates *after* the non-bubbling base), but that seems less bad than duplication."
|
|
155
|
-
*
|
|
156
|
-
* @param {jQuery DOM event} event
|
|
157
|
-
*
|
|
158
|
-
* @private
|
|
159
|
-
* @returns {void}
|
|
160
171
|
*/
|
|
161
|
-
|
|
162
|
-
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
_onTabContentFocusIn() {
|
|
175
|
+
if (isComponent(this.contentItem) && !this.contentItem.container._contentElement[0].contains(document.activeElement)) {
|
|
163
176
|
// jquery 3.4.0 and later, jquery method optimizes out the focus from
|
|
164
177
|
// happening in proper order. Can use HTMLElement.focus() to avoid.
|
|
165
178
|
this.contentItem.container._contentElement[0].focus(); // [0] needed to use dom focus, not jquery method
|
|
@@ -167,8 +180,7 @@ utils.copy(Tab.prototype, {
|
|
|
167
180
|
}
|
|
168
181
|
|
|
169
182
|
this.element.addClass('lm_focusin');
|
|
170
|
-
}
|
|
171
|
-
|
|
183
|
+
}
|
|
172
184
|
/**
|
|
173
185
|
* Callback when the contentItem is focused out
|
|
174
186
|
*
|
|
@@ -177,29 +189,31 @@ utils.copy(Tab.prototype, {
|
|
|
177
189
|
* @private
|
|
178
190
|
* @returns {void}
|
|
179
191
|
*/
|
|
180
|
-
|
|
181
|
-
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
_onTabContentFocusOut() {
|
|
195
|
+
if (isComponent(this.contentItem) && !this.contentItem.container._contentElement[0].contains(document.activeElement)) {
|
|
182
196
|
this.element.removeClass('lm_focusin');
|
|
183
197
|
}
|
|
184
|
-
}
|
|
185
|
-
|
|
198
|
+
}
|
|
186
199
|
/**
|
|
187
200
|
* Callback when the tab is clicked
|
|
188
201
|
*
|
|
189
|
-
* @param
|
|
190
|
-
*
|
|
191
|
-
* @private
|
|
192
|
-
* @returns {void}
|
|
202
|
+
* @param event
|
|
193
203
|
*/
|
|
194
|
-
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
_onTabClick(event) {
|
|
195
207
|
// left mouse button or tap
|
|
196
208
|
if (!event || event.button === 0) {
|
|
209
|
+
var _this$element$get;
|
|
210
|
+
|
|
197
211
|
var activeContentItem = this.header.parent.getActiveContentItem();
|
|
198
212
|
|
|
199
|
-
if (this.contentItem !== activeContentItem) {
|
|
213
|
+
if (this.contentItem !== activeContentItem && isComponent(this.contentItem)) {
|
|
200
214
|
this.header.parent.setActiveContentItem(this.contentItem);
|
|
201
215
|
this.contentItem.container.emit('tabClicked');
|
|
202
|
-
} else if (this.contentItem
|
|
216
|
+
} else if (isComponent(this.contentItem) && !this.contentItem.container._contentElement[0].contains(document.activeElement)) {
|
|
203
217
|
// if no focus inside put focus onto the container
|
|
204
218
|
// so focusin always fires for tabclicks
|
|
205
219
|
this.contentItem.container._contentElement.focus(); // still emit tab clicked event, so panels can also
|
|
@@ -213,7 +227,7 @@ utils.copy(Tab.prototype, {
|
|
|
213
227
|
this.header._hideAdditionalTabsDropdown(); // makes sure clicked tabs scrollintoview (either those partially offscreen or in dropdown)
|
|
214
228
|
|
|
215
229
|
|
|
216
|
-
this.element.get(0).scrollIntoView({
|
|
230
|
+
(_this$element$get = this.element.get(0)) === null || _this$element$get === void 0 ? void 0 : _this$element$get.scrollIntoView({
|
|
217
231
|
inline: 'nearest' // behaviour smooth is not possible here, as when a tab becomes active it may attempt to take focus
|
|
218
232
|
// which interupts any scroll behaviour from completeting
|
|
219
233
|
|
|
@@ -221,39 +235,37 @@ utils.copy(Tab.prototype, {
|
|
|
221
235
|
} else if (event.button === 1 && this.contentItem.config.isClosable) {
|
|
222
236
|
this._onCloseClick(event);
|
|
223
237
|
}
|
|
224
|
-
}
|
|
225
|
-
|
|
238
|
+
}
|
|
226
239
|
/**
|
|
227
240
|
* Callback when the tab's close button is
|
|
228
241
|
* clicked
|
|
229
242
|
*
|
|
230
|
-
* @param
|
|
231
|
-
*
|
|
232
|
-
* @private
|
|
233
|
-
* @returns {void}
|
|
243
|
+
* @param event
|
|
234
244
|
*/
|
|
235
|
-
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
_onCloseClick(event) {
|
|
236
248
|
event.stopPropagation();
|
|
237
249
|
|
|
238
|
-
if (this.contentItem
|
|
250
|
+
if (isComponent(this.contentItem)) {
|
|
239
251
|
this.contentItem.container.close();
|
|
240
252
|
} else {
|
|
241
253
|
this.header.parent.removeChild(this.contentItem);
|
|
242
254
|
}
|
|
243
|
-
}
|
|
244
|
-
|
|
255
|
+
}
|
|
245
256
|
/**
|
|
246
257
|
* Callback to capture tab close button mousedown
|
|
247
258
|
* to prevent tab from activating.
|
|
248
259
|
*
|
|
249
|
-
* @param
|
|
250
|
-
*
|
|
251
|
-
* @private
|
|
252
|
-
* @returns {void}
|
|
260
|
+
* @param event
|
|
253
261
|
*/
|
|
254
|
-
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
_onCloseMousedown(event) {
|
|
255
265
|
event.stopPropagation();
|
|
256
266
|
}
|
|
257
|
-
|
|
258
|
-
|
|
267
|
+
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
_defineProperty(Tab, "_template", ['<li class="lm_tab">', '<span class="lm_title_before"></span>', '<span class="lm_title"></span>', '<div class="lm_close_tab"></div>', '</li>'].join(''));
|
|
259
271
|
//# sourceMappingURL=Tab.js.map
|
package/dist/controls/Tab.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tab.js","names":["$","utils","DragProxy","Tab","header","contentItem","element","_template","titleElement","find","closeElement","config","isClosable","isActive","setTitle","title","on","_layoutManager","layoutManager","settings","reorderEnabled","_dragListener","DragListener","_onDragStart","destroy","_onTabClickFn","fnBind","_onTabClick","_onCloseClickFn","_onCloseClick","_onTabContentFocusInFn","_onTabContentFocusIn","_onTabContentFocusOutFn","_onTabContentFocusOut","_onCloseMousedown","remove","tab","emit","isComponent","container","_contentElement","join","copy","prototype","html","setActive","addClass","removeClass","_$destroy","off","x","y","parent","isMaximised","toggleMaximise","contains","document","activeElement","focus","event","button","activeContentItem","getActiveContentItem","setActiveContentItem","_hideAdditionalTabsDropdown","get","scrollIntoView","inline","stopPropagation","close","removeChild"],"sources":["../../src/controls/Tab.js"],"sourcesContent":["import $ from 'jquery';\nimport utils from '../utils/index.js';\nimport DragProxy from './DragProxy.js';\n\n/**\n * Represents an individual tab within a Stack's header\n *\n * @param {lm.controls.Header} header\n * @param {lm.items.AbstractContentItem} contentItem\n *\n * @constructor\n */\nconst Tab = function (header, contentItem) {\n this.header = header;\n this.contentItem = contentItem;\n this.element = $(Tab._template);\n this.titleElement = this.element.find('.lm_title');\n this.closeElement = this.element.find('.lm_close_tab');\n this.closeElement[contentItem.config.isClosable ? 'show' : 'hide']();\n this.isActive = false;\n\n this.setTitle(contentItem.config.title);\n this.contentItem.on('titleChanged', this.setTitle, this);\n\n this._layoutManager = this.contentItem.layoutManager;\n\n if (\n this._layoutManager.config.settings.reorderEnabled === true &&\n contentItem.config.reorderEnabled === true\n ) {\n this._dragListener = new utils.DragListener(this.element);\n this._dragListener.on('dragStart', this._onDragStart, this);\n this.contentItem.on(\n 'destroy',\n this._dragListener.destroy,\n this._dragListener\n );\n }\n\n this._onTabClickFn = utils.fnBind(this._onTabClick, this);\n this._onCloseClickFn = utils.fnBind(this._onCloseClick, this);\n this._onTabContentFocusInFn = utils.fnBind(this._onTabContentFocusIn, this);\n this._onTabContentFocusOutFn = utils.fnBind(this._onTabContentFocusOut, this);\n\n this.element.on('click', this._onTabClickFn);\n this.element.on('auxclick', this._onTabClickFn);\n\n if (this.contentItem.config.isClosable) {\n this.closeElement.on('click', this._onCloseClickFn);\n this.closeElement.on('mousedown', this._onCloseMousedown);\n } else {\n this.closeElement.remove();\n }\n\n this.contentItem.tab = this;\n this.contentItem.emit('tab', this);\n this.contentItem.layoutManager.emit('tabCreated', this);\n\n if (this.contentItem.isComponent) {\n // add focus class to tab when content\n this.contentItem.container._contentElement\n .on('focusin click', this._onTabContentFocusInFn)\n .on('focusout', this._onTabContentFocusOutFn);\n\n this.contentItem.container.tab = this;\n this.contentItem.container.emit('tab', this);\n }\n};\n\n/**\n * The tab's html template\n *\n * @type {String}\n */\nTab._template = [\n '<li class=\"lm_tab\">',\n '<span class=\"lm_title_before\"></span>',\n '<span class=\"lm_title\"></span>',\n '<div class=\"lm_close_tab\"></div>',\n '</li>',\n].join('');\n\nutils.copy(Tab.prototype, {\n /**\n * Sets the tab's title to the provided string and sets\n * its title attribute to a pure text representation (without\n * html tags) of the same string.\n *\n * @public\n * @param {String} title can contain html\n */\n setTitle: function (title) {\n // Disabling for illumon project, we want to manage our own tooltips\n // this.element.attr( 'title', lm.utils.stripTags( title ) );\n this.titleElement.html(title);\n },\n\n /**\n * Sets this tab's active state. To programmatically\n * switch tabs, use header.setActiveContentItem( item ) instead.\n *\n * @public\n * @param {Boolean} isActive\n */\n setActive: function (isActive) {\n if (isActive === this.isActive) {\n return;\n }\n this.isActive = isActive;\n\n if (isActive) {\n this.element.addClass('lm_active');\n } else {\n this.element.removeClass('lm_active');\n }\n },\n\n /**\n * Destroys the tab\n *\n * @private\n * @returns {void}\n */\n _$destroy: function () {\n this.element.off('click', this._onTabClickFn);\n this.element.off('auxclick', this._onTabClickFn);\n this.closeElement.off('click', this._onCloseClickFn);\n if (this.contentItem.isComponent) {\n this.contentItem.container._contentElement.off();\n }\n if (this._dragListener) {\n this.contentItem.off(\n 'destroy',\n this._dragListener.destroy,\n this._dragListener\n );\n this._dragListener.off('dragStart', this._onDragStart);\n this._dragListener = null;\n }\n this.element.remove();\n },\n\n /**\n * Callback for the DragListener\n *\n * @param {Number} x The tabs absolute x position\n * @param {Number} y The tabs absolute y position\n *\n * @private\n * @returns {void}\n */\n _onDragStart: function (x, y) {\n if (this.contentItem.parent.isMaximised === true) {\n this.contentItem.parent.toggleMaximise();\n }\n\n new DragProxy(\n x,\n y,\n this._dragListener,\n this._layoutManager,\n this.contentItem,\n this.header.parent\n );\n },\n\n /**\n * Callback when the contentItem is focused in\n *\n * Why [0].focus():\n * https://github.com/jquery/jquery/commit/fe5f04de8fde9c69ed48283b99280aa6df3795c7\n * From jquery source: \"If this is an inner synthetic event for an event with a bubbling surrogate (focus or blur),\n * assume that the surrogate already propagated from triggering the native event and prevent that from happening\n * again here. This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the bubbling surrogate\n * propagates *after* the non-bubbling base), but that seems less bad than duplication.\"\n *\n * @param {jQuery DOM event} event\n *\n * @private\n * @returns {void}\n */\n _onTabContentFocusIn: function () {\n if (\n !this.contentItem.container._contentElement[0].contains(\n document.activeElement\n )\n ) {\n // jquery 3.4.0 and later, jquery method optimizes out the focus from\n // happening in proper order. Can use HTMLElement.focus() to avoid.\n this.contentItem.container._contentElement[0].focus(); // [0] needed to use dom focus, not jquery method\n }\n this.element.addClass('lm_focusin');\n },\n\n /**\n * Callback when the contentItem is focused out\n *\n * @param {jQuery DOM event} event\n *\n * @private\n * @returns {void}\n */\n _onTabContentFocusOut: function () {\n if (\n !this.contentItem.container._contentElement[0].contains(\n document.activeElement\n )\n ) {\n this.element.removeClass('lm_focusin');\n }\n },\n\n /**\n * Callback when the tab is clicked\n *\n * @param {jQuery DOM event} event\n *\n * @private\n * @returns {void}\n */\n _onTabClick: function (event) {\n // left mouse button or tap\n if (!event || event.button === 0) {\n var activeContentItem = this.header.parent.getActiveContentItem();\n if (this.contentItem !== activeContentItem) {\n this.header.parent.setActiveContentItem(this.contentItem);\n this.contentItem.container.emit('tabClicked');\n } else if (\n this.contentItem.isComponent &&\n !this.contentItem.container._contentElement[0].contains(\n document.activeElement\n )\n ) {\n // if no focus inside put focus onto the container\n // so focusin always fires for tabclicks\n this.contentItem.container._contentElement.focus();\n\n // still emit tab clicked event, so panels can also\n // do it's own focus handling if desired\n this.contentItem.container.emit('tabClicked');\n }\n\n // might have been called from the dropdown\n this.header._hideAdditionalTabsDropdown();\n\n // makes sure clicked tabs scrollintoview (either those partially offscreen or in dropdown)\n this.element.get(0).scrollIntoView({\n inline: 'nearest',\n // behaviour smooth is not possible here, as when a tab becomes active it may attempt to take focus\n // which interupts any scroll behaviour from completeting\n });\n\n // middle mouse button\n } else if (event.button === 1 && this.contentItem.config.isClosable) {\n this._onCloseClick(event);\n }\n },\n\n /**\n * Callback when the tab's close button is\n * clicked\n *\n * @param {jQuery DOM event} event\n *\n * @private\n * @returns {void}\n */\n _onCloseClick: function (event) {\n event.stopPropagation();\n if (this.contentItem.isComponent) {\n this.contentItem.container.close();\n } else {\n this.header.parent.removeChild(this.contentItem);\n }\n },\n\n /**\n * Callback to capture tab close button mousedown\n * to prevent tab from activating.\n *\n * @param (jQuery DOM event) event\n *\n * @private\n * @returns {void}\n */\n _onCloseMousedown: function (event) {\n event.stopPropagation();\n },\n});\n\nexport default Tab;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Tab.js","names":["$","isComponent","DragListener","DragProxy","Tab","constructor","header","contentItem","_template","titleElement","element","find","closeElement","config","isClosable","setTitle","title","on","_layoutManager","layoutManager","settings","reorderEnabled","_dragListener","_onDragStart","destroy","_onTabClick","bind","_onCloseClick","_onTabContentFocusIn","_onTabContentFocusOut","_onCloseMousedown","remove","tab","emit","container","_contentElement","html","setActive","isActive","addClass","removeClass","_$destroy","off","undefined","x","y","parent","isMaximised","toggleMaximise","contains","document","activeElement","focus","event","button","activeContentItem","getActiveContentItem","setActiveContentItem","_hideAdditionalTabsDropdown","get","scrollIntoView","inline","stopPropagation","close","removeChild","join"],"sources":["../../src/controls/Tab.ts"],"sourcesContent":["import $ from 'jquery';\nimport type { AbstractContentItem } from '../items';\nimport { isComponent } from '../items';\nimport type LayoutManager from '../LayoutManager';\nimport { DragListener } from '../utils';\nimport DragProxy from './DragProxy';\nimport type Header from './Header';\n\n/**\n * Represents an individual tab within a Stack's header\n *\n * @param header\n * @param contentItem\n */\nexport default class Tab {\n /**\n * The tab's html template\n */\n private static _template = [\n '<li class=\"lm_tab\">',\n '<span class=\"lm_title_before\"></span>',\n '<span class=\"lm_title\"></span>',\n '<div class=\"lm_close_tab\"></div>',\n '</li>',\n ].join('');\n\n header: Header;\n contentItem: AbstractContentItem;\n element = $(Tab._template);\n titleElement: JQuery<HTMLElement>;\n closeElement: JQuery<HTMLElement>;\n isActive = false;\n\n private _layoutManager: LayoutManager;\n private _dragListener?: DragListener;\n\n constructor(header: Header, contentItem: AbstractContentItem) {\n this.header = header;\n this.contentItem = contentItem;\n this.titleElement = this.element.find('.lm_title');\n this.closeElement = this.element.find('.lm_close_tab');\n this.closeElement[contentItem.config.isClosable ? 'show' : 'hide']();\n\n this.setTitle(contentItem.config.title);\n this.contentItem.on('titleChanged', this.setTitle, this);\n\n this._layoutManager = this.contentItem.layoutManager;\n\n if (\n this._layoutManager.config.settings?.reorderEnabled &&\n contentItem.config.reorderEnabled\n ) {\n this._dragListener = new DragListener(this.element);\n this._dragListener.on('dragStart', this._onDragStart, this);\n this.contentItem.on(\n 'destroy',\n this._dragListener.destroy,\n this._dragListener\n );\n }\n\n this._onTabClick = this._onTabClick.bind(this);\n this._onCloseClick = this._onCloseClick.bind(this);\n this._onTabContentFocusIn = this._onTabContentFocusIn.bind(this);\n this._onTabContentFocusOut = this._onTabContentFocusOut.bind(this);\n\n this.element.on('click', this._onTabClick);\n this.element.on('auxclick', this._onTabClick);\n\n if (this.contentItem.config.isClosable) {\n this.closeElement.on('click', this._onCloseClick);\n this.closeElement.on('mousedown', this._onCloseMousedown);\n } else {\n this.closeElement.remove();\n }\n\n this.contentItem.tab = this;\n this.contentItem.emit('tab', this);\n this.contentItem.layoutManager.emit('tabCreated', this);\n\n if (isComponent(this.contentItem)) {\n // add focus class to tab when content\n this.contentItem.container._contentElement\n .on('focusin click', this._onTabContentFocusIn)\n .on('focusout', this._onTabContentFocusOut);\n\n this.contentItem.container.tab = this;\n this.contentItem.container.emit('tab', this);\n }\n }\n\n /**\n * Sets the tab's title to the provided string and sets\n * its title attribute to a pure text representation (without\n * html tags) of the same string.\n * @param title can contain html\n */\n setTitle(title = '') {\n // Disabling for illumon project, we want to manage our own tooltips\n // this.element.attr( 'title', lm.utils.stripTags( title ) );\n this.titleElement.html(title);\n }\n\n /**\n * Sets this tab's active state. To programmatically\n * switch tabs, use header.setActiveContentItem( item ) instead.\n * @param isActive\n */\n setActive(isActive: boolean) {\n if (isActive === this.isActive) {\n return;\n }\n this.isActive = isActive;\n\n if (isActive) {\n this.element.addClass('lm_active');\n } else {\n this.element.removeClass('lm_active');\n }\n }\n\n /**\n * Destroys the tab\n *\n * @private\n * @returns {void}\n */\n _$destroy() {\n this.element.off('click', this._onTabClick);\n this.element.off('auxclick', this._onTabClick);\n this.closeElement.off('click', this._onCloseClick);\n if (isComponent(this.contentItem)) {\n this.contentItem.container._contentElement.off();\n }\n if (this._dragListener) {\n this.contentItem.off(\n 'destroy',\n this._dragListener.destroy,\n this._dragListener\n );\n this._dragListener.off('dragStart', this._onDragStart);\n this._dragListener = undefined;\n }\n this.element.remove();\n }\n\n /**\n * Callback for the DragListener\n *\n * @param x The tabs absolute x position\n * @param y The tabs absolute y position\n */\n _onDragStart(x: number, y: number) {\n if (this.contentItem.parent?.isMaximised) {\n this.contentItem.parent.toggleMaximise();\n }\n\n if (!this._dragListener) {\n return;\n }\n\n new DragProxy(\n x,\n y,\n this._dragListener,\n this._layoutManager,\n this.contentItem,\n this.header.parent\n );\n }\n\n /**\n * Callback when the contentItem is focused in\n *\n * Why [0].focus():\n * https://github.com/jquery/jquery/commit/fe5f04de8fde9c69ed48283b99280aa6df3795c7\n * From jquery source: \"If this is an inner synthetic event for an event with a bubbling surrogate (focus or blur),\n * assume that the surrogate already propagated from triggering the native event and prevent that from happening\n * again here. This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the bubbling surrogate\n * propagates *after* the non-bubbling base), but that seems less bad than duplication.\"\n */\n _onTabContentFocusIn() {\n if (\n isComponent(this.contentItem) &&\n !this.contentItem.container._contentElement[0].contains(\n document.activeElement\n )\n ) {\n // jquery 3.4.0 and later, jquery method optimizes out the focus from\n // happening in proper order. Can use HTMLElement.focus() to avoid.\n this.contentItem.container._contentElement[0].focus(); // [0] needed to use dom focus, not jquery method\n }\n this.element.addClass('lm_focusin');\n }\n\n /**\n * Callback when the contentItem is focused out\n *\n * @param {jQuery DOM event} event\n *\n * @private\n * @returns {void}\n */\n _onTabContentFocusOut() {\n if (\n isComponent(this.contentItem) &&\n !this.contentItem.container._contentElement[0].contains(\n document.activeElement\n )\n ) {\n this.element.removeClass('lm_focusin');\n }\n }\n\n /**\n * Callback when the tab is clicked\n *\n * @param event\n */\n _onTabClick(event?: JQuery.TriggeredEvent) {\n // left mouse button or tap\n if (!event || event.button === 0) {\n var activeContentItem = this.header.parent.getActiveContentItem();\n if (\n this.contentItem !== activeContentItem &&\n isComponent(this.contentItem)\n ) {\n this.header.parent.setActiveContentItem(this.contentItem);\n this.contentItem.container.emit('tabClicked');\n } else if (\n isComponent(this.contentItem) &&\n !this.contentItem.container._contentElement[0].contains(\n document.activeElement\n )\n ) {\n // if no focus inside put focus onto the container\n // so focusin always fires for tabclicks\n this.contentItem.container._contentElement.focus();\n\n // still emit tab clicked event, so panels can also\n // do it's own focus handling if desired\n this.contentItem.container.emit('tabClicked');\n }\n\n // might have been called from the dropdown\n this.header._hideAdditionalTabsDropdown();\n\n // makes sure clicked tabs scrollintoview (either those partially offscreen or in dropdown)\n this.element.get(0)?.scrollIntoView({\n inline: 'nearest',\n // behaviour smooth is not possible here, as when a tab becomes active it may attempt to take focus\n // which interupts any scroll behaviour from completeting\n });\n\n // middle mouse button\n } else if (event.button === 1 && this.contentItem.config.isClosable) {\n this._onCloseClick(event);\n }\n }\n\n /**\n * Callback when the tab's close button is\n * clicked\n *\n * @param event\n */\n _onCloseClick(event: JQuery.TriggeredEvent) {\n event.stopPropagation();\n if (isComponent(this.contentItem)) {\n this.contentItem.container.close();\n } else {\n this.header.parent.removeChild(this.contentItem);\n }\n }\n\n /**\n * Callback to capture tab close button mousedown\n * to prevent tab from activating.\n *\n * @param event\n */\n _onCloseMousedown(event: Event) {\n event.stopPropagation();\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export declare type TransitionDimensions = {
|
|
2
|
+
left?: number;
|
|
3
|
+
top?: number;
|
|
4
|
+
width?: number;
|
|
5
|
+
height?: number;
|
|
6
|
+
opacity?: number;
|
|
7
|
+
};
|
|
8
|
+
export default class TransitionIndicator {
|
|
9
|
+
private _element;
|
|
10
|
+
private _toElement;
|
|
11
|
+
private _fromDimensions;
|
|
12
|
+
private _totalAnimationDuration;
|
|
13
|
+
private _animationStartTime;
|
|
14
|
+
constructor();
|
|
15
|
+
destroy(): void;
|
|
16
|
+
transitionElements(fromElement: JQuery<HTMLElement>, toElement: JQuery<HTMLElement>): void;
|
|
17
|
+
_nextAnimationFrame(): void;
|
|
18
|
+
_measure(element: JQuery<HTMLElement>): {
|
|
19
|
+
left: number | undefined;
|
|
20
|
+
top: number | undefined;
|
|
21
|
+
width: number | undefined;
|
|
22
|
+
height: number | undefined;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=TransitionIndicator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransitionIndicator.d.ts","sourceRoot":"","sources":["../../src/controls/TransitionIndicator.ts"],"names":[],"mappings":"AAGA,oBAAY,oBAAoB,GAAG;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,mBAAmB;IACtC,OAAO,CAAC,QAAQ,CAAoD;IACpE,OAAO,CAAC,UAAU,CAAoC;IAEtD,OAAO,CAAC,eAAe,CAA4B;IACnD,OAAO,CAAC,uBAAuB,CAAO;IACtC,OAAO,CAAC,mBAAmB,CAAuB;;IAMlD,OAAO;IAIP,kBAAkB,CAChB,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,EAChC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;IAchC,mBAAmB;IAiCnB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC;;;;;;CAUtC"}
|
|
@@ -1,38 +1,48 @@
|
|
|
1
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
+
|
|
1
3
|
import $ from 'jquery';
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
4
|
+
import { animFrame } from "../utils/index.js";
|
|
5
|
+
export default class TransitionIndicator {
|
|
6
|
+
constructor() {
|
|
7
|
+
_defineProperty(this, "_element", $('<div class="lm_transition_indicator"></div>'));
|
|
8
|
+
|
|
9
|
+
_defineProperty(this, "_toElement", null);
|
|
10
|
+
|
|
11
|
+
_defineProperty(this, "_fromDimensions", {});
|
|
12
|
+
|
|
13
|
+
_defineProperty(this, "_totalAnimationDuration", 200);
|
|
14
|
+
|
|
15
|
+
_defineProperty(this, "_animationStartTime", null);
|
|
16
|
+
|
|
17
|
+
$(document.body).append(this._element);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
destroy() {
|
|
15
21
|
this._element.remove();
|
|
16
|
-
}
|
|
17
|
-
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
transitionElements(fromElement, toElement) {
|
|
18
25
|
/**
|
|
19
26
|
* TODO - This is not quite as cool as expected. Review.
|
|
20
27
|
*/
|
|
21
|
-
return;
|
|
22
|
-
this.
|
|
23
|
-
this.
|
|
24
|
-
this._fromDimensions =
|
|
25
|
-
this.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
28
|
+
return; // this._toElement = toElement;
|
|
29
|
+
// this._animationStartTime = utils.now();
|
|
30
|
+
// this._fromDimensions = this._measure(fromElement);
|
|
31
|
+
// this._fromDimensions.opacity = 0.8;
|
|
32
|
+
// this._element.show().css(this._fromDimensions);
|
|
33
|
+
// utils.animFrame(utils.fnBind(this._nextAnimationFrame, this));
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
_nextAnimationFrame() {
|
|
37
|
+
if (!this._toElement || this._animationStartTime == null) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
var toDimensions = this._measure(this._toElement);
|
|
42
|
+
|
|
43
|
+
var animationProgress = (Date.now() - this._animationStartTime) / this._totalAnimationDuration;
|
|
44
|
+
|
|
45
|
+
var currentFrameStyles = {};
|
|
36
46
|
|
|
37
47
|
if (animationProgress >= 1) {
|
|
38
48
|
this._element.hide();
|
|
@@ -41,24 +51,28 @@ utils.copy(TransitionIndicator.prototype, {
|
|
|
41
51
|
}
|
|
42
52
|
|
|
43
53
|
toDimensions.opacity = 0;
|
|
54
|
+
var keys = Object.keys(this._fromDimensions);
|
|
55
|
+
|
|
56
|
+
for (var cssProperty of keys) {
|
|
57
|
+
var _this$_fromDimensions, _toDimensions$cssProp, _this$_fromDimensions2;
|
|
44
58
|
|
|
45
|
-
|
|
46
|
-
currentFrameStyles[cssProperty] = this._fromDimensions[cssProperty] + (toDimensions[cssProperty] - this._fromDimensions[cssProperty]) * animationProgress;
|
|
59
|
+
currentFrameStyles[cssProperty] = ((_this$_fromDimensions = this._fromDimensions[cssProperty]) !== null && _this$_fromDimensions !== void 0 ? _this$_fromDimensions : 0) + (((_toDimensions$cssProp = toDimensions[cssProperty]) !== null && _toDimensions$cssProp !== void 0 ? _toDimensions$cssProp : 0) - ((_this$_fromDimensions2 = this._fromDimensions[cssProperty]) !== null && _this$_fromDimensions2 !== void 0 ? _this$_fromDimensions2 : 0)) * animationProgress;
|
|
47
60
|
}
|
|
48
61
|
|
|
49
62
|
this._element.css(currentFrameStyles);
|
|
50
63
|
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
|
|
64
|
+
animFrame(this._nextAnimationFrame.bind(this));
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
_measure(element) {
|
|
54
68
|
var offset = element.offset();
|
|
55
69
|
return {
|
|
56
|
-
left: offset.left,
|
|
57
|
-
top: offset.top,
|
|
70
|
+
left: offset === null || offset === void 0 ? void 0 : offset.left,
|
|
71
|
+
top: offset === null || offset === void 0 ? void 0 : offset.top,
|
|
58
72
|
width: element.outerWidth(),
|
|
59
73
|
height: element.outerHeight()
|
|
60
74
|
};
|
|
61
75
|
}
|
|
62
|
-
|
|
63
|
-
|
|
76
|
+
|
|
77
|
+
}
|
|
64
78
|
//# sourceMappingURL=TransitionIndicator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransitionIndicator.js","names":["$","
|
|
1
|
+
{"version":3,"file":"TransitionIndicator.js","names":["$","animFrame","TransitionIndicator","constructor","document","body","append","_element","destroy","remove","transitionElements","fromElement","toElement","_nextAnimationFrame","_toElement","_animationStartTime","toDimensions","_measure","animationProgress","Date","now","_totalAnimationDuration","currentFrameStyles","hide","opacity","keys","Object","_fromDimensions","cssProperty","css","bind","element","offset","left","top","width","outerWidth","height","outerHeight"],"sources":["../../src/controls/TransitionIndicator.ts"],"sourcesContent":["import $ from 'jquery';\nimport { animFrame } from '../utils';\n\nexport type TransitionDimensions = {\n left?: number;\n top?: number;\n width?: number;\n height?: number;\n opacity?: number;\n};\n\nexport default class TransitionIndicator {\n private _element = $('<div class=\"lm_transition_indicator\"></div>');\n private _toElement: JQuery<HTMLElement> | null = null;\n\n private _fromDimensions: TransitionDimensions = {};\n private _totalAnimationDuration = 200;\n private _animationStartTime: number | null = null;\n\n constructor() {\n $(document.body).append(this._element);\n }\n\n destroy() {\n this._element.remove();\n }\n\n transitionElements(\n fromElement: JQuery<HTMLElement>,\n toElement: JQuery<HTMLElement>\n ) {\n /**\n * TODO - This is not quite as cool as expected. Review.\n */\n return;\n // this._toElement = toElement;\n // this._animationStartTime = utils.now();\n // this._fromDimensions = this._measure(fromElement);\n // this._fromDimensions.opacity = 0.8;\n // this._element.show().css(this._fromDimensions);\n // utils.animFrame(utils.fnBind(this._nextAnimationFrame, this));\n }\n\n _nextAnimationFrame() {\n if (!this._toElement || this._animationStartTime == null) {\n return;\n }\n\n const toDimensions: TransitionDimensions = this._measure(this._toElement);\n const animationProgress =\n (Date.now() - this._animationStartTime) / this._totalAnimationDuration;\n const currentFrameStyles: TransitionDimensions = {};\n\n if (animationProgress >= 1) {\n this._element.hide();\n return;\n }\n\n toDimensions.opacity = 0;\n\n const keys = Object.keys(this._fromDimensions) as [\n keyof TransitionDimensions\n ];\n\n for (let cssProperty of keys) {\n currentFrameStyles[cssProperty] =\n (this._fromDimensions[cssProperty] ?? 0) +\n ((toDimensions[cssProperty] ?? 0) -\n (this._fromDimensions[cssProperty] ?? 0)) *\n animationProgress;\n }\n\n this._element.css(currentFrameStyles);\n animFrame(this._nextAnimationFrame.bind(this));\n }\n\n _measure(element: JQuery<HTMLElement>) {\n const offset = element.offset();\n\n return {\n left: offset?.left,\n top: offset?.top,\n width: element.outerWidth(),\n height: element.outerHeight(),\n };\n }\n}\n"],"mappings":";;AAAA,OAAOA,CAAP,MAAc,QAAd;SACSC,S;AAUT,eAAe,MAAMC,mBAAN,CAA0B;EAQvCC,WAAW,GAAG;IAAA,kCAPKH,CAAC,CAAC,6CAAD,CAON;;IAAA,oCANmC,IAMnC;;IAAA,yCAJkC,EAIlC;;IAAA,iDAHoB,GAGpB;;IAAA,6CAF+B,IAE/B;;IACZA,CAAC,CAACI,QAAQ,CAACC,IAAV,CAAD,CAAiBC,MAAjB,CAAwB,KAAKC,QAA7B;EACD;;EAEDC,OAAO,GAAG;IACR,KAAKD,QAAL,CAAcE,MAAd;EACD;;EAEDC,kBAAkB,CAChBC,WADgB,EAEhBC,SAFgB,EAGhB;IACA;AACJ;AACA;IACI,OAJA,CAKA;IACA;IACA;IACA;IACA;IACA;EACD;;EAEDC,mBAAmB,GAAG;IACpB,IAAI,CAAC,KAAKC,UAAN,IAAoB,KAAKC,mBAAL,IAA4B,IAApD,EAA0D;MACxD;IACD;;IAED,IAAMC,YAAkC,GAAG,KAAKC,QAAL,CAAc,KAAKH,UAAnB,CAA3C;;IACA,IAAMI,iBAAiB,GACrB,CAACC,IAAI,CAACC,GAAL,KAAa,KAAKL,mBAAnB,IAA0C,KAAKM,uBADjD;;IAEA,IAAMC,kBAAwC,GAAG,EAAjD;;IAEA,IAAIJ,iBAAiB,IAAI,CAAzB,EAA4B;MAC1B,KAAKX,QAAL,CAAcgB,IAAd;;MACA;IACD;;IAEDP,YAAY,CAACQ,OAAb,GAAuB,CAAvB;IAEA,IAAMC,IAAI,GAAGC,MAAM,CAACD,IAAP,CAAY,KAAKE,eAAjB,CAAb;;IAIA,KAAK,IAAIC,WAAT,IAAwBH,IAAxB,EAA8B;MAAA;;MAC5BH,kBAAkB,CAACM,WAAD,CAAlB,GACE,0BAAC,KAAKD,eAAL,CAAqBC,WAArB,CAAD,yEAAsC,CAAtC,IACA,CAAC,0BAACZ,YAAY,CAACY,WAAD,CAAb,yEAA8B,CAA9B,+BACE,KAAKD,eAAL,CAAqBC,WAArB,CADF,2EACuC,CADvC,CAAD,IAEEV,iBAJJ;IAKD;;IAED,KAAKX,QAAL,CAAcsB,GAAd,CAAkBP,kBAAlB;;IACArB,SAAS,CAAC,KAAKY,mBAAL,CAAyBiB,IAAzB,CAA8B,IAA9B,CAAD,CAAT;EACD;;EAEDb,QAAQ,CAACc,OAAD,EAA+B;IACrC,IAAMC,MAAM,GAAGD,OAAO,CAACC,MAAR,EAAf;IAEA,OAAO;MACLC,IAAI,EAAED,MAAF,aAAEA,MAAF,uBAAEA,MAAM,CAAEC,IADT;MAELC,GAAG,EAAEF,MAAF,aAAEA,MAAF,uBAAEA,MAAM,CAAEE,GAFR;MAGLC,KAAK,EAAEJ,OAAO,CAACK,UAAR,EAHF;MAILC,MAAM,EAAEN,OAAO,CAACO,WAAR;IAJH,CAAP;EAMD;;AA1EsC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { default as BrowserPopout } from './BrowserPopout';
|
|
2
|
+
export { default as DragProxy } from './DragProxy';
|
|
3
|
+
export { default as DragSource } from './DragSource';
|
|
4
|
+
export { default as DragSourceFromEvent } from './DragSourceFromEvent';
|
|
5
|
+
export { default as DropTargetIndicator } from './DropTargetIndicator';
|
|
6
|
+
export { default as Header } from './Header';
|
|
7
|
+
export { default as HeaderButton } from './HeaderButton';
|
|
8
|
+
export { default as Splitter } from './Splitter';
|
|
9
|
+
export { default as Tab } from './Tab';
|
|
10
|
+
export { default as TransitionIndicator } from './TransitionIndicator';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/controls/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
|