@deephaven/components 0.5.2-beta.0 → 0.6.1-demo.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/dist/AutoCompleteInput.js +410 -448
  2. package/dist/AutoCompleteInput.js.map +1 -1
  3. package/dist/AutoResizeTextarea.js +17 -46
  4. package/dist/AutoResizeTextarea.js.map +1 -1
  5. package/dist/BasicModal.js +18 -19
  6. package/dist/BasicModal.js.map +1 -1
  7. package/dist/Button.js +30 -21
  8. package/dist/Button.js.map +1 -1
  9. package/dist/ButtonGroup.js +6 -4
  10. package/dist/ButtonGroup.js.map +1 -1
  11. package/dist/ButtonOld.js +10 -8
  12. package/dist/ButtonOld.js.map +1 -1
  13. package/dist/CardFlip.js +10 -8
  14. package/dist/CardFlip.js.map +1 -1
  15. package/dist/Checkbox.js +18 -31
  16. package/dist/Checkbox.js.map +1 -1
  17. package/dist/Collapse.js +65 -105
  18. package/dist/Collapse.js.map +1 -1
  19. package/dist/ComboBox.js +432 -460
  20. package/dist/ComboBox.js.map +1 -1
  21. package/dist/CustomTimeSelect.js +485 -517
  22. package/dist/CustomTimeSelect.js.map +1 -1
  23. package/dist/DebouncedSearchInput.js +61 -91
  24. package/dist/DebouncedSearchInput.js.map +1 -1
  25. package/dist/DeephavenSpinner.js +6 -6
  26. package/dist/DeephavenSpinner.js.map +1 -1
  27. package/dist/DragUtils.js +65 -113
  28. package/dist/DragUtils.js.map +1 -1
  29. package/dist/DraggableItemList.d.ts +1 -0
  30. package/dist/DraggableItemList.d.ts.map +1 -1
  31. package/dist/DraggableItemList.js +219 -257
  32. package/dist/DraggableItemList.js.map +1 -1
  33. package/dist/HierarchicalCheckboxMenu.js +160 -227
  34. package/dist/HierarchicalCheckboxMenu.js.map +1 -1
  35. package/dist/ItemList.d.ts +4 -2
  36. package/dist/ItemList.d.ts.map +1 -1
  37. package/dist/ItemList.js +595 -598
  38. package/dist/ItemList.js.map +1 -1
  39. package/dist/ItemListItem.js +194 -215
  40. package/dist/ItemListItem.js.map +1 -1
  41. package/dist/LoadingOverlay.js +9 -10
  42. package/dist/LoadingOverlay.js.map +1 -1
  43. package/dist/LoadingSpinner.js +4 -3
  44. package/dist/LoadingSpinner.js.map +1 -1
  45. package/dist/MaskedInput.js +59 -70
  46. package/dist/MaskedInput.js.map +1 -1
  47. package/dist/Option.js +5 -3
  48. package/dist/Option.js.map +1 -1
  49. package/dist/RadioGroup.js +16 -34
  50. package/dist/RadioGroup.js.map +1 -1
  51. package/dist/RadioItem.js +14 -33
  52. package/dist/RadioItem.js.map +1 -1
  53. package/dist/SearchInput.js +42 -75
  54. package/dist/SearchInput.js.map +1 -1
  55. package/dist/Select.js +10 -8
  56. package/dist/Select.js.map +1 -1
  57. package/dist/SelectValueList.js +97 -134
  58. package/dist/SelectValueList.js.map +1 -1
  59. package/dist/SocketedButton.js +13 -11
  60. package/dist/SocketedButton.js.map +1 -1
  61. package/dist/ThemeExport.js.map +1 -1
  62. package/dist/TimeInput.js +16 -53
  63. package/dist/TimeInput.js.map +1 -1
  64. package/dist/TimeSlider.js +62 -88
  65. package/dist/TimeSlider.js.map +1 -1
  66. package/dist/ToastNotification.js +14 -13
  67. package/dist/ToastNotification.js.map +1 -1
  68. package/dist/UISwitch.js +9 -8
  69. package/dist/UISwitch.js.map +1 -1
  70. package/dist/context-actions/ContextActionUtils.js +173 -231
  71. package/dist/context-actions/ContextActionUtils.js.map +1 -1
  72. package/dist/context-actions/ContextActions.js +135 -177
  73. package/dist/context-actions/ContextActions.js.map +1 -1
  74. package/dist/context-actions/ContextMenu.js +509 -543
  75. package/dist/context-actions/ContextMenu.js.map +1 -1
  76. package/dist/context-actions/ContextMenuItem.js +32 -22
  77. package/dist/context-actions/ContextMenuItem.js.map +1 -1
  78. package/dist/context-actions/ContextMenuRoot.js +112 -152
  79. package/dist/context-actions/ContextMenuRoot.js.map +1 -1
  80. package/dist/context-actions/GlobalContextAction.js +49 -84
  81. package/dist/context-actions/GlobalContextAction.js.map +1 -1
  82. package/dist/context-actions/GlobalContextActions.js +25 -57
  83. package/dist/context-actions/GlobalContextActions.js.map +1 -1
  84. package/dist/context-actions/index.js +4 -4
  85. package/dist/context-actions/index.js.map +1 -1
  86. package/dist/index.js +39 -39
  87. package/dist/index.js.map +1 -1
  88. package/dist/menu-actions/DropdownMenu.js +126 -159
  89. package/dist/menu-actions/DropdownMenu.js.map +1 -1
  90. package/dist/menu-actions/Menu.js +215 -245
  91. package/dist/menu-actions/Menu.js.map +1 -1
  92. package/dist/menu-actions/index.js +1 -1
  93. package/dist/menu-actions/index.js.map +1 -1
  94. package/dist/navigation/Menu.js +14 -18
  95. package/dist/navigation/Menu.js.map +1 -1
  96. package/dist/navigation/MenuItem.js +15 -14
  97. package/dist/navigation/MenuItem.js.map +1 -1
  98. package/dist/navigation/Page.js +7 -5
  99. package/dist/navigation/Page.js.map +1 -1
  100. package/dist/navigation/Stack.js +14 -39
  101. package/dist/navigation/Stack.js.map +1 -1
  102. package/dist/navigation/index.js +4 -4
  103. package/dist/navigation/index.js.map +1 -1
  104. package/dist/popper/Popper.js +209 -235
  105. package/dist/popper/Popper.js.map +1 -1
  106. package/dist/popper/Tooltip.js +227 -257
  107. package/dist/popper/Tooltip.js.map +1 -1
  108. package/dist/popper/index.js +2 -2
  109. package/dist/popper/index.js.map +1 -1
  110. package/dist/shortcuts/GlobalShortcuts.js +2 -2
  111. package/dist/shortcuts/GlobalShortcuts.js.map +1 -1
  112. package/dist/shortcuts/Shortcut.js +263 -291
  113. package/dist/shortcuts/Shortcut.js.map +1 -1
  114. package/dist/shortcuts/ShortcutRegistry.js +48 -71
  115. package/dist/shortcuts/ShortcutRegistry.js.map +1 -1
  116. package/dist/shortcuts/index.js +4 -4
  117. package/dist/shortcuts/index.js.map +1 -1
  118. package/dist/tsconfig.tsbuildinfo +1 -1
  119. package/package.json +30 -54
