@jetbrains/ring-ui-built 6.0.30 → 6.0.32

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 (226) hide show
  1. package/components/_helpers/_rollupPluginBabelHelpers.js +7 -629
  2. package/components/_helpers/anchor.js +7 -6
  3. package/components/_helpers/button__classes.js +16 -14
  4. package/components/_helpers/caption.js +14 -20
  5. package/components/_helpers/card.js +95 -105
  6. package/components/_helpers/dialog__body-scroll-preventer.js +11 -19
  7. package/components/_helpers/icon__svg.js +22 -25
  8. package/components/_helpers/input.js +146 -177
  9. package/components/_helpers/query-assist__suggestions.js +74 -90
  10. package/components/_helpers/select__filter.js +48 -69
  11. package/components/_helpers/services-link.js +29 -37
  12. package/components/_helpers/sidebar.js +99 -107
  13. package/components/_helpers/tab-link.js +7 -7
  14. package/components/_helpers/theme.js +31 -40
  15. package/components/_helpers/title.js +57 -72
  16. package/components/alert/alert.js +150 -202
  17. package/components/alert/container.js +32 -41
  18. package/components/alert-service/alert-service.js +105 -170
  19. package/components/analytics/analytics.js +12 -22
  20. package/components/analytics/analytics__custom-plugin.js +54 -75
  21. package/components/auth/auth.js +4 -36
  22. package/components/auth/auth__core.js +746 -1471
  23. package/components/auth/background-flow.js +87 -127
  24. package/components/auth/down-notification.js +30 -73
  25. package/components/auth/iframe-flow.js +75 -133
  26. package/components/auth/request-builder.js +46 -82
  27. package/components/auth/response-parser.js +86 -116
  28. package/components/auth/storage.js +171 -334
  29. package/components/auth/token-validator.js +137 -242
  30. package/components/auth/window-flow.js +92 -134
  31. package/components/auth-dialog/auth-dialog.js +114 -172
  32. package/components/auth-dialog-service/auth-dialog-service.js +8 -31
  33. package/components/avatar/avatar-example-datauri.js +23 -1
  34. package/components/avatar/avatar.js +119 -152
  35. package/components/avatar/fallback-avatar.js +22 -38
  36. package/components/badge/badge.js +35 -45
  37. package/components/button/button.js +86 -107
  38. package/components/button-group/button-group.js +19 -33
  39. package/components/button-set/button-set.js +20 -32
  40. package/components/button-toolbar/button-toolbar.js +19 -31
  41. package/components/caret/caret.js +186 -220
  42. package/components/checkbox/checkbox.js +76 -101
  43. package/components/clipboard/clipboard-fallback.js +10 -10
  44. package/components/clipboard/clipboard.js +35 -132
  45. package/components/code/code.js +92 -166
  46. package/components/collapse/collapse-content.js +42 -64
  47. package/components/collapse/collapse-context.js +2 -2
  48. package/components/collapse/collapse-control.js +12 -14
  49. package/components/collapse/collapse.js +11 -17
  50. package/components/collapse/consts.js +4 -4
  51. package/components/collapse/utils.js +1 -3
  52. package/components/confirm/confirm.js +66 -104
  53. package/components/confirm-service/confirm-service.js +37 -59
  54. package/components/content-layout/content-layout.js +43 -64
  55. package/components/content-layout/sidebar.js +0 -1
  56. package/components/contenteditable/contenteditable.js +50 -59
  57. package/components/control-label/control-label.js +9 -9
  58. package/components/data-list/data-list.js +129 -182
  59. package/components/data-list/data-list.mock.js +2 -6
  60. package/components/data-list/item.js +143 -170
  61. package/components/data-list/selection.js +76 -136
  62. package/components/data-list/title.js +1 -12
  63. package/components/date-picker/consts.js +19 -26
  64. package/components/date-picker/date-input.js +113 -144
  65. package/components/date-picker/date-picker.js +227 -282
  66. package/components/date-picker/date-popup.js +350 -395
  67. package/components/date-picker/day.js +87 -116
  68. package/components/date-picker/month-names.js +43 -66
  69. package/components/date-picker/month-slider.js +51 -76
  70. package/components/date-picker/month.js +16 -25
  71. package/components/date-picker/months.js +43 -50
  72. package/components/date-picker/weekdays.js +12 -22
  73. package/components/date-picker/years.js +83 -110
  74. package/components/dialog/dialog.js +142 -190
  75. package/components/dialog/dialog__body-scroll-preventer.js +0 -4
  76. package/components/dropdown/anchor.js +0 -9
  77. package/components/dropdown/dropdown.js +182 -213
  78. package/components/dropdown-menu/dropdown-menu.js +71 -97
  79. package/components/editable-heading/editable-heading.js +75 -127
  80. package/components/error-bubble/error-bubble.js +31 -60
  81. package/components/error-message/error-message.js +39 -59
  82. package/components/footer/footer.js +27 -30
  83. package/components/global/compose.js +1 -10
  84. package/components/global/composeRefs.js +7 -12
  85. package/components/global/controls-height.js +2 -2
  86. package/components/global/create-stateful-context.js +15 -15
  87. package/components/global/data-tests.js +6 -14
  88. package/components/global/dom.js +47 -86
  89. package/components/global/focus-sensor-hoc.js +122 -132
  90. package/components/global/fuzzy-highlight.js +22 -36
  91. package/components/global/get-event-key.js +8 -8
  92. package/components/global/get-uid.js +4 -8
  93. package/components/global/inject-styles.js +10 -15
  94. package/components/global/listeners.js +27 -51
  95. package/components/global/memoize.js +6 -12
  96. package/components/global/normalize-indent.js +19 -50
  97. package/components/global/promise-with-timeout.js +6 -8
  98. package/components/global/prop-types.js +3 -5
  99. package/components/global/react-dom-renderer.js +28 -44
  100. package/components/global/react-render-adapter.js +1 -1
  101. package/components/global/rerender-hoc.js +12 -30
  102. package/components/global/schedule-raf.js +5 -6
  103. package/components/global/sniffer.js +1 -1
  104. package/components/global/theme.js +0 -22
  105. package/components/global/trivial-template-tag.js +3 -10
  106. package/components/global/typescript-utils.js +2 -6
  107. package/components/global/url.js +20 -26
  108. package/components/global/use-event-callback.js +6 -4
  109. package/components/grid/col.js +35 -52
  110. package/components/grid/grid.js +17 -31
  111. package/components/grid/row.js +35 -47
  112. package/components/group/group.js +17 -25
  113. package/components/header/header.js +33 -78
  114. package/components/header/logo.js +20 -36
  115. package/components/header/profile.js +166 -199
  116. package/components/header/services-link.js +0 -4
  117. package/components/header/services.js +73 -116
  118. package/components/header/smart-profile.js +111 -203
  119. package/components/header/smart-services.js +62 -113
  120. package/components/header/tray-icon.js +21 -37
  121. package/components/header/tray.js +21 -32
  122. package/components/heading/heading.js +24 -25
  123. package/components/http/http.d.ts +1 -3
  124. package/components/http/http.js +203 -353
  125. package/components/http/http.mock.js +49 -101
  126. package/components/hub-source/hub-source.js +83 -190
  127. package/components/hub-source/hub-source__user.js +11 -44
  128. package/components/hub-source/hub-source__users-groups.js +37 -65
  129. package/components/i18n/i18n-context.js +7 -10
  130. package/components/i18n/i18n.js +7 -10
  131. package/components/icon/icon.js +76 -93
  132. package/components/icon/icon__svg.js +0 -8
  133. package/components/icon/index.js +0 -8
  134. package/components/input/input.js +0 -13
  135. package/components/island/adaptive-island-hoc.js +30 -43
  136. package/components/island/content.js +115 -132
  137. package/components/island/header.js +57 -70
  138. package/components/island/island.js +28 -40
  139. package/components/island-legacy/content-legacy.js +17 -25
  140. package/components/island-legacy/header-legacy.js +19 -27
  141. package/components/island-legacy/island-legacy.js +17 -25
  142. package/components/link/clickableLink.js +44 -59
  143. package/components/link/link.js +57 -68
  144. package/components/list/consts.js +2 -2
  145. package/components/list/list.js +611 -698
  146. package/components/list/list__custom.js +44 -62
  147. package/components/list/list__hint.js +10 -19
  148. package/components/list/list__item.js +133 -174
  149. package/components/list/list__link.js +37 -50
  150. package/components/list/list__separator.js +14 -24
  151. package/components/list/list__title.js +22 -32
  152. package/components/list/list__users-groups-source.js +54 -126
  153. package/components/loader/loader.js +43 -74
  154. package/components/loader/loader__core.js +198 -263
  155. package/components/loader-inline/loader-inline.js +23 -35
  156. package/components/loader-screen/loader-screen.js +25 -46
  157. package/components/login-dialog/login-dialog.js +111 -158
  158. package/components/login-dialog/service.js +8 -34
  159. package/components/markdown/markdown.js +15 -23
  160. package/components/message/message.js +161 -203
  161. package/components/old-browsers-message/old-browsers-message.js +11 -18
  162. package/components/old-browsers-message/old-browsers-message__stop.js +0 -7
  163. package/components/old-browsers-message/white-list.js +8 -16
  164. package/components/pager/pager.js +212 -271
  165. package/components/panel/panel.js +17 -25
  166. package/components/permissions/permissions.js +127 -172
  167. package/components/permissions/permissions__cache.js +194 -224
  168. package/components/popup/popup.consts.js +1 -1
  169. package/components/popup/popup.js +284 -343
  170. package/components/popup/popup.target.js +9 -8
  171. package/components/popup/position.js +96 -106
  172. package/components/popup-menu/popup-menu.js +44 -80
  173. package/components/progress-bar/progress-bar.js +87 -104
  174. package/components/query-assist/query-assist.js +838 -916
  175. package/components/query-assist/query-assist__suggestions.js +1 -30
  176. package/components/radio/radio.js +19 -34
  177. package/components/radio/radio__item.js +52 -69
  178. package/components/select/select.js +852 -957
  179. package/components/select/select__filter.js +0 -30
  180. package/components/select/select__popup.js +373 -487
  181. package/components/shortcuts/core.js +166 -217
  182. package/components/shortcuts/shortcut-title.js +6 -11
  183. package/components/shortcuts/shortcuts-hoc.js +19 -45
  184. package/components/shortcuts/shortcuts.js +50 -75
  185. package/components/slider/slider.js +99 -122
  186. package/components/slider/slider.utils.js +14 -24
  187. package/components/storage/storage.js +4 -33
  188. package/components/storage/storage__fallback.js +149 -224
  189. package/components/storage/storage__local.js +90 -153
  190. package/components/style.css +1 -1
  191. package/components/tab-trap/tab-trap.js +122 -153
  192. package/components/table/cell.js +14 -26
  193. package/components/table/disable-hover-hoc.js +33 -51
  194. package/components/table/header-cell.js +64 -89
  195. package/components/table/header.js +104 -132
  196. package/components/table/multitable.js +107 -125
  197. package/components/table/row-with-focus-sensor.js +25 -69
  198. package/components/table/row.js +175 -216
  199. package/components/table/selection-adapter.js +1 -3
  200. package/components/table/selection-shortcuts-hoc.js +180 -181
  201. package/components/table/selection.js +156 -226
  202. package/components/table/smart-table.js +50 -88
  203. package/components/table/table.js +289 -358
  204. package/components/tabs/collapsible-more.js +46 -79
  205. package/components/tabs/collapsible-tab.js +31 -38
  206. package/components/tabs/collapsible-tabs.js +88 -153
  207. package/components/tabs/custom-item.js +4 -2
  208. package/components/tabs/dumb-tabs.js +74 -117
  209. package/components/tabs/smart-tabs.js +29 -69
  210. package/components/tabs/tab-link.js +1 -5
  211. package/components/tabs/tab.js +19 -31
  212. package/components/tabs/tabs.js +0 -31
  213. package/components/tag/tag.js +133 -173
  214. package/components/tags-input/tags-input.js +329 -427
  215. package/components/tags-list/tags-list.js +57 -78
  216. package/components/text/text.js +28 -39
  217. package/components/toggle/toggle.js +56 -70
  218. package/components/tooltip/tooltip.js +146 -190
  219. package/components/user-agreement/service.js +228 -371
  220. package/components/user-agreement/toolbox.eula.js +160 -1
  221. package/components/user-agreement/user-agreement.js +85 -120
  222. package/components/user-card/card.js +0 -29
  223. package/components/user-card/smart-user-card-tooltip.js +51 -111
  224. package/components/user-card/tooltip.js +47 -84
  225. package/components/user-card/user-card.js +0 -29
  226. package/package.json +1 -1
