@deephaven/components 0.5.2-beta.0 → 0.6.1-demo.10
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/AutoCompleteInput.js +410 -448
- package/dist/AutoCompleteInput.js.map +1 -1
- package/dist/AutoResizeTextarea.js +17 -46
- package/dist/AutoResizeTextarea.js.map +1 -1
- package/dist/BasicModal.js +18 -19
- package/dist/BasicModal.js.map +1 -1
- package/dist/Button.js +30 -21
- package/dist/Button.js.map +1 -1
- package/dist/ButtonGroup.js +6 -4
- package/dist/ButtonGroup.js.map +1 -1
- package/dist/ButtonOld.js +10 -8
- package/dist/ButtonOld.js.map +1 -1
- package/dist/CardFlip.js +10 -8
- package/dist/CardFlip.js.map +1 -1
- package/dist/Checkbox.js +18 -31
- package/dist/Checkbox.js.map +1 -1
- package/dist/Collapse.js +65 -105
- package/dist/Collapse.js.map +1 -1
- package/dist/ComboBox.js +432 -460
- package/dist/ComboBox.js.map +1 -1
- package/dist/CustomTimeSelect.js +485 -517
- package/dist/CustomTimeSelect.js.map +1 -1
- package/dist/DebouncedSearchInput.js +61 -91
- package/dist/DebouncedSearchInput.js.map +1 -1
- package/dist/DeephavenSpinner.js +6 -6
- package/dist/DeephavenSpinner.js.map +1 -1
- package/dist/DragUtils.js +65 -113
- package/dist/DragUtils.js.map +1 -1
- package/dist/DraggableItemList.d.ts +1 -0
- package/dist/DraggableItemList.d.ts.map +1 -1
- package/dist/DraggableItemList.js +219 -257
- package/dist/DraggableItemList.js.map +1 -1
- package/dist/HierarchicalCheckboxMenu.js +160 -227
- package/dist/HierarchicalCheckboxMenu.js.map +1 -1
- package/dist/ItemList.d.ts +4 -2
- package/dist/ItemList.d.ts.map +1 -1
- package/dist/ItemList.js +595 -598
- package/dist/ItemList.js.map +1 -1
- package/dist/ItemListItem.js +194 -215
- package/dist/ItemListItem.js.map +1 -1
- package/dist/LoadingOverlay.js +9 -10
- package/dist/LoadingOverlay.js.map +1 -1
- package/dist/LoadingSpinner.js +4 -3
- package/dist/LoadingSpinner.js.map +1 -1
- package/dist/MaskedInput.js +59 -70
- package/dist/MaskedInput.js.map +1 -1
- package/dist/Option.js +5 -3
- package/dist/Option.js.map +1 -1
- package/dist/RadioGroup.js +16 -34
- package/dist/RadioGroup.js.map +1 -1
- package/dist/RadioItem.js +14 -33
- package/dist/RadioItem.js.map +1 -1
- package/dist/SearchInput.js +42 -75
- package/dist/SearchInput.js.map +1 -1
- package/dist/Select.js +10 -8
- package/dist/Select.js.map +1 -1
- package/dist/SelectValueList.js +97 -134
- package/dist/SelectValueList.js.map +1 -1
- package/dist/SocketedButton.js +13 -11
- package/dist/SocketedButton.js.map +1 -1
- package/dist/ThemeExport.js.map +1 -1
- package/dist/TimeInput.js +16 -53
- package/dist/TimeInput.js.map +1 -1
- package/dist/TimeSlider.js +62 -88
- package/dist/TimeSlider.js.map +1 -1
- package/dist/ToastNotification.js +14 -13
- package/dist/ToastNotification.js.map +1 -1
- package/dist/UISwitch.js +9 -8
- package/dist/UISwitch.js.map +1 -1
- package/dist/context-actions/ContextActionUtils.js +173 -231
- package/dist/context-actions/ContextActionUtils.js.map +1 -1
- package/dist/context-actions/ContextActions.js +135 -177
- package/dist/context-actions/ContextActions.js.map +1 -1
- package/dist/context-actions/ContextMenu.js +509 -543
- package/dist/context-actions/ContextMenu.js.map +1 -1
- package/dist/context-actions/ContextMenuItem.js +32 -22
- package/dist/context-actions/ContextMenuItem.js.map +1 -1
- package/dist/context-actions/ContextMenuRoot.js +112 -152
- package/dist/context-actions/ContextMenuRoot.js.map +1 -1
- package/dist/context-actions/GlobalContextAction.js +49 -84
- package/dist/context-actions/GlobalContextAction.js.map +1 -1
- package/dist/context-actions/GlobalContextActions.js +25 -57
- package/dist/context-actions/GlobalContextActions.js.map +1 -1
- package/dist/context-actions/index.js +4 -4
- package/dist/context-actions/index.js.map +1 -1
- package/dist/index.js +39 -39
- package/dist/index.js.map +1 -1
- package/dist/menu-actions/DropdownMenu.js +126 -159
- package/dist/menu-actions/DropdownMenu.js.map +1 -1
- package/dist/menu-actions/Menu.js +215 -245
- package/dist/menu-actions/Menu.js.map +1 -1
- package/dist/menu-actions/index.js +1 -1
- package/dist/menu-actions/index.js.map +1 -1
- package/dist/navigation/Menu.js +14 -18
- package/dist/navigation/Menu.js.map +1 -1
- package/dist/navigation/MenuItem.js +15 -14
- package/dist/navigation/MenuItem.js.map +1 -1
- package/dist/navigation/Page.js +7 -5
- package/dist/navigation/Page.js.map +1 -1
- package/dist/navigation/Stack.js +14 -39
- package/dist/navigation/Stack.js.map +1 -1
- package/dist/navigation/index.js +4 -4
- package/dist/navigation/index.js.map +1 -1
- package/dist/popper/Popper.js +209 -235
- package/dist/popper/Popper.js.map +1 -1
- package/dist/popper/Tooltip.js +227 -257
- package/dist/popper/Tooltip.js.map +1 -1
- package/dist/popper/index.js +2 -2
- package/dist/popper/index.js.map +1 -1
- package/dist/shortcuts/GlobalShortcuts.js +2 -2
- package/dist/shortcuts/GlobalShortcuts.js.map +1 -1
- package/dist/shortcuts/Shortcut.js +263 -291
- package/dist/shortcuts/Shortcut.js.map +1 -1
- package/dist/shortcuts/ShortcutRegistry.js +48 -71
- package/dist/shortcuts/ShortcutRegistry.js.map +1 -1
- package/dist/shortcuts/index.js +4 -4
- package/dist/shortcuts/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +30 -54
package/dist/popper/Tooltip.js
CHANGED
|
@@ -1,31 +1,9 @@
|
|
|
1
|
-
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
2
|
-
|
|
3
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
4
|
-
|
|
5
|
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
6
|
-
|
|
7
|
-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
|
8
|
-
|
|
9
|
-
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
|
10
|
-
|
|
11
|
-
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
12
|
-
|
|
13
|
-
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
14
|
-
|
|
15
|
-
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
|
|
16
|
-
|
|
17
|
-
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
18
|
-
|
|
19
|
-
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
20
|
-
|
|
21
|
-
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
|
22
|
-
|
|
23
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; }
|
|
24
2
|
|
|
25
3
|
import React, { Component } from 'react';
|
|
26
4
|
import classNames from 'classnames';
|
|
27
5
|
import Log from '@deephaven/log';
|
|
28
|
-
import Popper from
|
|
6
|
+
import Popper from "./Popper.js";
|
|
29
7
|
var log = Log.module('Tooltip');
|
|
30
8
|
|
|
31
9
|
/**
|
|
@@ -40,290 +18,282 @@ var log = Log.module('Tooltip');
|
|
|
40
18
|
* </Tooltip>
|
|
41
19
|
* </div>
|
|
42
20
|
*/
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
var _super = _createSuper(Tooltip);
|
|
21
|
+
class Tooltip extends Component {
|
|
22
|
+
static handleHidden() {
|
|
23
|
+
Tooltip.shownTooltipCount -= 1;
|
|
47
24
|
|
|
48
|
-
|
|
49
|
-
|
|
25
|
+
if (Tooltip.shownTooltipCount === 0) {
|
|
26
|
+
Tooltip.lastHiddenTime = Date.now();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
50
29
|
|
|
51
|
-
|
|
30
|
+
static handleShown() {
|
|
31
|
+
Tooltip.shownTooltipCount += 1;
|
|
32
|
+
}
|
|
52
33
|
|
|
53
|
-
|
|
34
|
+
constructor(props) {
|
|
35
|
+
super(props);
|
|
54
36
|
|
|
55
|
-
_defineProperty(
|
|
37
|
+
_defineProperty(this, "container", void 0);
|
|
56
38
|
|
|
57
|
-
_defineProperty(
|
|
39
|
+
_defineProperty(this, "popper", void 0);
|
|
58
40
|
|
|
59
|
-
_defineProperty(
|
|
41
|
+
_defineProperty(this, "parent", void 0);
|
|
60
42
|
|
|
61
|
-
_defineProperty(
|
|
43
|
+
_defineProperty(this, "timer", void 0);
|
|
62
44
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
45
|
+
this.handleMouseMove = this.handleMouseMove.bind(this);
|
|
46
|
+
this.handleMouseLeave = this.handleMouseLeave.bind(this);
|
|
47
|
+
this.handleWindowMouseMove = this.handleWindowMouseMove.bind(this);
|
|
48
|
+
this.handleWheel = this.handleWheel.bind(this);
|
|
49
|
+
this.handleTimeout = this.handleTimeout.bind(this);
|
|
50
|
+
this.handleExited = this.handleExited.bind(this);
|
|
51
|
+
this.stopShowingTooltip = this.stopShowingTooltip.bind(this);
|
|
52
|
+
this.container = /*#__PURE__*/React.createRef();
|
|
53
|
+
this.popper = /*#__PURE__*/React.createRef();
|
|
54
|
+
this.parent = null;
|
|
55
|
+
this.timer = null;
|
|
56
|
+
this.state = {
|
|
75
57
|
isShown: false
|
|
76
58
|
};
|
|
77
|
-
return _this;
|
|
78
59
|
}
|
|
79
60
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
61
|
+
componentDidMount() {
|
|
62
|
+
this.startListening();
|
|
63
|
+
var {
|
|
64
|
+
timeout
|
|
65
|
+
} = this.props;
|
|
85
66
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}, {
|
|
91
|
-
key: "componentDidUpdate",
|
|
92
|
-
value: function componentDidUpdate(prevProps, prevState) {
|
|
93
|
-
var oldIsShown = prevState.isShown;
|
|
94
|
-
var isShown = this.state.isShown;
|
|
95
|
-
|
|
96
|
-
if (isShown !== oldIsShown) {
|
|
97
|
-
if (isShown) {
|
|
98
|
-
Tooltip.handleShown();
|
|
99
|
-
} else {
|
|
100
|
-
Tooltip.handleHidden();
|
|
101
|
-
}
|
|
102
|
-
}
|
|
67
|
+
if (timeout === 0) {
|
|
68
|
+
this.show();
|
|
103
69
|
}
|
|
104
|
-
}
|
|
105
|
-
key: "componentWillUnmount",
|
|
106
|
-
value: function componentWillUnmount() {
|
|
107
|
-
this.stopListening();
|
|
108
|
-
this.stopListeningWindow();
|
|
109
|
-
this.stopTimer();
|
|
110
|
-
var isShown = this.state.isShown;
|
|
70
|
+
}
|
|
111
71
|
|
|
72
|
+
componentDidUpdate(prevProps, prevState) {
|
|
73
|
+
var {
|
|
74
|
+
isShown: oldIsShown
|
|
75
|
+
} = prevState;
|
|
76
|
+
var {
|
|
77
|
+
isShown
|
|
78
|
+
} = this.state;
|
|
79
|
+
|
|
80
|
+
if (isShown !== oldIsShown) {
|
|
112
81
|
if (isShown) {
|
|
82
|
+
Tooltip.handleShown();
|
|
83
|
+
} else {
|
|
113
84
|
Tooltip.handleHidden();
|
|
114
85
|
}
|
|
115
86
|
}
|
|
116
|
-
}
|
|
117
|
-
key: "startListening",
|
|
118
|
-
value: function startListening() {
|
|
119
|
-
if (!this.container.current || !this.container.current.parentElement) {
|
|
120
|
-
log.error("Tooltip doesn't have a container or a parent set!");
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
87
|
+
}
|
|
123
88
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
value: function stopListening() {
|
|
132
|
-
if (!this.parent) {
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
89
|
+
componentWillUnmount() {
|
|
90
|
+
this.stopListening();
|
|
91
|
+
this.stopListeningWindow();
|
|
92
|
+
this.stopTimer();
|
|
93
|
+
var {
|
|
94
|
+
isShown
|
|
95
|
+
} = this.state;
|
|
135
96
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
this.parent.removeEventListener('mousedown', this.stopShowingTooltip);
|
|
139
|
-
}
|
|
140
|
-
}, {
|
|
141
|
-
key: "startListeningWindow",
|
|
142
|
-
value: function startListeningWindow() {
|
|
143
|
-
window.addEventListener('mousemove', this.handleWindowMouseMove, true);
|
|
144
|
-
window.addEventListener('contextmenu', this.stopShowingTooltip, true);
|
|
145
|
-
window.addEventListener('wheel', this.handleWheel);
|
|
146
|
-
}
|
|
147
|
-
}, {
|
|
148
|
-
key: "stopListeningWindow",
|
|
149
|
-
value: function stopListeningWindow() {
|
|
150
|
-
window.removeEventListener('mousemove', this.handleWindowMouseMove, true);
|
|
151
|
-
window.removeEventListener('contextmenu', this.stopShowingTooltip, true);
|
|
152
|
-
window.removeEventListener('wheel', this.handleWheel);
|
|
153
|
-
}
|
|
154
|
-
}, {
|
|
155
|
-
key: "handleMouseMove",
|
|
156
|
-
value: function handleMouseMove() {
|
|
157
|
-
this.startTimer();
|
|
97
|
+
if (isShown) {
|
|
98
|
+
Tooltip.handleHidden();
|
|
158
99
|
}
|
|
159
|
-
}
|
|
160
|
-
key: "handleWheel",
|
|
161
|
-
value: function handleWheel() {
|
|
162
|
-
var isShown = this.state.isShown;
|
|
163
|
-
|
|
164
|
-
if (this.popper.current && this.parent && isShown) {
|
|
165
|
-
if (!this.popper.current.element.matches(':hover') && !this.parent.matches(':hover')) {
|
|
166
|
-
this.stopTimer();
|
|
167
|
-
this.hide();
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
}, {
|
|
172
|
-
key: "handleMouseLeave",
|
|
173
|
-
value: function handleMouseLeave() {
|
|
174
|
-
var isShown = this.state.isShown;
|
|
175
|
-
this.stopTimer();
|
|
176
|
-
var interactive = this.props.interactive;
|
|
100
|
+
}
|
|
177
101
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
102
|
+
startListening() {
|
|
103
|
+
if (!this.container.current || !this.container.current.parentElement) {
|
|
104
|
+
log.error("Tooltip doesn't have a container or a parent set!");
|
|
105
|
+
return;
|
|
181
106
|
}
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
107
|
+
|
|
108
|
+
this.parent = this.container.current.parentElement;
|
|
109
|
+
this.parent.addEventListener('mousemove', this.handleMouseMove);
|
|
110
|
+
this.parent.addEventListener('mouseleave', this.handleMouseLeave);
|
|
111
|
+
this.parent.addEventListener('mousedown', this.stopShowingTooltip);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
stopListening() {
|
|
115
|
+
if (!this.parent) {
|
|
116
|
+
return;
|
|
186
117
|
}
|
|
187
|
-
}, {
|
|
188
|
-
key: "handleWindowMouseMove",
|
|
189
|
-
value: function handleWindowMouseMove(event) {
|
|
190
|
-
var mouseX = event.clientX;
|
|
191
|
-
var mouseY = event.clientY;
|
|
192
|
-
var isShown = this.state.isShown;
|
|
193
|
-
|
|
194
|
-
if (!this.popper.current || !this.parent) {
|
|
195
|
-
return;
|
|
196
|
-
}
|
|
197
118
|
|
|
198
|
-
|
|
199
|
-
|
|
119
|
+
this.parent.removeEventListener('mousemove', this.handleMouseMove);
|
|
120
|
+
this.parent.removeEventListener('mouseleave', this.handleMouseLeave);
|
|
121
|
+
this.parent.removeEventListener('mousedown', this.stopShowingTooltip);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
startListeningWindow() {
|
|
125
|
+
window.addEventListener('mousemove', this.handleWindowMouseMove, true);
|
|
126
|
+
window.addEventListener('contextmenu', this.stopShowingTooltip, true);
|
|
127
|
+
window.addEventListener('wheel', this.handleWheel);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
stopListeningWindow() {
|
|
131
|
+
window.removeEventListener('mousemove', this.handleWindowMouseMove, true);
|
|
132
|
+
window.removeEventListener('contextmenu', this.stopShowingTooltip, true);
|
|
133
|
+
window.removeEventListener('wheel', this.handleWheel);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
handleMouseMove() {
|
|
137
|
+
this.startTimer();
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
handleWheel() {
|
|
141
|
+
var {
|
|
142
|
+
isShown
|
|
143
|
+
} = this.state;
|
|
200
144
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
} else if (mouseX >= parentRect.left && mouseX <= parentRect.left + parentRect.width && mouseY >= parentRect.top && mouseY <= parentRect.top + parentRect.height) {
|
|
204
|
-
this.handleMouseMove();
|
|
205
|
-
} else if (isShown) {
|
|
145
|
+
if (this.popper.current && this.parent && isShown) {
|
|
146
|
+
if (!this.popper.current.element.matches(':hover') && !this.parent.matches(':hover')) {
|
|
206
147
|
this.stopTimer();
|
|
207
148
|
this.hide();
|
|
208
149
|
}
|
|
209
150
|
}
|
|
210
|
-
}
|
|
211
|
-
key: "startTimer",
|
|
212
|
-
value: function startTimer() {
|
|
213
|
-
this.stopTimer();
|
|
214
|
-
var _this$props = this.props,
|
|
215
|
-
timeout = _this$props.timeout,
|
|
216
|
-
reshowTimeout = _this$props.reshowTimeout;
|
|
217
|
-
var timerTimeout = timeout;
|
|
218
|
-
|
|
219
|
-
if (Tooltip.shownTooltipCount > 0 || Date.now() - Tooltip.lastHiddenTime < Tooltip.triggerReshowThreshold) {
|
|
220
|
-
timerTimeout = reshowTimeout;
|
|
221
|
-
}
|
|
151
|
+
}
|
|
222
152
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
153
|
+
handleMouseLeave() {
|
|
154
|
+
var {
|
|
155
|
+
isShown
|
|
156
|
+
} = this.state;
|
|
157
|
+
this.stopTimer();
|
|
158
|
+
var {
|
|
159
|
+
interactive
|
|
160
|
+
} = this.props;
|
|
161
|
+
|
|
162
|
+
if (!interactive && isShown) {
|
|
163
|
+
this.hide();
|
|
232
164
|
}
|
|
233
|
-
}
|
|
234
|
-
key: "show",
|
|
235
|
-
value: function show() {
|
|
236
|
-
var isShown = this.state.isShown;
|
|
237
|
-
this.stopTimer();
|
|
165
|
+
}
|
|
238
166
|
|
|
239
|
-
|
|
240
|
-
|
|
167
|
+
handleTimeout() {
|
|
168
|
+
this.show();
|
|
169
|
+
}
|
|
241
170
|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
171
|
+
handleWindowMouseMove(event) {
|
|
172
|
+
var mouseX = event.clientX;
|
|
173
|
+
var mouseY = event.clientY;
|
|
174
|
+
var {
|
|
175
|
+
isShown
|
|
176
|
+
} = this.state;
|
|
247
177
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
}
|
|
251
|
-
}
|
|
178
|
+
if (!this.popper.current || !this.parent) {
|
|
179
|
+
return;
|
|
252
180
|
}
|
|
253
|
-
}, {
|
|
254
|
-
key: "hide",
|
|
255
|
-
value: function hide() {
|
|
256
|
-
var _this$popper$current2;
|
|
257
181
|
|
|
258
|
-
|
|
259
|
-
|
|
182
|
+
var popperRect = this.popper.current.element.getBoundingClientRect();
|
|
183
|
+
var parentRect = this.parent.getBoundingClientRect();
|
|
184
|
+
|
|
185
|
+
if (mouseX >= popperRect.left && mouseX <= popperRect.left + popperRect.width && mouseY >= popperRect.top && mouseY <= popperRect.top + popperRect.height) {
|
|
186
|
+
this.handleMouseMove();
|
|
187
|
+
} else if (mouseX >= parentRect.left && mouseX <= parentRect.left + parentRect.width && mouseY >= parentRect.top && mouseY <= parentRect.top + parentRect.height) {
|
|
188
|
+
this.handleMouseMove();
|
|
189
|
+
} else if (isShown) {
|
|
190
|
+
this.stopTimer();
|
|
191
|
+
this.hide();
|
|
260
192
|
}
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
startTimer() {
|
|
196
|
+
this.stopTimer();
|
|
197
|
+
var {
|
|
198
|
+
timeout,
|
|
199
|
+
reshowTimeout
|
|
200
|
+
} = this.props;
|
|
201
|
+
var timerTimeout = timeout;
|
|
265
202
|
|
|
266
|
-
|
|
203
|
+
if (Tooltip.shownTooltipCount > 0 || Date.now() - Tooltip.lastHiddenTime < Tooltip.triggerReshowThreshold) {
|
|
204
|
+
timerTimeout = reshowTimeout;
|
|
267
205
|
}
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
206
|
+
|
|
207
|
+
this.timer = window.setTimeout(this.handleTimeout, timerTimeout);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
stopTimer() {
|
|
211
|
+
if (this.timer) {
|
|
212
|
+
clearTimeout(this.timer);
|
|
213
|
+
this.timer = null;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
show() {
|
|
218
|
+
var {
|
|
219
|
+
isShown
|
|
220
|
+
} = this.state;
|
|
221
|
+
this.stopTimer();
|
|
222
|
+
|
|
223
|
+
if (!isShown) {
|
|
224
|
+
var _this$popper$current;
|
|
225
|
+
|
|
226
|
+
(_this$popper$current = this.popper.current) === null || _this$popper$current === void 0 ? void 0 : _this$popper$current.show();
|
|
271
227
|
this.setState({
|
|
272
|
-
isShown:
|
|
228
|
+
isShown: true
|
|
273
229
|
});
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
value: function stopShowingTooltip() {
|
|
278
|
-
var isShown = this.state.isShown;
|
|
279
|
-
this.stopTimer();
|
|
230
|
+
var {
|
|
231
|
+
interactive
|
|
232
|
+
} = this.props;
|
|
280
233
|
|
|
281
|
-
if (
|
|
282
|
-
this.
|
|
234
|
+
if (interactive) {
|
|
235
|
+
this.startListeningWindow();
|
|
283
236
|
}
|
|
284
237
|
}
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
hide() {
|
|
241
|
+
var _this$popper$current2;
|
|
242
|
+
|
|
243
|
+
(_this$popper$current2 = this.popper.current) === null || _this$popper$current2 === void 0 ? void 0 : _this$popper$current2.hide();
|
|
244
|
+
this.stopListeningWindow();
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
update() {
|
|
248
|
+
var _this$popper$current3;
|
|
249
|
+
|
|
250
|
+
(_this$popper$current3 = this.popper.current) === null || _this$popper$current3 === void 0 ? void 0 : _this$popper$current3.scheduleUpdate();
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
handleExited() {
|
|
254
|
+
this.setState({
|
|
255
|
+
isShown: false
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
stopShowingTooltip() {
|
|
260
|
+
var {
|
|
261
|
+
isShown
|
|
262
|
+
} = this.state;
|
|
263
|
+
this.stopTimer();
|
|
264
|
+
|
|
265
|
+
if (isShown) {
|
|
266
|
+
this.hide();
|
|
308
267
|
}
|
|
309
|
-
}
|
|
310
|
-
key: "handleHidden",
|
|
311
|
-
value: function handleHidden() {
|
|
312
|
-
Tooltip.shownTooltipCount -= 1;
|
|
268
|
+
}
|
|
313
269
|
|
|
314
|
-
|
|
315
|
-
|
|
270
|
+
render() {
|
|
271
|
+
var {
|
|
272
|
+
interactive,
|
|
273
|
+
children,
|
|
274
|
+
options,
|
|
275
|
+
popperClassName
|
|
276
|
+
} = this.props;
|
|
277
|
+
var {
|
|
278
|
+
isShown
|
|
279
|
+
} = this.state;
|
|
280
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
281
|
+
ref: this.container,
|
|
282
|
+
style: {
|
|
283
|
+
display: 'none'
|
|
316
284
|
}
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
285
|
+
}, /*#__PURE__*/React.createElement(Popper, {
|
|
286
|
+
className: classNames(popperClassName),
|
|
287
|
+
options: options,
|
|
288
|
+
ref: this.popper,
|
|
289
|
+
onExited: this.handleExited,
|
|
290
|
+
interactive: interactive
|
|
291
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
292
|
+
className: "tooltip-content"
|
|
293
|
+
}, " ", isShown && children)));
|
|
294
|
+
}
|
|
324
295
|
|
|
325
|
-
|
|
326
|
-
}(Component);
|
|
296
|
+
}
|
|
327
297
|
|
|
328
298
|
_defineProperty(Tooltip, "defaultTimeout", 500);
|
|
329
299
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/popper/Tooltip.tsx"],"names":["React","Component","classNames","Log","Popper","log","module","Tooltip","props","handleMouseMove","bind","handleMouseLeave","handleWindowMouseMove","handleWheel","handleTimeout","handleExited","stopShowingTooltip","container","createRef","popper","parent","timer","state","isShown","startListening","timeout","show","prevProps","prevState","oldIsShown","handleShown","handleHidden","stopListening","stopListeningWindow","stopTimer","current","parentElement","error","addEventListener","removeEventListener","window","startTimer","element","matches","hide","interactive","event","mouseX","clientX","mouseY","clientY","popperRect","getBoundingClientRect","parentRect","left","width","top","height","reshowTimeout","timerTimeout","shownTooltipCount","Date","now","lastHiddenTime","triggerReshowThreshold","setTimeout","clearTimeout","setState","startListeningWindow","scheduleUpdate","children","options","popperClassName","display","defaultReshowTimeout","defaultTimeout"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport Popper, { PopperOptions } from './Popper';\n\nconst log = Log.module('Tooltip');\n\ninterface TooltipProps {\n interactive: boolean;\n options: PopperOptions;\n timeout: number;\n reshowTimeout: number;\n children: React.ReactNode;\n popperClassName: string;\n}\n\ninterface TooltipState {\n isShown: boolean;\n}\n\n/**\n * Component that can be added to an element to automatically display a tooltip.\n * Content is mounted lazily, so don't worry about complex tooltips!\n *\n * Usage:\n * <div className=\"parent-container\">\n * Hover this container to see a tooltip\n * <Tooltip>\n * <div>My tooltip content goes here!</div>\n * </Tooltip>\n * </div>\n */\nclass Tooltip extends Component<TooltipProps, TooltipState> {\n static defaultTimeout = 500;\n\n static defaultReshowTimeout = 100;\n\n static triggerReshowThreshold = 300;\n\n static shownTooltipCount = 0;\n\n static lastHiddenTime = Date.now();\n\n static defaultProps = {\n interactive: false,\n options: {},\n popperClassName: '',\n reshowTimeout: Tooltip.defaultReshowTimeout,\n timeout: Tooltip.defaultTimeout,\n };\n\n static handleHidden(): void {\n Tooltip.shownTooltipCount -= 1;\n\n if (Tooltip.shownTooltipCount === 0) {\n Tooltip.lastHiddenTime = Date.now();\n }\n }\n\n static handleShown(): void {\n Tooltip.shownTooltipCount += 1;\n }\n\n constructor(props: TooltipProps) {\n super(props);\n\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleWindowMouseMove = this.handleWindowMouseMove.bind(this);\n this.handleWheel = this.handleWheel.bind(this);\n this.handleTimeout = this.handleTimeout.bind(this);\n this.handleExited = this.handleExited.bind(this);\n this.stopShowingTooltip = this.stopShowingTooltip.bind(this);\n\n this.container = React.createRef();\n this.popper = React.createRef();\n this.parent = null;\n this.timer = null;\n\n this.state = {\n isShown: false,\n };\n }\n\n componentDidMount(): void {\n this.startListening();\n\n const { timeout } = this.props;\n if (timeout === 0) {\n this.show();\n }\n }\n\n componentDidUpdate(prevProps: TooltipProps, prevState: TooltipState): void {\n const { isShown: oldIsShown } = prevState;\n const { isShown } = this.state;\n\n if (isShown !== oldIsShown) {\n if (isShown) {\n Tooltip.handleShown();\n } else {\n Tooltip.handleHidden();\n }\n }\n }\n\n componentWillUnmount(): void {\n this.stopListening();\n this.stopListeningWindow();\n this.stopTimer();\n\n const { isShown } = this.state;\n\n if (isShown) {\n Tooltip.handleHidden();\n }\n }\n\n container: React.RefObject<HTMLDivElement>;\n\n popper: React.RefObject<Popper>;\n\n parent: HTMLElement | null;\n\n // This is platform dependent of Node/DOM\n // Jest requires Node types\n timer: number | null;\n\n startListening(): void {\n if (!this.container.current || !this.container.current.parentElement) {\n log.error(\"Tooltip doesn't have a container or a parent set!\");\n return;\n }\n\n this.parent = this.container.current.parentElement;\n this.parent.addEventListener('mousemove', this.handleMouseMove);\n this.parent.addEventListener('mouseleave', this.handleMouseLeave);\n this.parent.addEventListener('mousedown', this.stopShowingTooltip);\n }\n\n stopListening(): void {\n if (!this.parent) {\n return;\n }\n\n this.parent.removeEventListener('mousemove', this.handleMouseMove);\n this.parent.removeEventListener('mouseleave', this.handleMouseLeave);\n this.parent.removeEventListener('mousedown', this.stopShowingTooltip);\n }\n\n startListeningWindow(): void {\n window.addEventListener('mousemove', this.handleWindowMouseMove, true);\n window.addEventListener('contextmenu', this.stopShowingTooltip, true);\n window.addEventListener('wheel', this.handleWheel);\n }\n\n stopListeningWindow(): void {\n window.removeEventListener('mousemove', this.handleWindowMouseMove, true);\n window.removeEventListener('contextmenu', this.stopShowingTooltip, true);\n window.removeEventListener('wheel', this.handleWheel);\n }\n\n handleMouseMove(): void {\n this.startTimer();\n }\n\n handleWheel(): void {\n const { isShown } = this.state;\n if (this.popper.current && this.parent && isShown) {\n if (\n !this.popper.current.element.matches(':hover') &&\n !this.parent.matches(':hover')\n ) {\n this.stopTimer();\n this.hide();\n }\n }\n }\n\n handleMouseLeave(): void {\n const { isShown } = this.state;\n this.stopTimer();\n\n const { interactive } = this.props;\n if (!interactive && isShown) {\n this.hide();\n }\n }\n\n handleTimeout(): void {\n this.show();\n }\n\n handleWindowMouseMove(event: MouseEvent): void {\n const mouseX = event.clientX;\n const mouseY = event.clientY;\n const { isShown } = this.state;\n\n if (!this.popper.current || !this.parent) {\n return;\n }\n const popperRect = this.popper.current.element.getBoundingClientRect();\n const parentRect = this.parent.getBoundingClientRect();\n\n if (\n mouseX >= popperRect.left &&\n mouseX <= popperRect.left + popperRect.width &&\n mouseY >= popperRect.top &&\n mouseY <= popperRect.top + popperRect.height\n ) {\n this.handleMouseMove();\n } else if (\n mouseX >= parentRect.left &&\n mouseX <= parentRect.left + parentRect.width &&\n mouseY >= parentRect.top &&\n mouseY <= parentRect.top + parentRect.height\n ) {\n this.handleMouseMove();\n } else if (isShown) {\n this.stopTimer();\n this.hide();\n }\n }\n\n startTimer(): void {\n this.stopTimer();\n\n const { timeout, reshowTimeout } = this.props;\n let timerTimeout = timeout;\n if (\n Tooltip.shownTooltipCount > 0 ||\n Date.now() - Tooltip.lastHiddenTime < Tooltip.triggerReshowThreshold\n ) {\n timerTimeout = reshowTimeout;\n }\n this.timer = window.setTimeout(this.handleTimeout, timerTimeout);\n }\n\n stopTimer(): void {\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n\n show(): void {\n const { isShown } = this.state;\n this.stopTimer();\n\n if (!isShown) {\n this.popper.current?.show();\n this.setState({ isShown: true });\n\n const { interactive } = this.props;\n if (interactive) {\n this.startListeningWindow();\n }\n }\n }\n\n hide(): void {\n this.popper.current?.hide();\n this.stopListeningWindow();\n }\n\n update(): void {\n this.popper.current?.scheduleUpdate();\n }\n\n handleExited(): void {\n this.setState({ isShown: false });\n }\n\n stopShowingTooltip(): void {\n const { isShown } = this.state;\n this.stopTimer();\n if (isShown) {\n this.hide();\n }\n }\n\n render(): JSX.Element {\n const { interactive, children, options, popperClassName } = this.props;\n const { isShown } = this.state;\n return (\n <div ref={this.container} style={{ display: 'none' }}>\n <Popper\n className={classNames(popperClassName)}\n options={options}\n ref={this.popper}\n onExited={this.handleExited}\n interactive={interactive}\n >\n <div className=\"tooltip-content\"> {isShown && children}</div>\n </Popper>\n </div>\n );\n }\n}\n\nexport default Tooltip;\n"],"file":"Tooltip.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/popper/Tooltip.tsx"],"names":["React","Component","classNames","Log","Popper","log","module","Tooltip","handleHidden","shownTooltipCount","lastHiddenTime","Date","now","handleShown","constructor","props","handleMouseMove","bind","handleMouseLeave","handleWindowMouseMove","handleWheel","handleTimeout","handleExited","stopShowingTooltip","container","createRef","popper","parent","timer","state","isShown","componentDidMount","startListening","timeout","show","componentDidUpdate","prevProps","prevState","oldIsShown","componentWillUnmount","stopListening","stopListeningWindow","stopTimer","current","parentElement","error","addEventListener","removeEventListener","startListeningWindow","window","startTimer","element","matches","hide","interactive","event","mouseX","clientX","mouseY","clientY","popperRect","getBoundingClientRect","parentRect","left","width","top","height","reshowTimeout","timerTimeout","triggerReshowThreshold","setTimeout","clearTimeout","setState","update","scheduleUpdate","render","children","options","popperClassName","display","defaultReshowTimeout","defaultTimeout"],"mappings":";;AAAA,OAAOA,KAAP,IAAgBC,SAAhB,QAAiC,OAAjC;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,OAAOC,GAAP,MAAgB,gBAAhB;OACOC,M;AAEP,IAAMC,GAAG,GAAGF,GAAG,CAACG,MAAJ,CAAW,SAAX,CAAZ;;AAeA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,OAAN,SAAsBN,SAAtB,CAA4D;AAmBvC,SAAZO,YAAY,GAAS;AAC1BD,IAAAA,OAAO,CAACE,iBAAR,IAA6B,CAA7B;;AAEA,QAAIF,OAAO,CAACE,iBAAR,KAA8B,CAAlC,EAAqC;AACnCF,MAAAA,OAAO,CAACG,cAAR,GAAyBC,IAAI,CAACC,GAAL,EAAzB;AACD;AACF;;AAEiB,SAAXC,WAAW,GAAS;AACzBN,IAAAA,OAAO,CAACE,iBAAR,IAA6B,CAA7B;AACD;;AAEDK,EAAAA,WAAW,CAACC,KAAD,EAAsB;AAC/B,UAAMA,KAAN;;AAD+B;;AAAA;;AAAA;;AAAA;;AAG/B,SAAKC,eAAL,GAAuB,KAAKA,eAAL,CAAqBC,IAArB,CAA0B,IAA1B,CAAvB;AACA,SAAKC,gBAAL,GAAwB,KAAKA,gBAAL,CAAsBD,IAAtB,CAA2B,IAA3B,CAAxB;AACA,SAAKE,qBAAL,GAA6B,KAAKA,qBAAL,CAA2BF,IAA3B,CAAgC,IAAhC,CAA7B;AACA,SAAKG,WAAL,GAAmB,KAAKA,WAAL,CAAiBH,IAAjB,CAAsB,IAAtB,CAAnB;AACA,SAAKI,aAAL,GAAqB,KAAKA,aAAL,CAAmBJ,IAAnB,CAAwB,IAAxB,CAArB;AACA,SAAKK,YAAL,GAAoB,KAAKA,YAAL,CAAkBL,IAAlB,CAAuB,IAAvB,CAApB;AACA,SAAKM,kBAAL,GAA0B,KAAKA,kBAAL,CAAwBN,IAAxB,CAA6B,IAA7B,CAA1B;AAEA,SAAKO,SAAL,gBAAiBxB,KAAK,CAACyB,SAAN,EAAjB;AACA,SAAKC,MAAL,gBAAc1B,KAAK,CAACyB,SAAN,EAAd;AACA,SAAKE,MAAL,GAAc,IAAd;AACA,SAAKC,KAAL,GAAa,IAAb;AAEA,SAAKC,KAAL,GAAa;AACXC,MAAAA,OAAO,EAAE;AADE,KAAb;AAGD;;AAEDC,EAAAA,iBAAiB,GAAS;AACxB,SAAKC,cAAL;AAEA,QAAM;AAAEC,MAAAA;AAAF,QAAc,KAAKlB,KAAzB;;AACA,QAAIkB,OAAO,KAAK,CAAhB,EAAmB;AACjB,WAAKC,IAAL;AACD;AACF;;AAEDC,EAAAA,kBAAkB,CAACC,SAAD,EAA0BC,SAA1B,EAAyD;AACzE,QAAM;AAAEP,MAAAA,OAAO,EAAEQ;AAAX,QAA0BD,SAAhC;AACA,QAAM;AAAEP,MAAAA;AAAF,QAAc,KAAKD,KAAzB;;AAEA,QAAIC,OAAO,KAAKQ,UAAhB,EAA4B;AAC1B,UAAIR,OAAJ,EAAa;AACXvB,QAAAA,OAAO,CAACM,WAAR;AACD,OAFD,MAEO;AACLN,QAAAA,OAAO,CAACC,YAAR;AACD;AACF;AACF;;AAED+B,EAAAA,oBAAoB,GAAS;AAC3B,SAAKC,aAAL;AACA,SAAKC,mBAAL;AACA,SAAKC,SAAL;AAEA,QAAM;AAAEZ,MAAAA;AAAF,QAAc,KAAKD,KAAzB;;AAEA,QAAIC,OAAJ,EAAa;AACXvB,MAAAA,OAAO,CAACC,YAAR;AACD;AACF;;AAYDwB,EAAAA,cAAc,GAAS;AACrB,QAAI,CAAC,KAAKR,SAAL,CAAemB,OAAhB,IAA2B,CAAC,KAAKnB,SAAL,CAAemB,OAAf,CAAuBC,aAAvD,EAAsE;AACpEvC,MAAAA,GAAG,CAACwC,KAAJ,CAAU,mDAAV;AACA;AACD;;AAED,SAAKlB,MAAL,GAAc,KAAKH,SAAL,CAAemB,OAAf,CAAuBC,aAArC;AACA,SAAKjB,MAAL,CAAYmB,gBAAZ,CAA6B,WAA7B,EAA0C,KAAK9B,eAA/C;AACA,SAAKW,MAAL,CAAYmB,gBAAZ,CAA6B,YAA7B,EAA2C,KAAK5B,gBAAhD;AACA,SAAKS,MAAL,CAAYmB,gBAAZ,CAA6B,WAA7B,EAA0C,KAAKvB,kBAA/C;AACD;;AAEDiB,EAAAA,aAAa,GAAS;AACpB,QAAI,CAAC,KAAKb,MAAV,EAAkB;AAChB;AACD;;AAED,SAAKA,MAAL,CAAYoB,mBAAZ,CAAgC,WAAhC,EAA6C,KAAK/B,eAAlD;AACA,SAAKW,MAAL,CAAYoB,mBAAZ,CAAgC,YAAhC,EAA8C,KAAK7B,gBAAnD;AACA,SAAKS,MAAL,CAAYoB,mBAAZ,CAAgC,WAAhC,EAA6C,KAAKxB,kBAAlD;AACD;;AAEDyB,EAAAA,oBAAoB,GAAS;AAC3BC,IAAAA,MAAM,CAACH,gBAAP,CAAwB,WAAxB,EAAqC,KAAK3B,qBAA1C,EAAiE,IAAjE;AACA8B,IAAAA,MAAM,CAACH,gBAAP,CAAwB,aAAxB,EAAuC,KAAKvB,kBAA5C,EAAgE,IAAhE;AACA0B,IAAAA,MAAM,CAACH,gBAAP,CAAwB,OAAxB,EAAiC,KAAK1B,WAAtC;AACD;;AAEDqB,EAAAA,mBAAmB,GAAS;AAC1BQ,IAAAA,MAAM,CAACF,mBAAP,CAA2B,WAA3B,EAAwC,KAAK5B,qBAA7C,EAAoE,IAApE;AACA8B,IAAAA,MAAM,CAACF,mBAAP,CAA2B,aAA3B,EAA0C,KAAKxB,kBAA/C,EAAmE,IAAnE;AACA0B,IAAAA,MAAM,CAACF,mBAAP,CAA2B,OAA3B,EAAoC,KAAK3B,WAAzC;AACD;;AAEDJ,EAAAA,eAAe,GAAS;AACtB,SAAKkC,UAAL;AACD;;AAED9B,EAAAA,WAAW,GAAS;AAClB,QAAM;AAAEU,MAAAA;AAAF,QAAc,KAAKD,KAAzB;;AACA,QAAI,KAAKH,MAAL,CAAYiB,OAAZ,IAAuB,KAAKhB,MAA5B,IAAsCG,OAA1C,EAAmD;AACjD,UACE,CAAC,KAAKJ,MAAL,CAAYiB,OAAZ,CAAoBQ,OAApB,CAA4BC,OAA5B,CAAoC,QAApC,CAAD,IACA,CAAC,KAAKzB,MAAL,CAAYyB,OAAZ,CAAoB,QAApB,CAFH,EAGE;AACA,aAAKV,SAAL;AACA,aAAKW,IAAL;AACD;AACF;AACF;;AAEDnC,EAAAA,gBAAgB,GAAS;AACvB,QAAM;AAAEY,MAAAA;AAAF,QAAc,KAAKD,KAAzB;AACA,SAAKa,SAAL;AAEA,QAAM;AAAEY,MAAAA;AAAF,QAAkB,KAAKvC,KAA7B;;AACA,QAAI,CAACuC,WAAD,IAAgBxB,OAApB,EAA6B;AAC3B,WAAKuB,IAAL;AACD;AACF;;AAEDhC,EAAAA,aAAa,GAAS;AACpB,SAAKa,IAAL;AACD;;AAEDf,EAAAA,qBAAqB,CAACoC,KAAD,EAA0B;AAC7C,QAAMC,MAAM,GAAGD,KAAK,CAACE,OAArB;AACA,QAAMC,MAAM,GAAGH,KAAK,CAACI,OAArB;AACA,QAAM;AAAE7B,MAAAA;AAAF,QAAc,KAAKD,KAAzB;;AAEA,QAAI,CAAC,KAAKH,MAAL,CAAYiB,OAAb,IAAwB,CAAC,KAAKhB,MAAlC,EAA0C;AACxC;AACD;;AACD,QAAMiC,UAAU,GAAG,KAAKlC,MAAL,CAAYiB,OAAZ,CAAoBQ,OAApB,CAA4BU,qBAA5B,EAAnB;AACA,QAAMC,UAAU,GAAG,KAAKnC,MAAL,CAAYkC,qBAAZ,EAAnB;;AAEA,QACEL,MAAM,IAAII,UAAU,CAACG,IAArB,IACAP,MAAM,IAAII,UAAU,CAACG,IAAX,GAAkBH,UAAU,CAACI,KADvC,IAEAN,MAAM,IAAIE,UAAU,CAACK,GAFrB,IAGAP,MAAM,IAAIE,UAAU,CAACK,GAAX,GAAiBL,UAAU,CAACM,MAJxC,EAKE;AACA,WAAKlD,eAAL;AACD,KAPD,MAOO,IACLwC,MAAM,IAAIM,UAAU,CAACC,IAArB,IACAP,MAAM,IAAIM,UAAU,CAACC,IAAX,GAAkBD,UAAU,CAACE,KADvC,IAEAN,MAAM,IAAII,UAAU,CAACG,GAFrB,IAGAP,MAAM,IAAII,UAAU,CAACG,GAAX,GAAiBH,UAAU,CAACI,MAJjC,EAKL;AACA,WAAKlD,eAAL;AACD,KAPM,MAOA,IAAIc,OAAJ,EAAa;AAClB,WAAKY,SAAL;AACA,WAAKW,IAAL;AACD;AACF;;AAEDH,EAAAA,UAAU,GAAS;AACjB,SAAKR,SAAL;AAEA,QAAM;AAAET,MAAAA,OAAF;AAAWkC,MAAAA;AAAX,QAA6B,KAAKpD,KAAxC;AACA,QAAIqD,YAAY,GAAGnC,OAAnB;;AACA,QACE1B,OAAO,CAACE,iBAAR,GAA4B,CAA5B,IACAE,IAAI,CAACC,GAAL,KAAaL,OAAO,CAACG,cAArB,GAAsCH,OAAO,CAAC8D,sBAFhD,EAGE;AACAD,MAAAA,YAAY,GAAGD,aAAf;AACD;;AACD,SAAKvC,KAAL,GAAaqB,MAAM,CAACqB,UAAP,CAAkB,KAAKjD,aAAvB,EAAsC+C,YAAtC,CAAb;AACD;;AAED1B,EAAAA,SAAS,GAAS;AAChB,QAAI,KAAKd,KAAT,EAAgB;AACd2C,MAAAA,YAAY,CAAC,KAAK3C,KAAN,CAAZ;AACA,WAAKA,KAAL,GAAa,IAAb;AACD;AACF;;AAEDM,EAAAA,IAAI,GAAS;AACX,QAAM;AAAEJ,MAAAA;AAAF,QAAc,KAAKD,KAAzB;AACA,SAAKa,SAAL;;AAEA,QAAI,CAACZ,OAAL,EAAc;AAAA;;AACZ,mCAAKJ,MAAL,CAAYiB,OAAZ,8EAAqBT,IAArB;AACA,WAAKsC,QAAL,CAAc;AAAE1C,QAAAA,OAAO,EAAE;AAAX,OAAd;AAEA,UAAM;AAAEwB,QAAAA;AAAF,UAAkB,KAAKvC,KAA7B;;AACA,UAAIuC,WAAJ,EAAiB;AACf,aAAKN,oBAAL;AACD;AACF;AACF;;AAEDK,EAAAA,IAAI,GAAS;AAAA;;AACX,kCAAK3B,MAAL,CAAYiB,OAAZ,gFAAqBU,IAArB;AACA,SAAKZ,mBAAL;AACD;;AAEDgC,EAAAA,MAAM,GAAS;AAAA;;AACb,kCAAK/C,MAAL,CAAYiB,OAAZ,gFAAqB+B,cAArB;AACD;;AAEDpD,EAAAA,YAAY,GAAS;AACnB,SAAKkD,QAAL,CAAc;AAAE1C,MAAAA,OAAO,EAAE;AAAX,KAAd;AACD;;AAEDP,EAAAA,kBAAkB,GAAS;AACzB,QAAM;AAAEO,MAAAA;AAAF,QAAc,KAAKD,KAAzB;AACA,SAAKa,SAAL;;AACA,QAAIZ,OAAJ,EAAa;AACX,WAAKuB,IAAL;AACD;AACF;;AAEDsB,EAAAA,MAAM,GAAgB;AACpB,QAAM;AAAErB,MAAAA,WAAF;AAAesB,MAAAA,QAAf;AAAyBC,MAAAA,OAAzB;AAAkCC,MAAAA;AAAlC,QAAsD,KAAK/D,KAAjE;AACA,QAAM;AAAEe,MAAAA;AAAF,QAAc,KAAKD,KAAzB;AACA,wBACE;AAAK,MAAA,GAAG,EAAE,KAAKL,SAAf;AAA0B,MAAA,KAAK,EAAE;AAAEuD,QAAAA,OAAO,EAAE;AAAX;AAAjC,oBACE,oBAAC,MAAD;AACE,MAAA,SAAS,EAAE7E,UAAU,CAAC4E,eAAD,CADvB;AAEE,MAAA,OAAO,EAAED,OAFX;AAGE,MAAA,GAAG,EAAE,KAAKnD,MAHZ;AAIE,MAAA,QAAQ,EAAE,KAAKJ,YAJjB;AAKE,MAAA,WAAW,EAAEgC;AALf,oBAOE;AAAK,MAAA,SAAS,EAAC;AAAf,YAAmCxB,OAAO,IAAI8C,QAA9C,CAPF,CADF,CADF;AAaD;;AAzQyD;;gBAAtDrE,O,oBACoB,G;;gBADpBA,O,0BAG0B,G;;gBAH1BA,O,4BAK4B,G;;gBAL5BA,O,uBAOuB,C;;gBAPvBA,O,oBASoBI,IAAI,CAACC,GAAL,E;;gBATpBL,O,kBAWkB;AACpB+C,EAAAA,WAAW,EAAE,KADO;AAEpBuB,EAAAA,OAAO,EAAE,EAFW;AAGpBC,EAAAA,eAAe,EAAE,EAHG;AAIpBX,EAAAA,aAAa,EAAE5D,OAAO,CAACyE,oBAJH;AAKpB/C,EAAAA,OAAO,EAAE1B,OAAO,CAAC0E;AALG,C;;AAiQxB,eAAe1E,OAAf","sourcesContent":["import React, { Component } from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport Popper, { PopperOptions } from './Popper';\n\nconst log = Log.module('Tooltip');\n\ninterface TooltipProps {\n interactive: boolean;\n options: PopperOptions;\n timeout: number;\n reshowTimeout: number;\n children: React.ReactNode;\n popperClassName: string;\n}\n\ninterface TooltipState {\n isShown: boolean;\n}\n\n/**\n * Component that can be added to an element to automatically display a tooltip.\n * Content is mounted lazily, so don't worry about complex tooltips!\n *\n * Usage:\n * <div className=\"parent-container\">\n * Hover this container to see a tooltip\n * <Tooltip>\n * <div>My tooltip content goes here!</div>\n * </Tooltip>\n * </div>\n */\nclass Tooltip extends Component<TooltipProps, TooltipState> {\n static defaultTimeout = 500;\n\n static defaultReshowTimeout = 100;\n\n static triggerReshowThreshold = 300;\n\n static shownTooltipCount = 0;\n\n static lastHiddenTime = Date.now();\n\n static defaultProps = {\n interactive: false,\n options: {},\n popperClassName: '',\n reshowTimeout: Tooltip.defaultReshowTimeout,\n timeout: Tooltip.defaultTimeout,\n };\n\n static handleHidden(): void {\n Tooltip.shownTooltipCount -= 1;\n\n if (Tooltip.shownTooltipCount === 0) {\n Tooltip.lastHiddenTime = Date.now();\n }\n }\n\n static handleShown(): void {\n Tooltip.shownTooltipCount += 1;\n }\n\n constructor(props: TooltipProps) {\n super(props);\n\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleWindowMouseMove = this.handleWindowMouseMove.bind(this);\n this.handleWheel = this.handleWheel.bind(this);\n this.handleTimeout = this.handleTimeout.bind(this);\n this.handleExited = this.handleExited.bind(this);\n this.stopShowingTooltip = this.stopShowingTooltip.bind(this);\n\n this.container = React.createRef();\n this.popper = React.createRef();\n this.parent = null;\n this.timer = null;\n\n this.state = {\n isShown: false,\n };\n }\n\n componentDidMount(): void {\n this.startListening();\n\n const { timeout } = this.props;\n if (timeout === 0) {\n this.show();\n }\n }\n\n componentDidUpdate(prevProps: TooltipProps, prevState: TooltipState): void {\n const { isShown: oldIsShown } = prevState;\n const { isShown } = this.state;\n\n if (isShown !== oldIsShown) {\n if (isShown) {\n Tooltip.handleShown();\n } else {\n Tooltip.handleHidden();\n }\n }\n }\n\n componentWillUnmount(): void {\n this.stopListening();\n this.stopListeningWindow();\n this.stopTimer();\n\n const { isShown } = this.state;\n\n if (isShown) {\n Tooltip.handleHidden();\n }\n }\n\n container: React.RefObject<HTMLDivElement>;\n\n popper: React.RefObject<Popper>;\n\n parent: HTMLElement | null;\n\n // This is platform dependent of Node/DOM\n // Jest requires Node types\n timer: number | null;\n\n startListening(): void {\n if (!this.container.current || !this.container.current.parentElement) {\n log.error(\"Tooltip doesn't have a container or a parent set!\");\n return;\n }\n\n this.parent = this.container.current.parentElement;\n this.parent.addEventListener('mousemove', this.handleMouseMove);\n this.parent.addEventListener('mouseleave', this.handleMouseLeave);\n this.parent.addEventListener('mousedown', this.stopShowingTooltip);\n }\n\n stopListening(): void {\n if (!this.parent) {\n return;\n }\n\n this.parent.removeEventListener('mousemove', this.handleMouseMove);\n this.parent.removeEventListener('mouseleave', this.handleMouseLeave);\n this.parent.removeEventListener('mousedown', this.stopShowingTooltip);\n }\n\n startListeningWindow(): void {\n window.addEventListener('mousemove', this.handleWindowMouseMove, true);\n window.addEventListener('contextmenu', this.stopShowingTooltip, true);\n window.addEventListener('wheel', this.handleWheel);\n }\n\n stopListeningWindow(): void {\n window.removeEventListener('mousemove', this.handleWindowMouseMove, true);\n window.removeEventListener('contextmenu', this.stopShowingTooltip, true);\n window.removeEventListener('wheel', this.handleWheel);\n }\n\n handleMouseMove(): void {\n this.startTimer();\n }\n\n handleWheel(): void {\n const { isShown } = this.state;\n if (this.popper.current && this.parent && isShown) {\n if (\n !this.popper.current.element.matches(':hover') &&\n !this.parent.matches(':hover')\n ) {\n this.stopTimer();\n this.hide();\n }\n }\n }\n\n handleMouseLeave(): void {\n const { isShown } = this.state;\n this.stopTimer();\n\n const { interactive } = this.props;\n if (!interactive && isShown) {\n this.hide();\n }\n }\n\n handleTimeout(): void {\n this.show();\n }\n\n handleWindowMouseMove(event: MouseEvent): void {\n const mouseX = event.clientX;\n const mouseY = event.clientY;\n const { isShown } = this.state;\n\n if (!this.popper.current || !this.parent) {\n return;\n }\n const popperRect = this.popper.current.element.getBoundingClientRect();\n const parentRect = this.parent.getBoundingClientRect();\n\n if (\n mouseX >= popperRect.left &&\n mouseX <= popperRect.left + popperRect.width &&\n mouseY >= popperRect.top &&\n mouseY <= popperRect.top + popperRect.height\n ) {\n this.handleMouseMove();\n } else if (\n mouseX >= parentRect.left &&\n mouseX <= parentRect.left + parentRect.width &&\n mouseY >= parentRect.top &&\n mouseY <= parentRect.top + parentRect.height\n ) {\n this.handleMouseMove();\n } else if (isShown) {\n this.stopTimer();\n this.hide();\n }\n }\n\n startTimer(): void {\n this.stopTimer();\n\n const { timeout, reshowTimeout } = this.props;\n let timerTimeout = timeout;\n if (\n Tooltip.shownTooltipCount > 0 ||\n Date.now() - Tooltip.lastHiddenTime < Tooltip.triggerReshowThreshold\n ) {\n timerTimeout = reshowTimeout;\n }\n this.timer = window.setTimeout(this.handleTimeout, timerTimeout);\n }\n\n stopTimer(): void {\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n\n show(): void {\n const { isShown } = this.state;\n this.stopTimer();\n\n if (!isShown) {\n this.popper.current?.show();\n this.setState({ isShown: true });\n\n const { interactive } = this.props;\n if (interactive) {\n this.startListeningWindow();\n }\n }\n }\n\n hide(): void {\n this.popper.current?.hide();\n this.stopListeningWindow();\n }\n\n update(): void {\n this.popper.current?.scheduleUpdate();\n }\n\n handleExited(): void {\n this.setState({ isShown: false });\n }\n\n stopShowingTooltip(): void {\n const { isShown } = this.state;\n this.stopTimer();\n if (isShown) {\n this.hide();\n }\n }\n\n render(): JSX.Element {\n const { interactive, children, options, popperClassName } = this.props;\n const { isShown } = this.state;\n return (\n <div ref={this.container} style={{ display: 'none' }}>\n <Popper\n className={classNames(popperClassName)}\n options={options}\n ref={this.popper}\n onExited={this.handleExited}\n interactive={interactive}\n >\n <div className=\"tooltip-content\"> {isShown && children}</div>\n </Popper>\n </div>\n );\n }\n}\n\nexport default Tooltip;\n"],"file":"Tooltip.js"}
|
package/dist/popper/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { default as Popper } from
|
|
2
|
-
export { default as Tooltip } from
|
|
1
|
+
export { default as Popper } from "./Popper.js";
|
|
2
|
+
export { default as Tooltip } from "./Tooltip.js";
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
package/dist/popper/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/popper/index.ts"],"names":["default","Popper","Tooltip"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/popper/index.ts"],"names":["default","Popper","Tooltip"],"mappings":"SAASA,OAAO,IAAIC,M;SACXD,OAAO,IAAIE,O","sourcesContent":["export { default as Popper } from './Popper';\nexport { default as Tooltip } from './Tooltip';\n"],"file":"index.js"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import ShortcutRegistry from
|
|
2
|
-
import { MODIFIER, KEY } from
|
|
1
|
+
import ShortcutRegistry from "./ShortcutRegistry.js";
|
|
2
|
+
import { MODIFIER, KEY } from "./Shortcut.js";
|
|
3
3
|
var GLOBAL_SHORTCUTS = {
|
|
4
4
|
COPY: ShortcutRegistry.createAndAdd({
|
|
5
5
|
id: 'GLOBAL.COPY',
|