@@ -1,29 +1,7 @@
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
1
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
4
2
 
5
3
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
6
4
 
7
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
8
-
9
- 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); } }
10
-
11
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
12
-
13
- 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); }
14
-
15
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
16
-
17
- 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); }; }
18
-
19
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
20
-
21
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
22
-
23
- 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; } }
24
-
25
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
26
-
27
5
  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; }
28
6
 
29
7
  /**
@@ -48,259 +26,252 @@ import classNames from 'classnames';
48
26
  import { CSSTransition } from 'react-transition-group';
49
27
  import PopperJs from 'popper.js';
50
28
  import PropTypes from 'prop-types';
51
- import ThemeExport from '../ThemeExport';
29
+ import ThemeExport from "../ThemeExport.js";
52
30
  import "./Popper.css";
53
31
 
54
- var Popper = /*#__PURE__*/function (_Component) {
55
- _inherits(Popper, _Component);
56
-
57
- var _super = _createSuper(Popper);
58
-
59
- function Popper(props) {
60
- var _this;
61
-
62
- _classCallCheck(this, Popper);
32
+ class Popper extends Component {
33
+ constructor(props) {
34
+ super(props);
63
35
 
64
- _this = _super.call(this, props);
36
+ _defineProperty(this, "element", void 0);
65
37
 
66
- _defineProperty(_assertThisInitialized(_this), "element", void 0);
38
+ _defineProperty(this, "container", void 0);
67
39
 
68
- _defineProperty(_assertThisInitialized(_this), "container", void 0);
40
+ _defineProperty(this, "isExiting", void 0);
69
41
 
70
- _defineProperty(_assertThisInitialized(_this), "isExiting", void 0);
42
+ _defineProperty(this, "rAF", void 0);
71
43
 
72
- _defineProperty(_assertThisInitialized(_this), "rAF", void 0);
73
-
74
- _this.handleEnter = _this.handleEnter.bind(_assertThisInitialized(_this));
75
- _this.handleExit = _this.handleExit.bind(_assertThisInitialized(_this));
76
- _this.handleBlur = _this.handleBlur.bind(_assertThisInitialized(_this));
77
- _this.element = document.createElement('div');
78
- _this.element.className = 'popper-container';
79
- _this.container = /*#__PURE__*/React.createRef();
80
- _this.isExiting = false; // cancelAnimationFrame does nothing if the handle isn't recognized
44
+ this.handleEnter = this.handleEnter.bind(this);
45
+ this.handleExit = this.handleExit.bind(this);
46
+ this.handleBlur = this.handleBlur.bind(this);
47
+ this.element = document.createElement('div');
48
+ this.element.className = 'popper-container';
49
+ this.container = /*#__PURE__*/React.createRef();
50
+ this.isExiting = false; // cancelAnimationFrame does nothing if the handle isn't recognized
81
51
  // requestAnimationFrame provides a non-zero number, so 0 as a default should be safe
82
52
 
83
- _this.rAF = 0;
84
- var isShown = _this.props.isShown;
85
- _this.state = {
53
+ this.rAF = 0;
54
+ var {
55
+ isShown
56
+ } = this.props;
57
+ this.state = {
86
58
  show: isShown,
87
59
  popper: null
88
60
  };
89
- return _this;
90
61
  }
91
62
 
92
- _createClass(Popper, [{
93
- key: "componentDidUpdate",
94
- value: function componentDidUpdate(prevProps) {
95
- var _this2 = this;
96
-
97
- var isShown = this.props.isShown;
98
-
99
- if (prevProps.isShown !== isShown) {
100
- if (isShown) {
101
- cancelAnimationFrame(this.rAF);
102
- this.rAF = window.requestAnimationFrame(function () {
103
- _this2.show();
104
- });
105
- } else {
106
- this.hide();
107
- }
63
+ componentDidUpdate(prevProps) {
64
+ var {
65
+ isShown
66
+ } = this.props;
67
+
68
+ if (prevProps.isShown !== isShown) {
69
+ if (isShown) {
70
+ cancelAnimationFrame(this.rAF);
71
+ this.rAF = window.requestAnimationFrame(() => {
72
+ this.show();
73
+ });
74
+ } else {
75
+ this.hide();
108
76
  }
109
77
  }
110
- }, {
111
- key: "componentWillUnmount",
112
- value: function componentWillUnmount() {
113
- this.destroyPopper(false);
114
- this.isExiting = false;
115
- }
116
- }, {
117
- key: "getVisibleElement",
118
- value:
119
- /** Goes through an element and it's parents until the first visible element is found */
120
- function getVisibleElement(element) {
121
- if (element == null || element.clientHeight > 0 || element.clientWidth > 0) {
122
- return element;
123
- }
78
+ }
124
79
 
125
- return this.getVisibleElement(element.parentElement);
80
+ componentWillUnmount() {
81
+ this.destroyPopper(false);
82
+ this.isExiting = false;
83
+ }
84
+
85
+ /** Goes through an element and it's parents until the first visible element is found */
86
+ getVisibleElement(element) {
87
+ if (element == null || element.clientHeight > 0 || element.clientWidth > 0) {
88
+ return element;
126
89
  }
127
- }, {
128
- key: "initPopper",
129
- value: function initPopper() {
130
- var _this3 = this;
131
90
 
132
- var popper = this.state.popper;
133
- var closeOnBlur = this.props.closeOnBlur;
91
+ return this.getVisibleElement(element.parentElement);
92
+ }
134
93
 
135
- if (popper) {
136
- return;
137
- }
94
+ initPopper() {
95
+ var {
96
+ popper
97
+ } = this.state;
98
+ var {
99
+ closeOnBlur
100
+ } = this.props;
138
101
 
139
- if (this.container.current === null) {
140
- return;
141
- }
102
+ if (popper) {
103
+ return;
104
+ }
142
105
 
143
- var options = this.props.options;
144
- options = _objectSpread({
145
- placement: 'auto'
146
- }, options);
147
- document.body.appendChild(this.element);
148
- var parent = this.getVisibleElement(this.container.current);
106
+ if (this.container.current === null) {
107
+ return;
108
+ }
149
109
 
150
- if (parent == null) {
151
- parent = this.container.current;
152
- }
110
+ var {
111
+ options
112
+ } = this.props;
113
+ options = _objectSpread({
114
+ placement: 'auto'
115
+ }, options);
116
+ document.body.appendChild(this.element);
117
+ var parent = this.getVisibleElement(this.container.current);
118
+
119
+ if (parent == null) {
120
+ parent = this.container.current;
121
+ }
153
122
 
154
- popper = new PopperJs(parent, this.element, options);
155
- popper.scheduleUpdate(); // delayed due to scheduleUpdate
123
+ popper = new PopperJs(parent, this.element, options);
124
+ popper.scheduleUpdate(); // delayed due to scheduleUpdate
156
125
 
157
- cancelAnimationFrame(this.rAF);
158
- this.rAF = window.requestAnimationFrame(function () {
159
- // for blur on close to work, focus needs to be on or within the popper
160
- if (closeOnBlur && !_this3.element.contains(document.activeElement)) {
161
- // only set focus, if a focus isn't already set within
162
- var elem = _this3.element.firstElementChild;
126
+ cancelAnimationFrame(this.rAF);
127
+ this.rAF = window.requestAnimationFrame(() => {
128
+ // for blur on close to work, focus needs to be on or within the popper
129
+ if (closeOnBlur && !this.element.contains(document.activeElement)) {
130
+ // only set focus, if a focus isn't already set within
131
+ var elem = this.element.firstElementChild;
163
132
 
164
- if (elem instanceof HTMLElement) {
165
- elem.focus(); // first child of the portal element
166
- }
133
+ if (elem instanceof HTMLElement) {
134
+ elem.focus(); // first child of the portal element
167
135
  }
168
- });
169
- this.setState({
170
- popper: popper
171
- });
172
- }
173
- }, {
174
- key: "destroyPopper",
175
- value: function destroyPopper() {
176
- var updateState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
177
- this.isExiting = false;
178
- cancelAnimationFrame(this.rAF);
179
- var popper = this.state.popper;
180
-
181
- if (!popper) {
182
- return;
183
136
  }
137
+ });
138
+ this.setState({
139
+ popper
140
+ });
141
+ }
184
142
 
185
- popper.destroy();
186
- document.body.removeChild(this.element);
143
+ destroyPopper() {
144
+ var updateState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
145
+ this.isExiting = false;
146
+ cancelAnimationFrame(this.rAF);
147
+ var {
148
+ popper
149
+ } = this.state;
187
150
 
188
- if (updateState) {
189
- this.setState({
190
- popper: null
191
- });
192
- }
193
- }
194
- }, {
195
- key: "show",
196
- value: function show() {
197
- this.initPopper();
198
- this.setState({
199
- show: true
200
- });
151
+ if (!popper) {
152
+ return;
201
153
  }
202
- }, {
203
- key: "hide",
204
- value: function hide() {
154
+
155
+ popper.destroy();
156
+ document.body.removeChild(this.element);
157
+
158
+ if (updateState) {
205
159
  this.setState({
206
- show: false
160
+ popper: null
207
161
  });
208
162
  }
209
- }, {
210
- key: "scheduleUpdate",
211
- value: function scheduleUpdate() {
212
- var popper = this.state.popper;
213
- if (popper) popper.scheduleUpdate();
214
- }
215
- }, {
216
- key: "handleBlur",
217
- value: function handleBlur(e) {
218
- if (!(e.relatedTarget instanceof HTMLElement)) {
219
- return;
220
- }
163
+ }
221
164
 
222
- if (!this.element.contains(e.relatedTarget)) {
223
- this.hide();
224
- }
225
- }
226
- }, {
227
- key: "handleEnter",
228
- value: function handleEnter() {
229
- var onEntered = this.props.onEntered;
230
- onEntered(); // trigger any parent component waiting for enter handler
231
- }
232
- }, {
233
- key: "handleExit",
234
- value: function handleExit() {
235
- var onExited = this.props.onExited;
236
- onExited(); // trigger any parent component waiting for exited handler
165
+ show() {
166
+ this.initPopper();
167
+ this.setState({
168
+ show: true
169
+ });
170
+ }
237
171
 
238
- var show = this.state.show;
172
+ hide() {
173
+ this.setState({
174
+ show: false
175
+ });
176
+ }
239
177
 
240
- if (!show) {
241
- this.destroyPopper();
242
- }
178
+ scheduleUpdate() {
179
+ var {
180
+ popper
181
+ } = this.state;
182
+ if (popper) popper.scheduleUpdate();
183
+ }
243
184
 
244
- this.isExiting = false;
185
+ handleBlur(e) {
186
+ if (!(e.relatedTarget instanceof HTMLElement)) {
187
+ return;
245
188
  }
246
- }, {
247
- key: "renderContent",
248
- value: function renderContent() {
249
- var _this4 = this;
250
-
251
- var _this$props = this.props,
252
- className = _this$props.className,
253
- children = _this$props.children,
254
- timeout = _this$props.timeout,
255
- interactive = _this$props.interactive,
256
- closeOnBlur = _this$props.closeOnBlur;
257
- var show = this.state.show;
258
- return /*#__PURE__*/React.createElement(CSSTransition, {
259
- "in": show,
260
- timeout: timeout,
261
- classNames: "popper-transition",
262
- onEntered: this.handleEnter,
263
- onExit: function onExit() {
264
- _this4.isExiting = true;
265
- },
266
- onExited: this.handleExit
267
- }, /*#__PURE__*/React.createElement("div", {
268
- onClick: function onClick(e) {
269
- // stop click events from escaping popper
270
- e.stopPropagation();
271
- },
272
- onKeyDown: function onKeyDown(e) {
273
- if (e.key === 'Escape') _this4.hide();
274
- },
275
- className: classNames('popper', {
276
- interactive: interactive
277
- }, className),
278
- onBlur: closeOnBlur ? this.handleBlur : undefined,
279
- tabIndex: closeOnBlur ? -1 : undefined,
280
- role: "presentation"
281
- }, /*#__PURE__*/React.createElement("div", {
282
- className: "popper-content"
283
- }, children, /*#__PURE__*/React.createElement("div", {
284
- className: "popper-arrow",
285
- "x-arrow": ""
286
- }))));
189
+
190
+ if (!this.element.contains(e.relatedTarget)) {
191
+ this.hide();
287
192
  }
288
- }, {
289
- key: "render",
290
- value: function render() {
291
- var popper = this.state.popper;
292
- return /*#__PURE__*/React.createElement("div", {
293
- className: "popper-parent-container",
294
- ref: this.container,
295
- style: {
296
- display: 'none'
297
- }
298
- }, popper && /*#__PURE__*/ReactDOM.createPortal(this.renderContent(), this.element));
193
+ }
194
+
195
+ handleEnter() {
196
+ var {
197
+ onEntered
198
+ } = this.props;
199
+ onEntered(); // trigger any parent component waiting for enter handler
200
+ }
201
+
202
+ handleExit() {
203
+ var {
204
+ onExited
205
+ } = this.props;
206
+ onExited(); // trigger any parent component waiting for exited handler
207
+
208
+ var {
209
+ show
210
+ } = this.state;
211
+
212
+ if (!show) {
213
+ this.destroyPopper();
299
214
  }
300
- }]);
301
215
 
302
- return Popper;
303
- }(Component);
216
+ this.isExiting = false;
217
+ }
218
+
219
+ renderContent() {
220
+ var {
221
+ className,
222
+ children,
223
+ timeout,
224
+ interactive,
225
+ closeOnBlur
226
+ } = this.props;
227
+ var {
228
+ show
229
+ } = this.state;
230
+ return /*#__PURE__*/React.createElement(CSSTransition, {
231
+ in: show,
232
+ timeout: timeout,
233
+ classNames: "popper-transition",
234
+ onEntered: this.handleEnter,
235
+ onExit: () => {
236
+ this.isExiting = true;
237
+ },
238
+ onExited: this.handleExit
239
+ }, /*#__PURE__*/React.createElement("div", {
240
+ onClick: e => {
241
+ // stop click events from escaping popper
242
+ e.stopPropagation();
243
+ },
244
+ onKeyDown: e => {
245
+ if (e.key === 'Escape') this.hide();
246
+ },
247
+ className: classNames('popper', {
248
+ interactive
249
+ }, className),
250
+ onBlur: closeOnBlur ? this.handleBlur : undefined,
251
+ tabIndex: closeOnBlur ? -1 : undefined,
252
+ role: "presentation"
253
+ }, /*#__PURE__*/React.createElement("div", {
254
+ className: "popper-content"
255
+ }, children, /*#__PURE__*/React.createElement("div", {
256
+ className: "popper-arrow",
257
+ "x-arrow": ""
258
+ }))));
259
+ }
260
+
261
+ render() {
262
+ var {
263
+ popper
264
+ } = this.state;
265
+ return /*#__PURE__*/React.createElement("div", {
266
+ className: "popper-parent-container",
267
+ ref: this.container,
268
+ style: {
269
+ display: 'none'
270
+ }
271
+ }, popper && /*#__PURE__*/ReactDOM.createPortal(this.renderContent(), this.element));
272
+ }
273
+
274
+ }
304
275
 
305
276
  _defineProperty(Popper, "propTypes", {
306
277
  children: PropTypes.node.isRequired,
@@ -318,10 +289,13 @@ _defineProperty(Popper, "defaultProps", {
318
289
  options: {},
319
290
  className: '',
320
291
  timeout: ThemeExport.transitionMs,
321
- onEntered: function onEntered() {// no-op
292
+
293
+ onEntered() {// no-op
322
294
  },
323
- onExited: function onExited() {// no-op
295
+
296
+ onExited() {// no-op
324
297
  },
298
+
325
299
  isShown: false,
326
300
  interactive: false,
327
301
  closeOnBlur: false
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/popper/Popper.tsx"],"names":["React","Component","ReactDOM","classNames","CSSTransition","PopperJs","PropTypes","ThemeExport","Popper","props","handleEnter","bind","handleExit","handleBlur","element","document","createElement","className","container","createRef","isExiting","rAF","isShown","state","show","popper","prevProps","cancelAnimationFrame","window","requestAnimationFrame","hide","destroyPopper","clientHeight","clientWidth","getVisibleElement","parentElement","closeOnBlur","current","options","placement","body","appendChild","parent","scheduleUpdate","contains","activeElement","elem","firstElementChild","HTMLElement","focus","setState","updateState","destroy","removeChild","initPopper","e","relatedTarget","onEntered","onExited","children","timeout","interactive","stopPropagation","key","undefined","display","createPortal","renderContent","node","isRequired","shape","string","number","func","bool","transitionMs"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,OAAOA,KAAP,IAAgBC,SAAhB,QAAiC,OAAjC;AACA,OAAOC,QAAP,MAAqB,WAArB;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,SAASC,aAAT,QAA8B,wBAA9B;AACA,OAAOC,QAAP,MAAwC,WAAxC;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,OAAOC,WAAP,MAAwB,gBAAxB;AACA;;IAkBMC,M;;;;;AA4BJ,kBAAYC,KAAZ,EAAgC;AAAA;;AAAA;;AAC9B,8BAAMA,KAAN;;AAD8B;;AAAA;;AAAA;;AAAA;;AAG9B,UAAKC,WAAL,GAAmB,MAAKA,WAAL,CAAiBC,IAAjB,+BAAnB;AACA,UAAKC,UAAL,GAAkB,MAAKA,UAAL,CAAgBD,IAAhB,+BAAlB;AACA,UAAKE,UAAL,GAAkB,MAAKA,UAAL,CAAgBF,IAAhB,+BAAlB;AACA,UAAKG,OAAL,GAAeC,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAAf;AACA,UAAKF,OAAL,CAAaG,SAAb,GAAyB,kBAAzB;AACA,UAAKC,SAAL,gBAAiBlB,KAAK,CAACmB,SAAN,EAAjB;AAEA,UAAKC,SAAL,GAAiB,KAAjB,CAV8B,CAY9B;AACA;;AACA,UAAKC,GAAL,GAAW,CAAX;AAEA,QAAQC,OAAR,GAAoB,MAAKb,KAAzB,CAAQa,OAAR;AAEA,UAAKC,KAAL,GAAa;AACXC,MAAAA,IAAI,EAAEF,OADK;AAEXG,MAAAA,MAAM,EAAE;AAFG,KAAb;AAlB8B;AAsB/B;;;;WAED,4BAAmBC,SAAnB,EAAiD;AAAA;;AAC/C,UAAQJ,OAAR,GAAoB,KAAKb,KAAzB,CAAQa,OAAR;;AAEA,UAAII,SAAS,CAACJ,OAAV,KAAsBA,OAA1B,EAAmC;AACjC,YAAIA,OAAJ,EAAa;AACXK,UAAAA,oBAAoB,CAAC,KAAKN,GAAN,CAApB;AACA,eAAKA,GAAL,GAAWO,MAAM,CAACC,qBAAP,CAA6B,YAAM;AAC5C,YAAA,MAAI,CAACL,IAAL;AACD,WAFU,CAAX;AAGD,SALD,MAKO;AACL,eAAKM,IAAL;AACD;AACF;AACF;;;WAED,gCAA6B;AAC3B,WAAKC,aAAL,CAAmB,KAAnB;AACA,WAAKX,SAAL,GAAiB,KAAjB;AACD;;;;AAWD;AACA,+BAAkBN,OAAlB,EAAmE;AACjE,UACEA,OAAO,IAAI,IAAX,IACAA,OAAO,CAACkB,YAAR,GAAuB,CADvB,IAEAlB,OAAO,CAACmB,WAAR,GAAsB,CAHxB,EAIE;AACA,eAAOnB,OAAP;AACD;;AAED,aAAO,KAAKoB,iBAAL,CAAuBpB,OAAO,CAACqB,aAA/B,CAAP;AACD;;;WAED,sBAAmB;AAAA;;AACjB,UAAMV,MAAN,GAAiB,KAAKF,KAAtB,CAAME,MAAN;AACA,UAAQW,WAAR,GAAwB,KAAK3B,KAA7B,CAAQ2B,WAAR;;AAEA,UAAIX,MAAJ,EAAY;AACV;AACD;;AAED,UAAI,KAAKP,SAAL,CAAemB,OAAf,KAA2B,IAA/B,EAAqC;AACnC;AACD;;AAED,UAAMC,OAAN,GAAkB,KAAK7B,KAAvB,CAAM6B,OAAN;AACAA,MAAAA,OAAO;AACLC,QAAAA,SAAS,EAAE;AADN,SAEFD,OAFE,CAAP;AAIAvB,MAAAA,QAAQ,CAACyB,IAAT,CAAcC,WAAd,CAA0B,KAAK3B,OAA/B;AAEA,UAAI4B,MAAM,GAAG,KAAKR,iBAAL,CAAuB,KAAKhB,SAAL,CAAemB,OAAtC,CAAb;;AACA,UAAIK,MAAM,IAAI,IAAd,EAAoB;AAClBA,QAAAA,MAAM,GAAG,KAAKxB,SAAL,CAAemB,OAAxB;AACD;;AAEDZ,MAAAA,MAAM,GAAG,IAAIpB,QAAJ,CAAaqC,MAAb,EAAqB,KAAK5B,OAA1B,EAAmCwB,OAAnC,CAAT;AACAb,MAAAA,MAAM,CAACkB,cAAP,GAzBiB,CA2BjB;;AACAhB,MAAAA,oBAAoB,CAAC,KAAKN,GAAN,CAApB;AACA,WAAKA,GAAL,GAAWO,MAAM,CAACC,qBAAP,CAA6B,YAAM;AAC5C;AACA,YAAIO,WAAW,IAAI,CAAC,MAAI,CAACtB,OAAL,CAAa8B,QAAb,CAAsB7B,QAAQ,CAAC8B,aAA/B,CAApB,EAAmE;AACjE;AACA,cAAMC,IAAI,GAAG,MAAI,CAAChC,OAAL,CAAaiC,iBAA1B;;AACA,cAAID,IAAI,YAAYE,WAApB,EAAiC;AAC/BF,YAAAA,IAAI,CAACG,KAAL,GAD+B,CACjB;AACf;AACF;AACF,OATU,CAAX;AAWA,WAAKC,QAAL,CAAc;AAAEzB,QAAAA,MAAM,EAANA;AAAF,OAAd;AACD;;;WAED,yBAAwC;AAAA,UAA1B0B,WAA0B,uEAAZ,IAAY;AACtC,WAAK/B,SAAL,GAAiB,KAAjB;AACAO,MAAAA,oBAAoB,CAAC,KAAKN,GAAN,CAApB;AAEA,UAAQI,MAAR,GAAmB,KAAKF,KAAxB,CAAQE,MAAR;;AACA,UAAI,CAACA,MAAL,EAAa;AACX;AACD;;AAEDA,MAAAA,MAAM,CAAC2B,OAAP;AAEArC,MAAAA,QAAQ,CAACyB,IAAT,CAAca,WAAd,CAA0B,KAAKvC,OAA/B;;AAEA,UAAIqC,WAAJ,EAAiB;AACf,aAAKD,QAAL,CAAc;AAAEzB,UAAAA,MAAM,EAAE;AAAV,SAAd;AACD;AACF;;;WAED,gBAAa;AACX,WAAK6B,UAAL;AACA,WAAKJ,QAAL,CAAc;AAAE1B,QAAAA,IAAI,EAAE;AAAR,OAAd;AACD;;;WAED,gBAAa;AACX,WAAK0B,QAAL,CAAc;AAAE1B,QAAAA,IAAI,EAAE;AAAR,OAAd;AACD;;;WAED,0BAAuB;AACrB,UAAQC,MAAR,GAAmB,KAAKF,KAAxB,CAAQE,MAAR;AACA,UAAIA,MAAJ,EAAYA,MAAM,CAACkB,cAAP;AACb;;;WAED,oBAAWY,CAAX,EAAsC;AACpC,UAAI,EAAEA,CAAC,CAACC,aAAF,YAA2BR,WAA7B,CAAJ,EAA+C;AAC7C;AACD;;AACD,UAAI,CAAC,KAAKlC,OAAL,CAAa8B,QAAb,CAAsBW,CAAC,CAACC,aAAxB,CAAL,EAA6C;AAC3C,aAAK1B,IAAL;AACD;AACF;;;WAED,uBAAoB;AAClB,UAAQ2B,SAAR,GAAsB,KAAKhD,KAA3B,CAAQgD,SAAR;AACAA,MAAAA,SAAS,GAFS,CAEL;AACd;;;WAED,sBAAmB;AACjB,UAAQC,QAAR,GAAqB,KAAKjD,KAA1B,CAAQiD,QAAR;AACAA,MAAAA,QAAQ,GAFS,CAEL;;AAEZ,UAAQlC,IAAR,GAAiB,KAAKD,KAAtB,CAAQC,IAAR;;AACA,UAAI,CAACA,IAAL,EAAW;AACT,aAAKO,aAAL;AACD;;AAED,WAAKX,SAAL,GAAiB,KAAjB;AACD;;;WAED,yBAA6B;AAAA;;AAC3B,wBAMI,KAAKX,KANT;AAAA,UACEQ,SADF,eACEA,SADF;AAAA,UAEE0C,QAFF,eAEEA,QAFF;AAAA,UAGEC,OAHF,eAGEA,OAHF;AAAA,UAIEC,WAJF,eAIEA,WAJF;AAAA,UAKEzB,WALF,eAKEA,WALF;AAOA,UAAQZ,IAAR,GAAiB,KAAKD,KAAtB,CAAQC,IAAR;AAEA,0BACE,oBAAC,aAAD;AACE,cAAIA,IADN;AAEE,QAAA,OAAO,EAAEoC,OAFX;AAGE,QAAA,UAAU,EAAC,mBAHb;AAIE,QAAA,SAAS,EAAE,KAAKlD,WAJlB;AAKE,QAAA,MAAM,EAAE,kBAAM;AACZ,UAAA,MAAI,CAACU,SAAL,GAAiB,IAAjB;AACD,SAPH;AAQE,QAAA,QAAQ,EAAE,KAAKR;AARjB,sBAUE;AACE,QAAA,OAAO,EAAE,iBAAA2C,CAAC,EAAI;AACZ;AACAA,UAAAA,CAAC,CAACO,eAAF;AACD,SAJH;AAKE,QAAA,SAAS,EAAE,mBAAAP,CAAC,EAAI;AACd,cAAIA,CAAC,CAACQ,GAAF,KAAU,QAAd,EAAwB,MAAI,CAACjC,IAAL;AACzB,SAPH;AAQE,QAAA,SAAS,EAAE3B,UAAU,CAAC,QAAD,EAAW;AAAE0D,UAAAA,WAAW,EAAXA;AAAF,SAAX,EAA4B5C,SAA5B,CARvB;AASE,QAAA,MAAM,EAAEmB,WAAW,GAAG,KAAKvB,UAAR,GAAqBmD,SAT1C;AAUE,QAAA,QAAQ,EAAE5B,WAAW,GAAG,CAAC,CAAJ,GAAQ4B,SAV/B;AAWE,QAAA,IAAI,EAAC;AAXP,sBAaE;AAAK,QAAA,SAAS,EAAC;AAAf,SACGL,QADH,eAEE;AAAK,QAAA,SAAS,EAAC,cAAf;AAA8B,mBAAQ;AAAtC,QAFF,CAbF,CAVF,CADF;AA+BD;;;WAED,kBAAsB;AACpB,UAAQlC,MAAR,GAAmB,KAAKF,KAAxB,CAAQE,MAAR;AACA,0BACE;AACE,QAAA,SAAS,EAAC,yBADZ;AAEE,QAAA,GAAG,EAAE,KAAKP,SAFZ;AAGE,QAAA,KAAK,EAAE;AAAE+C,UAAAA,OAAO,EAAE;AAAX;AAHT,SAKGxC,MAAM,iBAAIvB,QAAQ,CAACgE,YAAT,CAAsB,KAAKC,aAAL,EAAtB,EAA4C,KAAKrD,OAAjD,CALb,CADF;AASD;;;;EAzPkBb,S;;gBAAfO,M,eACe;AACjBmD,EAAAA,QAAQ,EAAErD,SAAS,CAAC8D,IAAV,CAAeC,UADR;AAEjB/B,EAAAA,OAAO,EAAEhC,SAAS,CAACgE,KAAV,CAAgB,EAAhB,CAFQ;AAGjBrD,EAAAA,SAAS,EAAEX,SAAS,CAACiE,MAHJ;AAIjBX,EAAAA,OAAO,EAAEtD,SAAS,CAACkE,MAJF;AAKjBf,EAAAA,SAAS,EAAEnD,SAAS,CAACmE,IALJ;AAMjBf,EAAAA,QAAQ,EAAEpD,SAAS,CAACmE,IANH;AAOjBnD,EAAAA,OAAO,EAAEhB,SAAS,CAACoE,IAPF;AAQjBtC,EAAAA,WAAW,EAAE9B,SAAS,CAACoE,IARN;AASjBb,EAAAA,WAAW,EAAEvD,SAAS,CAACoE;AATN,C;;gBADflE,M,kBAakB;AACpB8B,EAAAA,OAAO,EAAE,EADW;AAEpBrB,EAAAA,SAAS,EAAE,EAFS;AAGpB2C,EAAAA,OAAO,EAAErD,WAAW,CAACoE,YAHD;AAIpBlB,EAAAA,SAJoB,uBAIF,CAChB;AACD,GANmB;AAOpBC,EAAAA,QAPoB,sBAOH,CACf;AACD,GATmB;AAUpBpC,EAAAA,OAAO,EAAE,KAVW;AAWpBuC,EAAAA,WAAW,EAAE,KAXO;AAYpBzB,EAAAA,WAAW,EAAE;AAZO,C;;AA+OxB,eAAe5B,MAAf","sourcesContent":["/**\n * A component for creating popover dialogs. Only requires child element.\n *\n * <Popper\n * options={popperOptions}\n * className=\"whatever\"\n * onEntered={this.handleEnter}\n * onExited={this.handleExit}\n * closeOnBlur // if you want dialog to self close, on click outside\n * interactive // if popper contents will be interactable\n * isShown={variable} // controls if its shown or not,\n * ref={this.popper} // or via ref and this.popper.show() or this.popper.hide()\n * >\n * <ChildContent />\n * </Popper>\n */\n\nimport React, { Component } from 'react';\nimport ReactDOM from 'react-dom';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport PopperJs, { PopperOptions } from 'popper.js';\nimport PropTypes from 'prop-types';\nimport ThemeExport from '../ThemeExport';\nimport './Popper.scss';\n\ninterface PopperProps {\n options: PopperOptions;\n className: string;\n timeout: number;\n onEntered: () => void;\n onExited: () => void;\n isShown: boolean;\n closeOnBlur: boolean;\n interactive: boolean;\n}\n\ninterface PopperState {\n show: boolean;\n popper: PopperJs | null;\n}\n\nclass Popper extends Component<PopperProps, PopperState> {\n static propTypes = {\n children: PropTypes.node.isRequired,\n options: PropTypes.shape({}),\n className: PropTypes.string,\n timeout: PropTypes.number,\n onEntered: PropTypes.func,\n onExited: PropTypes.func,\n isShown: PropTypes.bool,\n closeOnBlur: PropTypes.bool,\n interactive: PropTypes.bool,\n };\n\n static defaultProps = {\n options: {},\n className: '',\n timeout: ThemeExport.transitionMs,\n onEntered(): void {\n // no-op\n },\n onExited(): void {\n // no-op\n },\n isShown: false,\n interactive: false,\n closeOnBlur: false,\n };\n\n constructor(props: PopperProps) {\n super(props);\n\n this.handleEnter = this.handleEnter.bind(this);\n this.handleExit = this.handleExit.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.element = document.createElement('div');\n this.element.className = 'popper-container';\n this.container = React.createRef<HTMLDivElement>();\n\n this.isExiting = false;\n\n // cancelAnimationFrame does nothing if the handle isn't recognized\n // requestAnimationFrame provides a non-zero number, so 0 as a default should be safe\n this.rAF = 0;\n\n const { isShown } = this.props;\n\n this.state = {\n show: isShown,\n popper: null,\n };\n }\n\n componentDidUpdate(prevProps: PopperProps): void {\n const { isShown } = this.props;\n\n if (prevProps.isShown !== isShown) {\n if (isShown) {\n cancelAnimationFrame(this.rAF);\n this.rAF = window.requestAnimationFrame(() => {\n this.show();\n });\n } else {\n this.hide();\n }\n }\n }\n\n componentWillUnmount(): void {\n this.destroyPopper(false);\n this.isExiting = false;\n }\n\n element: HTMLDivElement;\n\n container: React.RefObject<HTMLDivElement>;\n\n isExiting: boolean;\n\n // This is the request animation frame handle number\n rAF: number;\n\n /** Goes through an element and it's parents until the first visible element is found */\n getVisibleElement(element: HTMLElement | null): HTMLElement | null {\n if (\n element == null ||\n element.clientHeight > 0 ||\n element.clientWidth > 0\n ) {\n return element;\n }\n\n return this.getVisibleElement(element.parentElement);\n }\n\n initPopper(): void {\n let { popper } = this.state;\n const { closeOnBlur } = this.props;\n\n if (popper) {\n return;\n }\n\n if (this.container.current === null) {\n return;\n }\n\n let { options } = this.props;\n options = {\n placement: 'auto',\n ...options,\n };\n document.body.appendChild(this.element);\n\n let parent = this.getVisibleElement(this.container.current);\n if (parent == null) {\n parent = this.container.current;\n }\n\n popper = new PopperJs(parent, this.element, options);\n popper.scheduleUpdate();\n\n // delayed due to scheduleUpdate\n cancelAnimationFrame(this.rAF);\n this.rAF = window.requestAnimationFrame(() => {\n // for blur on close to work, focus needs to be on or within the popper\n if (closeOnBlur && !this.element.contains(document.activeElement)) {\n // only set focus, if a focus isn't already set within\n const elem = this.element.firstElementChild;\n if (elem instanceof HTMLElement) {\n elem.focus(); // first child of the portal element\n }\n }\n });\n\n this.setState({ popper });\n }\n\n destroyPopper(updateState = true): void {\n this.isExiting = false;\n cancelAnimationFrame(this.rAF);\n\n const { popper } = this.state;\n if (!popper) {\n return;\n }\n\n popper.destroy();\n\n document.body.removeChild(this.element);\n\n if (updateState) {\n this.setState({ popper: null });\n }\n }\n\n show(): void {\n this.initPopper();\n this.setState({ show: true });\n }\n\n hide(): void {\n this.setState({ show: false });\n }\n\n scheduleUpdate(): void {\n const { popper } = this.state;\n if (popper) popper.scheduleUpdate();\n }\n\n handleBlur(e: React.FocusEvent): void {\n if (!(e.relatedTarget instanceof HTMLElement)) {\n return;\n }\n if (!this.element.contains(e.relatedTarget)) {\n this.hide();\n }\n }\n\n handleEnter(): void {\n const { onEntered } = this.props;\n onEntered(); // trigger any parent component waiting for enter handler\n }\n\n handleExit(): void {\n const { onExited } = this.props;\n onExited(); // trigger any parent component waiting for exited handler\n\n const { show } = this.state;\n if (!show) {\n this.destroyPopper();\n }\n\n this.isExiting = false;\n }\n\n renderContent(): JSX.Element {\n const {\n className,\n children,\n timeout,\n interactive,\n closeOnBlur,\n } = this.props;\n const { show } = this.state;\n\n return (\n <CSSTransition\n in={show}\n timeout={timeout}\n classNames=\"popper-transition\"\n onEntered={this.handleEnter}\n onExit={() => {\n this.isExiting = true;\n }}\n onExited={this.handleExit}\n >\n <div\n onClick={e => {\n // stop click events from escaping popper\n e.stopPropagation();\n }}\n onKeyDown={e => {\n if (e.key === 'Escape') this.hide();\n }}\n className={classNames('popper', { interactive }, className)}\n onBlur={closeOnBlur ? this.handleBlur : undefined}\n tabIndex={closeOnBlur ? -1 : undefined}\n role=\"presentation\"\n >\n <div className=\"popper-content\">\n {children}\n <div className=\"popper-arrow\" x-arrow=\"\" />\n </div>\n </div>\n </CSSTransition>\n );\n }\n\n render(): JSX.Element {\n const { popper } = this.state;\n return (\n <div\n className=\"popper-parent-container\"\n ref={this.container}\n style={{ display: 'none' }}\n >\n {popper && ReactDOM.createPortal(this.renderContent(), this.element)}\n </div>\n );\n }\n}\n\nexport default Popper;\nexport type { PopperOptions };\n"],"file":"Popper.js"}
1
+ {"version":3,"sources":["../../src/popper/Popper.tsx"],"names":["React","Component","ReactDOM","classNames","CSSTransition","PopperJs","PropTypes","ThemeExport","Popper","constructor","props","handleEnter","bind","handleExit","handleBlur","element","document","createElement","className","container","createRef","isExiting","rAF","isShown","state","show","popper","componentDidUpdate","prevProps","cancelAnimationFrame","window","requestAnimationFrame","hide","componentWillUnmount","destroyPopper","getVisibleElement","clientHeight","clientWidth","parentElement","initPopper","closeOnBlur","current","options","placement","body","appendChild","parent","scheduleUpdate","contains","activeElement","elem","firstElementChild","HTMLElement","focus","setState","updateState","destroy","removeChild","e","relatedTarget","onEntered","onExited","renderContent","children","timeout","interactive","stopPropagation","key","undefined","render","display","createPortal","node","isRequired","shape","string","number","func","bool","transitionMs"],"mappings":"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","sourcesContent":["/**\n * A component for creating popover dialogs. Only requires child element.\n *\n * <Popper\n * options={popperOptions}\n * className=\"whatever\"\n * onEntered={this.handleEnter}\n * onExited={this.handleExit}\n * closeOnBlur // if you want dialog to self close, on click outside\n * interactive // if popper contents will be interactable\n * isShown={variable} // controls if its shown or not,\n * ref={this.popper} // or via ref and this.popper.show() or this.popper.hide()\n * >\n * <ChildContent />\n * </Popper>\n */\n\nimport React, { Component } from 'react';\nimport ReactDOM from 'react-dom';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport PopperJs, { PopperOptions } from 'popper.js';\nimport PropTypes from 'prop-types';\nimport ThemeExport from '../ThemeExport';\nimport './Popper.scss';\n\ninterface PopperProps {\n options: PopperOptions;\n className: string;\n timeout: number;\n onEntered: () => void;\n onExited: () => void;\n isShown: boolean;\n closeOnBlur: boolean;\n interactive: boolean;\n}\n\ninterface PopperState {\n show: boolean;\n popper: PopperJs | null;\n}\n\nclass Popper extends Component<PopperProps, PopperState> {\n static propTypes = {\n children: PropTypes.node.isRequired,\n options: PropTypes.shape({}),\n className: PropTypes.string,\n timeout: PropTypes.number,\n onEntered: PropTypes.func,\n onExited: PropTypes.func,\n isShown: PropTypes.bool,\n closeOnBlur: PropTypes.bool,\n interactive: PropTypes.bool,\n };\n\n static defaultProps = {\n options: {},\n className: '',\n timeout: ThemeExport.transitionMs,\n onEntered(): void {\n // no-op\n },\n onExited(): void {\n // no-op\n },\n isShown: false,\n interactive: false,\n closeOnBlur: false,\n };\n\n constructor(props: PopperProps) {\n super(props);\n\n this.handleEnter = this.handleEnter.bind(this);\n this.handleExit = this.handleExit.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.element = document.createElement('div');\n this.element.className = 'popper-container';\n this.container = React.createRef<HTMLDivElement>();\n\n this.isExiting = false;\n\n // cancelAnimationFrame does nothing if the handle isn't recognized\n // requestAnimationFrame provides a non-zero number, so 0 as a default should be safe\n this.rAF = 0;\n\n const { isShown } = this.props;\n\n this.state = {\n show: isShown,\n popper: null,\n };\n }\n\n componentDidUpdate(prevProps: PopperProps): void {\n const { isShown } = this.props;\n\n if (prevProps.isShown !== isShown) {\n if (isShown) {\n cancelAnimationFrame(this.rAF);\n this.rAF = window.requestAnimationFrame(() => {\n this.show();\n });\n } else {\n this.hide();\n }\n }\n }\n\n componentWillUnmount(): void {\n this.destroyPopper(false);\n this.isExiting = false;\n }\n\n element: HTMLDivElement;\n\n container: React.RefObject<HTMLDivElement>;\n\n isExiting: boolean;\n\n // This is the request animation frame handle number\n rAF: number;\n\n /** Goes through an element and it's parents until the first visible element is found */\n getVisibleElement(element: HTMLElement | null): HTMLElement | null {\n if (\n element == null ||\n element.clientHeight > 0 ||\n element.clientWidth > 0\n ) {\n return element;\n }\n\n return this.getVisibleElement(element.parentElement);\n }\n\n initPopper(): void {\n let { popper } = this.state;\n const { closeOnBlur } = this.props;\n\n if (popper) {\n return;\n }\n\n if (this.container.current === null) {\n return;\n }\n\n let { options } = this.props;\n options = {\n placement: 'auto',\n ...options,\n };\n document.body.appendChild(this.element);\n\n let parent = this.getVisibleElement(this.container.current);\n if (parent == null) {\n parent = this.container.current;\n }\n\n popper = new PopperJs(parent, this.element, options);\n popper.scheduleUpdate();\n\n // delayed due to scheduleUpdate\n cancelAnimationFrame(this.rAF);\n this.rAF = window.requestAnimationFrame(() => {\n // for blur on close to work, focus needs to be on or within the popper\n if (closeOnBlur && !this.element.contains(document.activeElement)) {\n // only set focus, if a focus isn't already set within\n const elem = this.element.firstElementChild;\n if (elem instanceof HTMLElement) {\n elem.focus(); // first child of the portal element\n }\n }\n });\n\n this.setState({ popper });\n }\n\n destroyPopper(updateState = true): void {\n this.isExiting = false;\n cancelAnimationFrame(this.rAF);\n\n const { popper } = this.state;\n if (!popper) {\n return;\n }\n\n popper.destroy();\n\n document.body.removeChild(this.element);\n\n if (updateState) {\n this.setState({ popper: null });\n }\n }\n\n show(): void {\n this.initPopper();\n this.setState({ show: true });\n }\n\n hide(): void {\n this.setState({ show: false });\n }\n\n scheduleUpdate(): void {\n const { popper } = this.state;\n if (popper) popper.scheduleUpdate();\n }\n\n handleBlur(e: React.FocusEvent): void {\n if (!(e.relatedTarget instanceof HTMLElement)) {\n return;\n }\n if (!this.element.contains(e.relatedTarget)) {\n this.hide();\n }\n }\n\n handleEnter(): void {\n const { onEntered } = this.props;\n onEntered(); // trigger any parent component waiting for enter handler\n }\n\n handleExit(): void {\n const { onExited } = this.props;\n onExited(); // trigger any parent component waiting for exited handler\n\n const { show } = this.state;\n if (!show) {\n this.destroyPopper();\n }\n\n this.isExiting = false;\n }\n\n renderContent(): JSX.Element {\n const {\n className,\n children,\n timeout,\n interactive,\n closeOnBlur,\n } = this.props;\n const { show } = this.state;\n\n return (\n <CSSTransition\n in={show}\n timeout={timeout}\n classNames=\"popper-transition\"\n onEntered={this.handleEnter}\n onExit={() => {\n this.isExiting = true;\n }}\n onExited={this.handleExit}\n >\n <div\n onClick={e => {\n // stop click events from escaping popper\n e.stopPropagation();\n }}\n onKeyDown={e => {\n if (e.key === 'Escape') this.hide();\n }}\n className={classNames('popper', { interactive }, className)}\n onBlur={closeOnBlur ? this.handleBlur : undefined}\n tabIndex={closeOnBlur ? -1 : undefined}\n role=\"presentation\"\n >\n <div className=\"popper-content\">\n {children}\n <div className=\"popper-arrow\" x-arrow=\"\" />\n </div>\n </div>\n </CSSTransition>\n );\n }\n\n render(): JSX.Element {\n const { popper } = this.state;\n return (\n <div\n className=\"popper-parent-container\"\n ref={this.container}\n style={{ display: 'none' }}\n >\n {popper && ReactDOM.createPortal(this.renderContent(), this.element)}\n </div>\n );\n }\n}\n\nexport default Popper;\nexport type { PopperOptions };\n"],"file":"Popper.js"}