@@ -1,49 +1,27 @@
1
- import { _ as _defineProperty, a as _inherits, b as _createClass, f as _classCallCheck, g as _callSuper, d as _objectSpread2, j as _slicedToArray } from '../_helpers/_rollupPluginBabelHelpers.js';
2
- import 'core-js/modules/es.array.concat.js';
3
- import 'core-js/modules/es.object.entries.js';
4
- import 'core-js/modules/es.object.to-string.js';
5
- import 'core-js/modules/es.regexp.exec.js';
6
- import 'core-js/modules/es.regexp.to-string.js';
7
- import 'core-js/modules/es.string.replace.js';
8
- import 'core-js/modules/web.dom-collections.for-each.js';
9
1
  import React, { PureComponent } from 'react';
10
2
  import { createPortal } from 'react-dom';
11
3
  import PropTypes from 'prop-types';
12
4
  import classNames from 'classnames';
13
5
  import getUID from '../global/get-uid.js';
14
6
  import scheduleRAF from '../global/schedule-raf.js';
15
- import { getStyles, Listeners } from '../global/dom.js';
7
+ import { Listeners, getStyles } from '../global/dom.js';
16
8
  import Shortcuts from '../shortcuts/shortcuts.js';
17
9
  import joinDataTestAttributes from '../global/data-tests.js';
18
10
  import TabTrap from '../tab-trap/tab-trap.js';
19
11
  import position from './position.js';
20
- import { Display, DEFAULT_DIRECTIONS, Directions, Dimension, MinWidth, MaxHeight } from './popup.consts.js';
12
+ import { DEFAULT_DIRECTIONS, Display, Directions, Dimension, MinWidth, MaxHeight } from './popup.consts.js';
21
13
  import { PopupTargetContext, PopupTarget } from './popup.target.js';
22
- import 'core-js/modules/es.array.filter.js';
23
- import 'core-js/modules/es.array.iterator.js';
24
- import 'core-js/modules/es.object.assign.js';
25
- import 'core-js/modules/es.set.js';
26
- import 'core-js/modules/es.string.split.js';
27
- import 'core-js/modules/web.dom-collections.iterator.js';
28
- import 'core-js/modules/es.array.map.js';
29
14
  import '../shortcuts/core.js';
30
- import 'core-js/modules/es.array.find-index.js';
31
- import 'core-js/modules/es.array.includes.js';
32
- import 'core-js/modules/es.array.slice.js';
33
- import 'core-js/modules/es.array.splice.js';
34
- import 'core-js/modules/es.string.includes.js';
35
- import 'core-js/modules/es.string.match.js';
36
15
  import 'combokeys';
37
16
  import '../global/sniffer.js';
38
17
  import 'sniffr';
39
- import 'core-js/modules/es.array.reduce.js';
40
- import 'core-js/modules/es.array.sort.js';
18
+ import '../_helpers/_rollupPluginBabelHelpers.js';
41
19
 
42
20
  var modules_2f69e2e2 = {"light":"light_rui_2ac4","popup":"popup_rui_871b font_rui_f295","hidden":"hidden_rui_871b","showing":"showing_rui_871b","attached":"attached_rui_871b"};
43
21
 
44
- var isPossibleClientSideNavigation = function isPossibleClientSideNavigation(event) {
45
- var target = event.target;
46
- var link = target.closest('a');
22
+ const isPossibleClientSideNavigation = event => {
23
+ const target = event.target;
24
+ const link = target.closest('a');
47
25
  // Taken from https://github.com/nanostores/router/blob/80a333db4cf0789fda21a02715ebabca15192642/index.js#L58-L69
48
26
  return link && event.button === 0 &&
49
27
  // Left mouse button
@@ -67,345 +45,308 @@ var isPossibleClientSideNavigation = function isPossibleClientSideNavigation(eve
67
45
  // Not open in new window by user
68
46
  !event.defaultPrevented;
69
47
  };
70
- var stop = function stop(event) {
48
+ const stop = event => {
71
49
  if (!isPossibleClientSideNavigation(event)) {
72
50
  event.stopPropagation();
73
51
  }
74
52
  };
75
- var getPopupContainer = function getPopupContainer(target) {
76
- return typeof target === 'string' ? document.querySelector("[data-portaltarget=".concat(target, "]")) : target;
77
- };
53
+ const getPopupContainer = target => typeof target === 'string' ? document.querySelector(`[data-portaltarget=${target}]`) : target;
78
54
  /**
79
55
  * @constructor
80
56
  * @name Popup
81
57
  * @extends {ReactComponent}
82
58
  */
83
- var Popup = /*#__PURE__*/function (_PureComponent) {
84
- function Popup() {
85
- var _this;
86
- _classCallCheck(this, Popup);
87
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
88
- args[_key] = arguments[_key];
89
- }
90
- _this = _callSuper(this, Popup, [].concat(args));
91
- _defineProperty(_this, "state", {
92
- display: Display.SHOWING
93
- });
94
- _defineProperty(_this, "popup", void 0);
95
- _defineProperty(_this, "node", void 0);
96
- _defineProperty(_this, "parent", void 0);
97
- _defineProperty(_this, "container", void 0);
98
- _defineProperty(_this, "ringPopupTarget", void 0);
99
- _defineProperty(_this, "listeners", new Listeners());
100
- _defineProperty(_this, "redrawScheduler", scheduleRAF(true));
101
- _defineProperty(_this, "uid", getUID('popup-'));
102
- _defineProperty(_this, "calculateDisplay", function (prevState) {
103
- return _objectSpread2(_objectSpread2({}, prevState), {}, {
104
- display: _this.props.hidden ? Display.SHOWING : Display.SHOWN
59
+ class Popup extends PureComponent {
60
+ static defaultProps = {
61
+ shortcuts: true,
62
+ hidden: false,
63
+ onOutsideClick() {},
64
+ onEscPress() {},
65
+ onCloseAttempt() {},
66
+ dontCloseOnAnchorClick: false,
67
+ keepMounted: false,
68
+ directions: DEFAULT_DIRECTIONS,
69
+ autoPositioning: true,
70
+ autoPositioningOnScroll: true,
71
+ autoCorrectTopOverflow: true,
72
+ left: 0,
73
+ top: 0,
74
+ offset: 0,
75
+ sidePadding: 8,
76
+ attached: false,
77
+ trapFocus: false,
78
+ autoFocusFirst: false,
79
+ legacy: false
80
+ };
81
+ state = {
82
+ display: Display.SHOWING
83
+ };
84
+ componentDidMount() {
85
+ if (!this.props.client) {
86
+ this.setState({
87
+ client: true
105
88
  });
106
- });
107
- _defineProperty(_this, "portalRef", function (el) {
108
- _this.node = el;
109
- _this.parent = el && el.parentElement;
110
- if (el && _this.getContainer()) {
111
- _this._redraw();
112
- }
113
- });
114
- _defineProperty(_this, "popupRef", function (el) {
115
- _this.popup = el;
116
- _this._redraw();
117
- });
118
- _defineProperty(_this, "containerRef", function (el) {
119
- _this.container = el;
120
- });
121
- _defineProperty(_this, "_updateDirection", function (newDirection) {
122
- if (_this.state.direction !== newDirection) {
123
- _this.setState({
124
- direction: newDirection
125
- });
126
- if (_this.props.onDirectionChange) {
127
- _this.props.onDirectionChange(newDirection);
128
- }
129
- }
130
- });
131
- _defineProperty(_this, "_updatePosition", function () {
132
- var popup = _this.popup;
133
- if (popup) {
134
- popup.style.position = 'absolute';
135
- if (_this.isVisible()) {
136
- var _this$position = _this.position(),
137
- style = _this$position.styles,
138
- direction = _this$position.direction;
139
- Object.entries(style).forEach(function (_ref) {
140
- var _ref2 = _slicedToArray(_ref, 2),
141
- key = _ref2[0],
142
- value = _ref2[1];
143
- var propKey = key;
144
- if (typeof value === 'number') {
145
- popup.style[propKey] = "".concat(value, "px");
146
- } else {
147
- popup.style[propKey] = value.toString();
148
- }
149
- });
150
- if (direction != null) {
151
- _this._updateDirection(direction);
152
- }
153
- }
154
- _this.setState(_this.calculateDisplay);
155
- }
156
- });
157
- _defineProperty(_this, "_redraw", function () {
158
- if (_this.isVisible()) {
159
- _this.redrawScheduler(_this._updatePosition);
160
- }
161
- });
162
- _defineProperty(_this, "_listenersEnabled", void 0);
163
- _defineProperty(_this, "_onEscPress", function (evt) {
164
- _this.props.onEscPress(evt);
165
- _this._onCloseAttempt(evt, true);
166
- });
167
- /**
168
- * @param {jQuery.Event} evt
169
- * @private
170
- */
171
- _defineProperty(_this, "_onDocumentClick", function (evt) {
172
- var _this$_getAnchor;
173
- if (_this.container && evt.target instanceof Node && _this.container.contains(evt.target) || !_this._listenersEnabled || _this.props.dontCloseOnAnchorClick && evt.target instanceof Node && (_this$_getAnchor = _this._getAnchor()) !== null && _this$_getAnchor !== void 0 && _this$_getAnchor.contains(evt.target)) {
174
- return;
175
- }
176
- _this.props.onOutsideClick(evt);
177
- _this._onCloseAttempt(evt, false);
178
- });
179
- _defineProperty(_this, "shortcutsScope", _this.uid);
180
- _defineProperty(_this, "shortcutsMap", {
181
- esc: _this._onEscPress
182
- });
183
- return _this;
184
- }
185
- _inherits(Popup, _PureComponent);
186
- return _createClass(Popup, [{
187
- key: "componentDidMount",
188
- value: function componentDidMount() {
189
- if (!this.props.client) {
190
- this.setState({
191
- client: true
192
- });
193
- }
194
- if (!this.props.hidden) {
195
- this._setListenersEnabled(true);
196
- }
197
89
  }
198
- }, {
199
- key: "componentDidUpdate",
200
- value: function componentDidUpdate(prevProps, prevState) {
201
- var hidden = this.props.hidden;
202
- if (this.props !== prevProps) {
203
- if (prevProps.hidden !== hidden) {
204
- this._setListenersEnabled(!hidden);
205
- }
206
- this._redraw();
207
- }
208
- if (this.props.onShow && !hidden && this.state.display === Display.SHOWN && (prevProps.hidden || prevState.display !== Display.SHOWN)) {
209
- this.props.onShow();
210
- }
90
+ if (!this.props.hidden) {
91
+ this._setListenersEnabled(true);
211
92
  }
212
- }, {
213
- key: "componentWillUnmount",
214
- value: function componentWillUnmount() {
215
- this._setListenersEnabled(false);
93
+ }
94
+ componentDidUpdate(prevProps, prevState) {
95
+ const {
96
+ hidden
97
+ } = this.props;
98
+ if (this.props !== prevProps) {
99
+ if (prevProps.hidden !== hidden) {
100
+ this._setListenersEnabled(!hidden);
101
+ }
102
+ this._redraw();
216
103
  }
217
- }, {
218
- key: "shouldUseShortcuts",
219
- value: function shouldUseShortcuts() {
220
- var _this$props = this.props,
221
- shortcuts = _this$props.shortcuts,
222
- hidden = _this$props.hidden;
223
- return shortcuts && !hidden;
104
+ if (this.props.onShow && !hidden && this.state.display === Display.SHOWN && (prevProps.hidden || prevState.display !== Display.SHOWN)) {
105
+ this.props.onShow();
224
106
  }
225
- }, {
226
- key: "getContainer",
227
- value: function getContainer() {
228
- var target = this.props.target || this.ringPopupTarget;
229
- return target && getPopupContainer(target);
107
+ }
108
+ componentWillUnmount() {
109
+ this._setListenersEnabled(false);
110
+ }
111
+ popup;
112
+ node;
113
+ parent;
114
+ container;
115
+ ringPopupTarget;
116
+ shouldUseShortcuts() {
117
+ const {
118
+ shortcuts,
119
+ hidden
120
+ } = this.props;
121
+ return shortcuts && !hidden;
122
+ }
123
+ listeners = new Listeners();
124
+ redrawScheduler = scheduleRAF(true);
125
+ uid = getUID('popup-');
126
+ calculateDisplay = prevState => ({
127
+ ...prevState,
128
+ display: this.props.hidden ? Display.SHOWING : Display.SHOWN
129
+ });
130
+ static PopupProps = {
131
+ Directions,
132
+ Dimension,
133
+ MinWidth,
134
+ MaxHeight
135
+ };
136
+ portalRef = el => {
137
+ this.node = el;
138
+ this.parent = el && el.parentElement;
139
+ if (el && this.getContainer()) {
140
+ this._redraw();
230
141
  }
231
- }, {
232
- key: "position",
233
- value: function position$1() {
234
- var _this$props2 = this.props,
235
- directions = _this$props2.directions,
236
- autoPositioning = _this$props2.autoPositioning,
237
- autoCorrectTopOverflow = _this$props2.autoCorrectTopOverflow,
238
- sidePadding = _this$props2.sidePadding,
239
- top = _this$props2.top,
240
- left = _this$props2.left,
241
- offset = _this$props2.offset,
242
- maxHeight = _this$props2.maxHeight,
243
- minWidth = _this$props2.minWidth;
244
- var container = this.getContainer();
245
- return position({
246
- popup: this.popup,
247
- container: container && getStyles(container).position !== 'static' ? container : null,
248
- anchor: this._getAnchor(),
249
- directions,
250
- autoPositioning,
251
- autoCorrectTopOverflow,
252
- sidePadding,
253
- top,
254
- left,
255
- offset,
256
- maxHeight,
257
- minWidth
142
+ };
143
+ popupRef = el => {
144
+ this.popup = el;
145
+ this._redraw();
146
+ };
147
+ containerRef = el => {
148
+ this.container = el;
149
+ };
150
+ getContainer() {
151
+ const target = this.props.target || this.ringPopupTarget;
152
+ return target && getPopupContainer(target);
153
+ }
154
+ position() {
155
+ const {
156
+ directions,
157
+ autoPositioning,
158
+ autoCorrectTopOverflow,
159
+ sidePadding,
160
+ top,
161
+ left,
162
+ offset,
163
+ maxHeight,
164
+ minWidth
165
+ } = this.props;
166
+ const container = this.getContainer();
167
+ return position({
168
+ popup: this.popup,
169
+ container: container && getStyles(container).position !== 'static' ? container : null,
170
+ anchor: this._getAnchor(),
171
+ directions,
172
+ autoPositioning,
173
+ autoCorrectTopOverflow,
174
+ sidePadding,
175
+ top,
176
+ left,
177
+ offset,
178
+ maxHeight,
179
+ minWidth
180
+ });
181
+ }
182
+ _updateDirection = newDirection => {
183
+ if (this.state.direction !== newDirection) {
184
+ this.setState({
185
+ direction: newDirection
258
186
  });
187
+ if (this.props.onDirectionChange) {
188
+ this.props.onDirectionChange(newDirection);
189
+ }
259
190
  }
260
- }, {
261
- key: "_getAnchor",
262
- value: function _getAnchor() {
263
- return this.props.anchorElement || this.parent;
264
- }
265
- }, {
266
- key: "_setListenersEnabled",
267
- value:
268
- /**
269
- * @param {boolean} enable
270
- * @private
271
- */
272
- function _setListenersEnabled(enable) {
273
- var _this2 = this;
274
- if (enable && !this._listenersEnabled) {
275
- setTimeout(function () {
276
- _this2._listenersEnabled = true;
277
- _this2.listeners.add(window, 'resize', _this2._redraw);
278
- if (_this2.props.autoPositioningOnScroll) {
279
- _this2.listeners.add(window, 'scroll', _this2._redraw);
191
+ };
192
+ _updatePosition = () => {
193
+ const popup = this.popup;
194
+ if (popup) {
195
+ popup.style.position = 'absolute';
196
+ if (this.isVisible()) {
197
+ const {
198
+ styles: style,
199
+ direction
200
+ } = this.position();
201
+ Object.entries(style).forEach(_ref => {
202
+ let [key, value] = _ref;
203
+ const propKey = key;
204
+ if (typeof value === 'number') {
205
+ popup.style[propKey] = `${value}px`;
206
+ } else {
207
+ popup.style[propKey] = value.toString();
280
208
  }
281
- _this2.listeners.add(document, 'pointerdown', _this2._onDocumentClick, true);
282
- var el = _this2._getAnchor();
283
- while (el) {
284
- _this2.listeners.add(el, 'scroll', _this2._redraw);
285
- el = el.parentElement;
286
- }
287
- }, 0);
288
- return;
289
- }
290
- if (!enable && this._listenersEnabled) {
291
- this.listeners.removeAll();
292
- this._listenersEnabled = false;
209
+ });
210
+ if (direction != null) {
211
+ this._updateDirection(direction);
212
+ }
293
213
  }
214
+ this.setState(this.calculateDisplay);
294
215
  }
295
- /**
296
- * Returns visibility state
297
- * @return {boolean}
298
- */
299
- }, {
300
- key: "isVisible",
301
- value: function isVisible() {
302
- return !this.props.hidden;
216
+ };
217
+ _redraw = () => {
218
+ if (this.isVisible()) {
219
+ this.redrawScheduler(this._updatePosition);
303
220
  }
304
- }, {
305
- key: "_onCloseAttempt",
306
- value: function _onCloseAttempt(evt, isEsc) {
307
- this.props.onCloseAttempt(evt, isEsc);
221
+ };
222
+ _getAnchor() {
223
+ return this.props.anchorElement || this.parent;
224
+ }
225
+ _listenersEnabled;
226
+ /**
227
+ * @param {boolean} enable
228
+ * @private
229
+ */
230
+ _setListenersEnabled(enable) {
231
+ if (enable && !this._listenersEnabled) {
232
+ setTimeout(() => {
233
+ this._listenersEnabled = true;
234
+ this.listeners.add(window, 'resize', this._redraw);
235
+ if (this.props.autoPositioningOnScroll) {
236
+ this.listeners.add(window, 'scroll', this._redraw);
237
+ }
238
+ this.listeners.add(document, 'pointerdown', this._onDocumentClick, true);
239
+ let el = this._getAnchor();
240
+ while (el) {
241
+ this.listeners.add(el, 'scroll', this._redraw);
242
+ el = el.parentElement;
243
+ }
244
+ }, 0);
245
+ return;
308
246
  }
309
- }, {
310
- key: "getInternalContent",
311
- value: function getInternalContent() {
312
- var _this$props3 = this.props,
313
- trapFocus = _this$props3.trapFocus,
314
- autoFocusFirst = _this$props3.autoFocusFirst,
315
- children = _this$props3.children;
316
- return trapFocus ? /*#__PURE__*/React.createElement(TabTrap, {
317
- autoFocusFirst: autoFocusFirst,
318
- focusBackOnExit: true
319
- }, children) : children;
247
+ if (!enable && this._listenersEnabled) {
248
+ this.listeners.removeAll();
249
+ this._listenersEnabled = false;
320
250
  }
321
- }, {
322
- key: "render",
323
- value: function render() {
324
- var _this3 = this;
325
- var _this$props4 = this.props,
326
- className = _this$props4.className,
327
- style = _this$props4.style,
328
- hidden = _this$props4.hidden,
329
- attached = _this$props4.attached,
330
- keepMounted = _this$props4.keepMounted,
331
- client = _this$props4.client,
332
- onMouseDown = _this$props4.onMouseDown,
333
- onMouseUp = _this$props4.onMouseUp,
334
- onMouseOver = _this$props4.onMouseOver,
335
- onMouseOut = _this$props4.onMouseOut,
336
- onContextMenu = _this$props4.onContextMenu,
337
- dataTest = _this$props4['data-test'];
338
- var showing = this.state.display === Display.SHOWING;
339
- var classes = classNames(className, modules_2f69e2e2.popup, {
340
- [modules_2f69e2e2.attached]: attached,
341
- [modules_2f69e2e2.hidden]: hidden,
342
- [modules_2f69e2e2.showing]: showing
343
- });
344
- var direction = (this.state.direction || '').toLowerCase().replace(/[_]/g, '-');
345
- return /*#__PURE__*/React.createElement(PopupTargetContext.Consumer, null, function (value) {
346
- _this3.ringPopupTarget = value;
347
- return /*#__PURE__*/React.createElement("span", {
348
- // prevent bubbling through portal
349
- onClick: stop
350
- // This handler only blocks bubbling through React portal
351
- ,
352
- role: "presentation",
353
- ref: _this3.portalRef
354
- }, _this3.shouldUseShortcuts() && /*#__PURE__*/React.createElement(Shortcuts, {
355
- map: _this3.shortcutsMap,
356
- scope: _this3.shortcutsScope
357
- }), (client || _this3.state.client) && (keepMounted || !hidden) && /*#__PURE__*/createPortal( /*#__PURE__*/React.createElement(PopupTarget, {
358
- id: _this3.uid,
359
- ref: _this3.containerRef,
360
- onMouseOver: onMouseOver,
361
- onFocus: onMouseOver,
362
- onMouseOut: onMouseOut,
363
- onBlur: onMouseOut,
364
- onContextMenu: onContextMenu
365
- }, /*#__PURE__*/React.createElement("div", {
366
- "data-test": joinDataTestAttributes('ring-popup', dataTest),
367
- "data-test-shown": !hidden && !showing,
368
- "data-test-direction": direction,
369
- ref: _this3.popupRef,
370
- className: classes,
371
- style: style,
372
- onMouseDown: onMouseDown,
373
- onMouseUp: onMouseUp
374
- // mouse handlers are used to track clicking on inner elements
375
- ,
376
- role: "presentation"
377
- }, _this3.getInternalContent())), _this3.getContainer() || document.body));
378
- });
251
+ }
252
+ /**
253
+ * Returns visibility state
254
+ * @return {boolean}
255
+ */
256
+ isVisible() {
257
+ return !this.props.hidden;
258
+ }
259
+ _onCloseAttempt(evt, isEsc) {
260
+ this.props.onCloseAttempt(evt, isEsc);
261
+ }
262
+ _onEscPress = evt => {
263
+ this.props.onEscPress(evt);
264
+ this._onCloseAttempt(evt, true);
265
+ };
266
+ /**
267
+ * @param {jQuery.Event} evt
268
+ * @private
269
+ */
270
+ _onDocumentClick = evt => {
271
+ if (this.container && evt.target instanceof Node && this.container.contains(evt.target) || !this._listenersEnabled || this.props.dontCloseOnAnchorClick && evt.target instanceof Node && this._getAnchor()?.contains(evt.target)) {
272
+ return;
379
273
  }
380
- }]);
381
- }(PureComponent);
382
- _defineProperty(Popup, "defaultProps", {
383
- shortcuts: true,
384
- hidden: false,
385
- onOutsideClick() {},
386
- onEscPress() {},
387
- onCloseAttempt() {},
388
- dontCloseOnAnchorClick: false,
389
- keepMounted: false,
390
- directions: DEFAULT_DIRECTIONS,
391
- autoPositioning: true,
392
- autoPositioningOnScroll: true,
393
- autoCorrectTopOverflow: true,
394
- left: 0,
395
- top: 0,
396
- offset: 0,
397
- sidePadding: 8,
398
- attached: false,
399
- trapFocus: false,
400
- autoFocusFirst: false,
401
- legacy: false
402
- });
403
- _defineProperty(Popup, "PopupProps", {
404
- Directions,
405
- Dimension,
406
- MinWidth,
407
- MaxHeight
408
- });
274
+ this.props.onOutsideClick(evt);
275
+ this._onCloseAttempt(evt, false);
276
+ };
277
+ getInternalContent() {
278
+ const {
279
+ trapFocus,
280
+ autoFocusFirst,
281
+ children
282
+ } = this.props;
283
+ return trapFocus ? /*#__PURE__*/React.createElement(TabTrap, {
284
+ autoFocusFirst: autoFocusFirst,
285
+ focusBackOnExit: true
286
+ }, children) : children;
287
+ }
288
+ shortcutsScope = this.uid;
289
+ shortcutsMap = {
290
+ esc: this._onEscPress
291
+ };
292
+ render() {
293
+ const {
294
+ className,
295
+ style,
296
+ hidden,
297
+ attached,
298
+ keepMounted,
299
+ client,
300
+ onMouseDown,
301
+ onMouseUp,
302
+ onMouseOver,
303
+ onMouseOut,
304
+ onContextMenu,
305
+ 'data-test': dataTest
306
+ } = this.props;
307
+ const showing = this.state.display === Display.SHOWING;
308
+ const classes = classNames(className, modules_2f69e2e2.popup, {
309
+ [modules_2f69e2e2.attached]: attached,
310
+ [modules_2f69e2e2.hidden]: hidden,
311
+ [modules_2f69e2e2.showing]: showing
312
+ });
313
+ const direction = (this.state.direction || '').toLowerCase().replace(/[_]/g, '-');
314
+ return /*#__PURE__*/React.createElement(PopupTargetContext.Consumer, null, value => {
315
+ this.ringPopupTarget = value;
316
+ return /*#__PURE__*/React.createElement("span", {
317
+ // prevent bubbling through portal
318
+ onClick: stop
319
+ // This handler only blocks bubbling through React portal
320
+ ,
321
+ role: "presentation",
322
+ ref: this.portalRef
323
+ }, this.shouldUseShortcuts() && /*#__PURE__*/React.createElement(Shortcuts, {
324
+ map: this.shortcutsMap,
325
+ scope: this.shortcutsScope
326
+ }), (client || this.state.client) && (keepMounted || !hidden) && /*#__PURE__*/createPortal( /*#__PURE__*/React.createElement(PopupTarget, {
327
+ id: this.uid,
328
+ ref: this.containerRef,
329
+ onMouseOver: onMouseOver,
330
+ onFocus: onMouseOver,
331
+ onMouseOut: onMouseOut,
332
+ onBlur: onMouseOut,
333
+ onContextMenu: onContextMenu
334
+ }, /*#__PURE__*/React.createElement("div", {
335
+ "data-test": joinDataTestAttributes('ring-popup', dataTest),
336
+ "data-test-shown": !hidden && !showing,
337
+ "data-test-direction": direction,
338
+ ref: this.popupRef,
339
+ className: classes,
340
+ style: style,
341
+ onMouseDown: onMouseDown,
342
+ onMouseUp: onMouseUp
343
+ // mouse handlers are used to track clicking on inner elements
344
+ ,
345
+ role: "presentation"
346
+ }, this.getInternalContent())), this.getContainer() || document.body));
347
+ });
348
+ }
349
+ }
409
350
  Popup.propTypes = {
410
351
  anchorElement: PropTypes.instanceOf(Node),
411
352
  target: PropTypes.oneOfType([PropTypes.string, PropTypes.instanceOf(Element)]),