@jetbrains/ring-ui 4.1.1 → 4.1.2

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 (314) hide show
  1. package/dist/_helpers/_rollupPluginBabelHelpers.js +34 -0
  2. package/dist/_helpers/anchor.js +32 -0
  3. package/dist/_helpers/badge.js +3 -0
  4. package/dist/_helpers/button-group.js +3 -0
  5. package/dist/_helpers/button-set.js +3 -0
  6. package/dist/_helpers/button-toolbar.js +3 -0
  7. package/dist/_helpers/button__classes.js +39 -0
  8. package/dist/_helpers/card.js +75 -0
  9. package/dist/_helpers/checkbox.js +3 -0
  10. package/dist/_helpers/date-picker.js +3 -0
  11. package/dist/_helpers/dialog__body-scroll-preventer.js +57 -0
  12. package/dist/_helpers/error-message.js +3 -0
  13. package/dist/_helpers/footer.js +121 -0
  14. package/dist/_helpers/grid.js +3 -0
  15. package/dist/_helpers/group.js +3 -0
  16. package/dist/_helpers/header.js +3 -0
  17. package/dist/_helpers/icon.js +3 -0
  18. package/dist/_helpers/inject-styles.js +22 -0
  19. package/dist/_helpers/input.js +3 -0
  20. package/dist/_helpers/island.js +3 -0
  21. package/dist/_helpers/link.js +3 -0
  22. package/dist/_helpers/list.js +3 -0
  23. package/dist/_helpers/loader-screen.js +3 -0
  24. package/dist/_helpers/panel.js +3 -0
  25. package/dist/_helpers/query-assist__suggestions.js +95 -0
  26. package/dist/_helpers/radio.js +3 -0
  27. package/dist/_helpers/select__filter.js +76 -0
  28. package/dist/_helpers/services-link.js +40 -0
  29. package/dist/_helpers/sidebar.js +125 -0
  30. package/dist/_helpers/table.js +3 -0
  31. package/dist/_helpers/tabs.js +3 -0
  32. package/dist/_helpers/title.js +99 -0
  33. package/dist/alert/alert.js +260 -0
  34. package/dist/alert/container.js +48 -0
  35. package/dist/alert-service/alert-service.js +170 -0
  36. package/dist/analytics/analytics.js +116 -0
  37. package/dist/analytics/analytics__custom-plugin.js +127 -0
  38. package/dist/analytics/analytics__fus-plugin.js +101 -0
  39. package/dist/analytics/analytics__ga-plugin.js +66 -0
  40. package/dist/analytics/analytics__plugin-utils.js +79 -0
  41. package/dist/analytics-ng/analytics-ng.js +94 -0
  42. package/dist/auth/auth.js +93 -0
  43. package/dist/auth/auth__core.js +1025 -0
  44. package/dist/auth/background-flow.js +122 -0
  45. package/dist/auth/down-notification.js +114 -0
  46. package/dist/auth/iframe-flow.js +150 -0
  47. package/dist/auth/landing-entry.js +5 -0
  48. package/dist/auth/landing.js +87 -0
  49. package/dist/auth/request-builder.js +75 -0
  50. package/dist/auth/response-parser.js +117 -0
  51. package/dist/auth/storage.js +280 -0
  52. package/dist/auth/token-validator.js +176 -0
  53. package/dist/auth/window-flow.js +133 -0
  54. package/dist/auth-dialog/auth-dialog.js +134 -0
  55. package/dist/auth-dialog-service/auth-dialog-service.js +68 -0
  56. package/dist/auth-ng/auth-ng.js +203 -0
  57. package/dist/auth-ng/auth-ng.mock.js +33 -0
  58. package/dist/autofocus-ng/autofocus-ng.js +50 -0
  59. package/dist/avatar/avatar-example-datauri.js +26 -0
  60. package/dist/avatar/avatar.js +161 -0
  61. package/dist/avatar/fallback-avatar.js +141 -0
  62. package/dist/avatar-editor-ng/avatar-editor-ng.js +164 -0
  63. package/dist/avatar-editor-ng/avatar-editor-ng__template.js +30 -0
  64. package/dist/avatar-ng/avatar-ng.js +18 -0
  65. package/dist/badge/badge.js +50 -0
  66. package/dist/badge-ng/badge-ng.js +16 -0
  67. package/dist/breadcrumb-ng/breadcrumb-ng.js +61 -0
  68. package/dist/button/button.js +123 -0
  69. package/dist/button/button__classes.js +5 -0
  70. package/dist/button-group/button-group.js +30 -0
  71. package/dist/button-group/caption.js +24 -0
  72. package/dist/button-group-ng/button-group-ng.js +38 -0
  73. package/dist/button-ng/button-ng.js +223 -0
  74. package/dist/button-set/button-set.js +26 -0
  75. package/dist/button-set-ng/button-set-ng.js +19 -0
  76. package/dist/button-toolbar/button-toolbar.js +29 -0
  77. package/dist/button-toolbar-ng/button-toolbar-ng.js +23 -0
  78. package/dist/caret/caret.js +264 -0
  79. package/dist/checkbox/checkbox.js +108 -0
  80. package/dist/checkbox-ng/checkbox-ng.js +55 -0
  81. package/dist/code/code.js +136 -0
  82. package/dist/compiler-ng/compiler-ng.js +53 -0
  83. package/dist/confirm/confirm.js +125 -0
  84. package/dist/confirm-ng/confirm-ng.js +66 -0
  85. package/dist/confirm-service/confirm-service.js +114 -0
  86. package/dist/content-layout/content-layout.js +65 -0
  87. package/dist/content-layout/sidebar.js +6 -0
  88. package/dist/contenteditable/contenteditable.js +78 -0
  89. package/dist/data-list/data-list.js +206 -0
  90. package/dist/data-list/data-list.mock.js +190 -0
  91. package/dist/data-list/item.js +227 -0
  92. package/dist/data-list/selection.js +101 -0
  93. package/dist/data-list/title.js +18 -0
  94. package/dist/data-list-ng/data-list-ng.js +59 -0
  95. package/dist/date-picker/consts.js +69 -0
  96. package/dist/date-picker/date-input.js +173 -0
  97. package/dist/date-picker/date-picker.js +365 -0
  98. package/dist/date-picker/date-popup.js +482 -0
  99. package/dist/date-picker/day.js +119 -0
  100. package/dist/date-picker/formats.js +3 -0
  101. package/dist/date-picker/month-names.js +99 -0
  102. package/dist/date-picker/month-slider.js +83 -0
  103. package/dist/date-picker/month.js +54 -0
  104. package/dist/date-picker/months.js +121 -0
  105. package/dist/date-picker/weekdays.js +32 -0
  106. package/dist/date-picker/years.js +109 -0
  107. package/dist/dialog/dialog.js +200 -0
  108. package/dist/dialog/dialog__body-scroll-preventer.js +2 -0
  109. package/dist/dialog-ng/dialog-ng.js +601 -0
  110. package/dist/dialog-ng/dialog-ng__template.js +71 -0
  111. package/dist/docked-panel-ng/docked-panel-ng.js +170 -0
  112. package/dist/dropdown/anchor.js +17 -0
  113. package/dist/dropdown/dropdown.js +234 -0
  114. package/dist/dropdown-menu/dropdown-menu.js +175 -0
  115. package/dist/error-bubble/error-bubble.js +57 -0
  116. package/dist/error-message/error-message.js +55 -0
  117. package/dist/error-message-ng/error-message-ng.js +53 -0
  118. package/dist/footer/footer.js +11 -0
  119. package/dist/footer-ng/footer-ng.js +75 -0
  120. package/dist/form-ng/form-ng.js +169 -0
  121. package/dist/global/angular-component-factory.js +82 -0
  122. package/dist/global/compose.js +9 -0
  123. package/dist/global/composeRefs.js +15 -0
  124. package/dist/global/conic-gradient.js +35 -0
  125. package/dist/global/create-stateful-context.js +54 -0
  126. package/dist/global/data-tests.js +22 -0
  127. package/dist/global/dom.js +124 -0
  128. package/dist/global/focus-sensor-hoc.js +145 -0
  129. package/dist/global/fuzzy-highlight.js +67 -0
  130. package/dist/global/get-event-key.js +111 -0
  131. package/dist/global/get-uid.js +15 -0
  132. package/dist/global/inject-styles.js +17 -0
  133. package/dist/global/linear-function.js +17 -0
  134. package/dist/global/listeners.js +42 -0
  135. package/dist/global/memoize.js +18 -0
  136. package/dist/global/normalize-indent.js +28 -0
  137. package/dist/global/promise-with-timeout.js +13 -0
  138. package/dist/global/radial-gradient-mask.js +49 -0
  139. package/dist/global/react-dom-renderer.js +45 -0
  140. package/dist/global/rerender-hoc.js +51 -0
  141. package/dist/global/ring-angular-component.js +24 -0
  142. package/dist/global/schedule-raf.js +31 -0
  143. package/dist/global/sniffer.js +6 -0
  144. package/dist/global/supports-css.js +20 -0
  145. package/dist/global/theme.js +54 -0
  146. package/dist/global/trivial-template-tag.js +15 -0
  147. package/dist/global/url.js +163 -0
  148. package/dist/global/variables_dark.js +57 -0
  149. package/dist/grid/col.js +60 -0
  150. package/dist/grid/grid.js +33 -0
  151. package/dist/grid/row.js +64 -0
  152. package/dist/group/group.js +31 -0
  153. package/dist/group-ng/group-ng.js +11 -0
  154. package/dist/header/header.js +147 -0
  155. package/dist/header/logo.js +38 -0
  156. package/dist/header/profile.js +217 -0
  157. package/dist/header/services-link.js +11 -0
  158. package/dist/header/services.js +136 -0
  159. package/dist/header/smart-profile.js +230 -0
  160. package/dist/header/smart-services.js +160 -0
  161. package/dist/header/tray-icon.js +45 -0
  162. package/dist/header/tray.js +31 -0
  163. package/dist/heading/heading.js +73 -0
  164. package/dist/http/http.js +216 -0
  165. package/dist/http/http.mock.js +65 -0
  166. package/dist/hub-source/hub-source.js +130 -0
  167. package/dist/hub-source/hub-source__user.js +28 -0
  168. package/dist/hub-source/hub-source__users-groups.js +62 -0
  169. package/dist/icon/icon.js +105 -0
  170. package/dist/icon/icon__constants.js +33 -0
  171. package/dist/icon/icon__svg.js +81 -0
  172. package/dist/icon/index.js +10 -0
  173. package/dist/icon-ng/icon-ng.js +89 -0
  174. package/dist/input/input.js +228 -0
  175. package/dist/input-ng/input-ng.js +166 -0
  176. package/dist/island/adaptive-island-hoc.js +47 -0
  177. package/dist/island/content.js +156 -0
  178. package/dist/island/header.js +83 -0
  179. package/dist/island/island.js +50 -0
  180. package/dist/island-legacy/content-legacy.js +26 -0
  181. package/dist/island-legacy/header-legacy.js +28 -0
  182. package/dist/island-legacy/island-legacy.js +28 -0
  183. package/dist/island-ng/island-content-ng.js +56 -0
  184. package/dist/island-ng/island-header-ng.js +32 -0
  185. package/dist/island-ng/island-ng-class-fixer.js +9 -0
  186. package/dist/island-ng/island-ng.js +31 -0
  187. package/dist/link/clickableLink.js +63 -0
  188. package/dist/link/link.js +114 -0
  189. package/dist/link-ng/link-ng.js +25 -0
  190. package/dist/list/consts.js +26 -0
  191. package/dist/list/list.js +812 -0
  192. package/dist/list/list__custom.js +85 -0
  193. package/dist/list/list__hint.js +26 -0
  194. package/dist/list/list__item.js +204 -0
  195. package/dist/list/list__link.js +64 -0
  196. package/dist/list/list__separator.js +30 -0
  197. package/dist/list/list__title.js +39 -0
  198. package/dist/list/list__users-groups-source.js +128 -0
  199. package/dist/loader/loader.js +70 -0
  200. package/dist/loader/loader__core.js +272 -0
  201. package/dist/loader-inline/inject-styles.js +11 -0
  202. package/dist/loader-inline/loader-inline.js +56 -0
  203. package/dist/loader-inline-ng/loader-inline-ng.js +42 -0
  204. package/dist/loader-ng/loader-ng.js +43 -0
  205. package/dist/loader-screen/loader-screen.js +43 -0
  206. package/dist/loader-screen-ng/loader-screen-ng.js +99 -0
  207. package/dist/login-dialog/login-dialog.js +186 -0
  208. package/dist/login-dialog/service.js +69 -0
  209. package/dist/markdown/code.js +30 -0
  210. package/dist/markdown/heading.js +23 -0
  211. package/dist/markdown/link.js +30 -0
  212. package/dist/markdown/markdown.js +73 -0
  213. package/dist/message/message.js +233 -0
  214. package/dist/message-bundle-ng/message-bundle-ng.js +111 -0
  215. package/dist/old-browsers-message/old-browsers-message.js +100 -0
  216. package/dist/old-browsers-message/old-browsers-message__stop.js +4 -0
  217. package/dist/old-browsers-message/white-list.js +33 -0
  218. package/dist/pager/pager.js +361 -0
  219. package/dist/pager-ng/pager-ng.js +96 -0
  220. package/dist/panel/panel.js +31 -0
  221. package/dist/panel-ng/panel-ng.js +16 -0
  222. package/dist/permissions/permissions.js +200 -0
  223. package/dist/permissions/permissions__cache.js +272 -0
  224. package/dist/permissions-ng/permissions-ng.js +274 -0
  225. package/dist/place-under-ng/place-under-ng.js +157 -0
  226. package/dist/popup/popup.consts.js +41 -0
  227. package/dist/popup/popup.js +389 -0
  228. package/dist/popup/popup.target.js +26 -0
  229. package/dist/popup/position.js +279 -0
  230. package/dist/popup-menu/popup-menu.js +115 -0
  231. package/dist/progress-bar/progress-bar.js +113 -0
  232. package/dist/progress-bar-ng/progress-bar-ng.js +15 -0
  233. package/dist/promised-click-ng/promised-click-ng.js +126 -0
  234. package/dist/proxy-attrs/proxy-attrs.js +19 -0
  235. package/dist/query-assist/query-assist.js +1092 -0
  236. package/dist/query-assist/query-assist__suggestions.js +47 -0
  237. package/dist/query-assist-ng/query-assist-ng.js +82 -0
  238. package/dist/radio/radio.js +41 -0
  239. package/dist/radio/radio__item.js +77 -0
  240. package/dist/radio-ng/radio-ng.js +63 -0
  241. package/dist/save-field-ng/save-field-ng.js +335 -0
  242. package/dist/save-field-ng/save-field-ng__template.js +34 -0
  243. package/dist/select/select.js +1336 -0
  244. package/dist/select/select__filter.js +54 -0
  245. package/dist/select/select__popup.js +546 -0
  246. package/dist/select-ng/select-ng.js +621 -0
  247. package/dist/select-ng/select-ng__lazy.js +150 -0
  248. package/dist/select-ng/select-ng__options.js +145 -0
  249. package/dist/shortcuts/core.js +245 -0
  250. package/dist/shortcuts/shortcut-title.js +51 -0
  251. package/dist/shortcuts/shortcuts-hoc.js +41 -0
  252. package/dist/shortcuts/shortcuts.js +72 -0
  253. package/dist/shortcuts-hint-ng/shortcuts-hint-ng.js +120 -0
  254. package/dist/shortcuts-hint-ng/shortcuts-hint-ng__template.js +50 -0
  255. package/dist/shortcuts-ng/shortcuts-ng.js +261 -0
  256. package/dist/sidebar-ng/sidebar-ng.js +111 -0
  257. package/dist/sidebar-ng/sidebar-ng__button-template.js +20 -0
  258. package/dist/sidebar-ng/sidebar-ng__template.js +12 -0
  259. package/dist/storage/storage.js +56 -0
  260. package/dist/storage/storage__fallback.js +214 -0
  261. package/dist/storage/storage__local.js +151 -0
  262. package/dist/style.css +1 -0
  263. package/dist/tab-trap/tab-trap.js +176 -0
  264. package/dist/table/cell.js +25 -0
  265. package/dist/table/disable-hover-hoc.js +53 -0
  266. package/dist/table/header-cell.js +90 -0
  267. package/dist/table/header.js +191 -0
  268. package/dist/table/multitable.js +140 -0
  269. package/dist/table/row-with-focus-sensor.js +81 -0
  270. package/dist/table/row.js +271 -0
  271. package/dist/table/selection-adapter.js +14 -0
  272. package/dist/table/selection-shortcuts-hoc.js +214 -0
  273. package/dist/table/selection.js +221 -0
  274. package/dist/table/smart-table.js +119 -0
  275. package/dist/table/table.js +404 -0
  276. package/dist/table-legacy-ng/table-legacy-ng.js +501 -0
  277. package/dist/table-legacy-ng/table-legacy-ng__pager.js +122 -0
  278. package/dist/table-legacy-ng/table-legacy-ng__selection-navigate-actions.js +123 -0
  279. package/dist/table-legacy-ng/table-legacy-ng__selection.js +179 -0
  280. package/dist/table-legacy-ng/table-legacy-ng__toolbar.js +56 -0
  281. package/dist/table-ng/smart-table-ng.js +65 -0
  282. package/dist/table-ng/table-ng.js +64 -0
  283. package/dist/tabs/collapsible-more.js +196 -0
  284. package/dist/tabs/collapsible-tab.js +90 -0
  285. package/dist/tabs/collapsible-tabs.js +360 -0
  286. package/dist/tabs/custom-item.js +13 -0
  287. package/dist/tabs/dumb-tabs.js +161 -0
  288. package/dist/tabs/smart-tabs.js +104 -0
  289. package/dist/tabs/tab-link.js +41 -0
  290. package/dist/tabs/tab.js +32 -0
  291. package/dist/tabs/tabs.js +69 -0
  292. package/dist/tabs-ng/tabs-ng.js +193 -0
  293. package/dist/tabs-ng/tabs-ng__template.js +40 -0
  294. package/dist/tag/tag.js +196 -0
  295. package/dist/tags-input/tags-input.js +478 -0
  296. package/dist/tags-input-ng/tags-input-ng.js +89 -0
  297. package/dist/tags-list/tags-list.js +93 -0
  298. package/dist/template-ng/template-ng.js +70 -0
  299. package/dist/text/text.js +36 -0
  300. package/dist/theme-ng/theme-ng.js +44 -0
  301. package/dist/title-ng/title-ng.js +114 -0
  302. package/dist/toggle/toggle.js +77 -0
  303. package/dist/toggle-ng/toggle-ng.js +16 -0
  304. package/dist/tooltip/tooltip.js +207 -0
  305. package/dist/tooltip-ng/tooltip-ng.js +98 -0
  306. package/dist/user-agreement/service.js +409 -0
  307. package/dist/user-agreement/toolbox.eula.js +162 -0
  308. package/dist/user-agreement/user-agreement.js +167 -0
  309. package/dist/user-card/card.js +17 -0
  310. package/dist/user-card/smart-user-card-tooltip.js +112 -0
  311. package/dist/user-card/tooltip.js +93 -0
  312. package/dist/user-card/user-card.js +49 -0
  313. package/dist/user-card-ng/user-card-ng.js +59 -0
  314. package/package.json +2 -2
@@ -0,0 +1,812 @@
1
+ import { _ as _defineProperty } from '../_helpers/_rollupPluginBabelHelpers.js';
2
+ import React, { Component, cloneElement } from 'react';
3
+ import PropTypes from 'prop-types';
4
+ import classNames from 'classnames';
5
+ import VirtualizedList from 'react-virtualized/dist/es/List';
6
+ import AutoSizer from 'react-virtualized/dist/es/AutoSizer';
7
+ import WindowScroller from 'react-virtualized/dist/es/WindowScroller';
8
+ import { CellMeasurerCache, CellMeasurer } from 'react-virtualized/dist/es/CellMeasurer';
9
+ import deprecate from 'util-deprecate';
10
+ import memoizeOne from 'memoize-one';
11
+ import joinDataTestAttributes from '../global/data-tests.js';
12
+ import getUID from '../global/get-uid.js';
13
+ import scheduleRAF from '../global/schedule-raf.js';
14
+ import memoize from '../global/memoize.js';
15
+ import { preventDefault } from '../global/dom.js';
16
+ import Shortcuts from '../shortcuts/shortcuts.js';
17
+ import createStatefulContext from '../global/create-stateful-context.js';
18
+ import ListLink from './list__link.js';
19
+ import ListItem from './list__item.js';
20
+ import ListCustom from './list__custom.js';
21
+ import ListTitle from './list__title.js';
22
+ import ListSeparator from './list__separator.js';
23
+ import ListHint from './list__hint.js';
24
+ import { Type, Dimension, DEFAULT_ITEM_TYPE } from './consts.js';
25
+ import { m as modules_3b67a421 } from '../_helpers/list.js';
26
+ import '../shortcuts/core.js';
27
+ import 'combokeys';
28
+ import '../global/sniffer.js';
29
+ import 'sniffr';
30
+ import '../link/link.js';
31
+ import 'focus-visible';
32
+ import '../link/clickableLink.js';
33
+ import '../_helpers/link.js';
34
+ import '../avatar/avatar.js';
35
+ import '../global/url.js';
36
+ import '../avatar/fallback-avatar.js';
37
+ import '../checkbox/checkbox.js';
38
+ import '@jetbrains/icons/checkmark';
39
+ import '@jetbrains/icons/remove-10px';
40
+ import '../icon/icon.js';
41
+ import '../icon/icon__constants.js';
42
+ import '../_helpers/icon.js';
43
+ import '../icon/icon__svg.js';
44
+ import '../_helpers/checkbox.js';
45
+ import '../global/get-event-key.js';
46
+
47
+ const scheduleScrollListener = scheduleRAF();
48
+ const scheduleHoverListener = scheduleRAF();
49
+
50
+ function noop() {}
51
+
52
+ const warnEmptyKey = deprecate(() => {}, 'No key passed for list item with non-string label. It is considered as a bad practice and has been deprecated, please provide a key.');
53
+ /**
54
+ * @param {Type} listItemType
55
+ * @param {Object} item list item
56
+ */
57
+
58
+ function isItemType(listItemType, item) {
59
+ let type = item.rgItemType;
60
+
61
+ if (type == null) {
62
+ type = DEFAULT_ITEM_TYPE;
63
+ }
64
+
65
+ return type === listItemType;
66
+ }
67
+
68
+ const nonActivatableTypes = [Type.SEPARATOR, Type.TITLE, Type.MARGIN];
69
+
70
+ function isActivatable(item) {
71
+ return item != null && !nonActivatableTypes.includes(item.rgItemType) && !item.disabled;
72
+ }
73
+
74
+ const shouldActivateFirstItem = props => props.activateFirstItem || props.activateSingleItem && props.data.length === 1;
75
+
76
+ const ActiveItemContext = createStatefulContext(undefined, 'ActiveItem');
77
+ /**
78
+ * @name List
79
+ * @constructor
80
+ * @extends {ReactComponent}
81
+ */
82
+
83
+ /**
84
+ * Displays a list of items.
85
+ */
86
+
87
+ class List extends Component {
88
+ constructor() {
89
+ var _this;
90
+
91
+ super(...arguments);
92
+ _this = this;
93
+
94
+ _defineProperty(this, "state", {
95
+ activeIndex: null,
96
+ prevActiveIndex: null,
97
+ prevData: [],
98
+ activeItem: null,
99
+ needScrollToActive: false,
100
+ scrolling: false,
101
+ hasOverflow: false,
102
+ disabledHover: false,
103
+ scrolledToBottom: false
104
+ });
105
+
106
+ _defineProperty(this, "hoverHandler", memoize(index => () => scheduleHoverListener(() => {
107
+ if (this.state.disabledHover) {
108
+ return;
109
+ }
110
+
111
+ if (this.container) {
112
+ this.setState({
113
+ activeIndex: index,
114
+ activeItem: this.props.data[index],
115
+ needScrollToActive: false
116
+ });
117
+ }
118
+ })));
119
+
120
+ _defineProperty(this, "_activatableItems", false);
121
+
122
+ _defineProperty(this, "_bufferSize", 10);
123
+
124
+ _defineProperty(this, "sizeCacheKey", index => {
125
+ if (index === 0 || index === this.props.data.length + 1) {
126
+ return Type.MARGIN;
127
+ }
128
+
129
+ const item = this.props.data[index - 1];
130
+ const isFirst = index === 1;
131
+
132
+ switch (item.rgItemType) {
133
+ case Type.SEPARATOR:
134
+ case Type.TITLE:
135
+ return `${item.rgItemType}${isFirst ? '_first' : ''}${item.description ? '_desc' : ''}`;
136
+
137
+ case Type.MARGIN:
138
+ return Type.MARGIN;
139
+
140
+ case Type.CUSTOM:
141
+ return `${Type.CUSTOM}_${item.key}`;
142
+
143
+ case Type.ITEM:
144
+ case Type.LINK:
145
+ default:
146
+ if (item.details) {
147
+ return `${Type.ITEM}_${item.details}`;
148
+ }
149
+
150
+ return Type.ITEM;
151
+ }
152
+ });
153
+
154
+ _defineProperty(this, "_cache", new CellMeasurerCache({
155
+ defaultHeight: this.defaultItemHeight(),
156
+ fixedWidth: true,
157
+ keyMapper: this.sizeCacheKey
158
+ }));
159
+
160
+ _defineProperty(this, "_hasActivatableItems", memoizeOne(items => items.some(isActivatable)));
161
+
162
+ _defineProperty(this, "selectHandler", memoize(index => function (event) {
163
+ let tryKeepOpen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
164
+ const item = _this.props.data[index];
165
+
166
+ if (!_this.props.useMouseUp && item.onClick) {
167
+ item.onClick(item, event);
168
+ } else if (_this.props.useMouseUp && item.onMouseUp) {
169
+ item.onMouseUp(item, event);
170
+ }
171
+
172
+ if (_this.props.onSelect) {
173
+ _this.props.onSelect(item, event, {
174
+ tryKeepOpen
175
+ });
176
+ }
177
+ }));
178
+
179
+ _defineProperty(this, "checkboxHandler", memoize(index => event => this.selectHandler(index)(event, true)));
180
+
181
+ _defineProperty(this, "upHandler", e => {
182
+ const {
183
+ data,
184
+ disableMoveOverflow
185
+ } = this.props;
186
+ const index = this.state.activeIndex;
187
+ let newIndex;
188
+
189
+ if (index === null || index === 0) {
190
+ if (!disableMoveOverflow) {
191
+ newIndex = data.length - 1;
192
+ } else {
193
+ return;
194
+ }
195
+ } else {
196
+ newIndex = index - 1;
197
+ }
198
+
199
+ this.moveHandler(newIndex, this.upHandler, e);
200
+ });
201
+
202
+ _defineProperty(this, "downHandler", e => {
203
+ const {
204
+ data,
205
+ disableMoveOverflow,
206
+ disableMoveDownOverflow
207
+ } = this.props;
208
+ const index = this.state.activeIndex;
209
+ let newIndex;
210
+
211
+ if (index === null) {
212
+ newIndex = 0;
213
+ } else if (index + 1 === data.length) {
214
+ if (!disableMoveOverflow && !disableMoveDownOverflow) {
215
+ newIndex = 0;
216
+ } else {
217
+ return;
218
+ }
219
+ } else {
220
+ newIndex = index + 1;
221
+ }
222
+
223
+ this.moveHandler(newIndex, this.downHandler, e);
224
+ });
225
+
226
+ _defineProperty(this, "homeHandler", e => {
227
+ this.moveHandler(0, this.downHandler, e);
228
+ });
229
+
230
+ _defineProperty(this, "endHandler", e => {
231
+ this.moveHandler(this.props.data.length - 1, this.upHandler, e);
232
+ });
233
+
234
+ _defineProperty(this, "onDocumentMouseMove", () => {
235
+ if (this.state.disabledHover) {
236
+ this.setState({
237
+ disabledHover: false
238
+ });
239
+ }
240
+ });
241
+
242
+ _defineProperty(this, "onDocumentKeyDown", e => {
243
+ const metaKeys = [16, 17, 18, 19, 20, 91]; // eslint-disable-line no-magic-numbers
244
+
245
+ if (!this.state.disabledHover && !metaKeys.includes(e.keyCode)) {
246
+ this.setState({
247
+ disabledHover: true
248
+ });
249
+ }
250
+ });
251
+
252
+ _defineProperty(this, "mouseHandler", () => {
253
+ this.setState({
254
+ scrolling: false
255
+ });
256
+ });
257
+
258
+ _defineProperty(this, "scrollHandler", () => {
259
+ this.setState({
260
+ scrolling: true
261
+ }, this.scrollEndHandler);
262
+ });
263
+
264
+ _defineProperty(this, "enterHandler", (event, shortcut) => {
265
+ if (this.state.activeIndex !== null) {
266
+ const item = this.props.data[this.state.activeIndex];
267
+ this.selectHandler(this.state.activeIndex)(event);
268
+
269
+ if (item.href && !event.defaultPrevented) {
270
+ if (['command+enter', 'ctrl+enter'].includes(shortcut)) {
271
+ window.open(item.href, '_blank');
272
+ } else if (shortcut === 'shift+enter') {
273
+ window.open(item.href);
274
+ } else {
275
+ window.location.href = item.href;
276
+ }
277
+ }
278
+
279
+ return false; // do not propagate event
280
+ } else {
281
+ return true; // propagate event to the parent component (e.g., QueryAssist)
282
+ }
283
+ });
284
+
285
+ _defineProperty(this, "clearSelected", () => {
286
+ this.setState({
287
+ activeIndex: null,
288
+ needScrollToActive: false
289
+ });
290
+ });
291
+
292
+ _defineProperty(this, "scrollEndHandler", () => scheduleScrollListener(() => {
293
+ const innerContainer = this.inner;
294
+
295
+ if (innerContainer) {
296
+ const maxScrollingPosition = innerContainer.scrollHeight;
297
+ const sensitivity = this.defaultItemHeight() / 2;
298
+ const currentScrollingPosition = innerContainer.scrollTop + innerContainer.clientHeight + sensitivity;
299
+ const scrolledToBottom = maxScrollingPosition > 0 && currentScrollingPosition >= maxScrollingPosition;
300
+
301
+ if (!this.unmounted) {
302
+ this.setState({
303
+ scrolledToBottom
304
+ });
305
+ }
306
+
307
+ if (scrolledToBottom) {
308
+ this.props.onScrollToBottom();
309
+ }
310
+ }
311
+ }));
312
+
313
+ _defineProperty(this, "checkOverflow", () => {
314
+ if (this.inner) {
315
+ this.setState({
316
+ hasOverflow: this.inner.scrollHeight - this.inner.clientHeight > 1
317
+ });
318
+ }
319
+ });
320
+
321
+ _defineProperty(this, "renderItem", _ref => {
322
+ let {
323
+ index,
324
+ style,
325
+ isScrolling,
326
+ parent,
327
+ key
328
+ } = _ref;
329
+ let itemKey;
330
+ let el;
331
+ const realIndex = index - 1;
332
+ const item = this.props.data[realIndex];
333
+ const itemId = this.getId(item); // top and bottom margins
334
+
335
+ if (index === 0 || index === this.props.data.length + 1 || item.rgItemType === Type.MARGIN) {
336
+ itemKey = key || `${Type.MARGIN}_${index}`;
337
+ el = /*#__PURE__*/React.createElement("div", {
338
+ style: {
339
+ height: Dimension.MARGIN
340
+ }
341
+ });
342
+ } else {
343
+ // Hack around SelectNG implementation
344
+ const {
345
+ selectedLabel,
346
+ originalModel,
347
+ ...cleanedProps
348
+ } = item;
349
+ const itemProps = Object.assign({
350
+ rgItemType: DEFAULT_ITEM_TYPE
351
+ }, cleanedProps);
352
+
353
+ if (itemProps.url) {
354
+ itemProps.href = itemProps.url;
355
+ }
356
+
357
+ if (itemProps.href) {
358
+ itemProps.rgItemType = Type.LINK;
359
+ }
360
+
361
+ itemKey = key || itemId;
362
+ itemProps.hover = realIndex === this.state.activeIndex;
363
+
364
+ if (itemProps.hoverClassName != null && itemProps.hover) {
365
+ itemProps.className = classNames(itemProps.className, itemProps.hoverClassName);
366
+ }
367
+
368
+ itemProps.onMouseOver = this.hoverHandler(realIndex);
369
+ itemProps.tabIndex = -1;
370
+ itemProps.scrolling = isScrolling;
371
+ const selectHandler = this.selectHandler(realIndex);
372
+
373
+ if (this.props.useMouseUp) {
374
+ itemProps.onMouseUp = selectHandler;
375
+ } else {
376
+ itemProps.onClick = selectHandler;
377
+ }
378
+
379
+ itemProps.onCheckboxChange = this.checkboxHandler(realIndex);
380
+
381
+ if (itemProps.compact == null) {
382
+ itemProps.compact = this.props.compact;
383
+ }
384
+
385
+ let ItemComponent;
386
+ const isFirst = index === 1;
387
+
388
+ switch (itemProps.rgItemType) {
389
+ case Type.SEPARATOR:
390
+ ItemComponent = ListSeparator;
391
+ itemProps.isFirst = isFirst;
392
+ break;
393
+
394
+ case Type.LINK:
395
+ ItemComponent = ListLink;
396
+ this.addItemDataTestToProp(itemProps);
397
+ break;
398
+
399
+ case Type.ITEM:
400
+ ItemComponent = ListItem;
401
+ this.addItemDataTestToProp(itemProps);
402
+ break;
403
+
404
+ case Type.CUSTOM:
405
+ ItemComponent = ListCustom;
406
+ this.addItemDataTestToProp(itemProps);
407
+ break;
408
+
409
+ case Type.TITLE:
410
+ itemProps.isFirst = isFirst;
411
+ ItemComponent = ListTitle;
412
+ break;
413
+
414
+ default:
415
+ throw new Error(`Unknown menu element type: ${itemProps.rgItemType}`);
416
+ }
417
+
418
+ el = /*#__PURE__*/React.createElement(ItemComponent, itemProps);
419
+ }
420
+
421
+ return parent ? /*#__PURE__*/React.createElement(CellMeasurer, {
422
+ cache: this._cache,
423
+ key: itemKey,
424
+ parent: parent,
425
+ rowIndex: index,
426
+ columnIndex: 0
427
+ }, _ref2 => {
428
+ let {
429
+ registerChild
430
+ } = _ref2;
431
+ return /*#__PURE__*/React.createElement("div", {
432
+ ref: registerChild,
433
+ style: style,
434
+ role: "row",
435
+ id: itemId
436
+ }, /*#__PURE__*/React.createElement("div", {
437
+ role: "cell"
438
+ }, el));
439
+ }) : /*#__PURE__*/React.createElement("div", {
440
+ role: "row",
441
+ id: itemId,
442
+ key: itemKey
443
+ }, /*#__PURE__*/React.createElement("div", {
444
+ role: "cell"
445
+ }, /*#__PURE__*/cloneElement(el)));
446
+ });
447
+
448
+ _defineProperty(this, "addItemDataTestToProp", props => {
449
+ props['data-test'] = joinDataTestAttributes('ring-list-item', props['data-test']);
450
+ return props;
451
+ });
452
+
453
+ _defineProperty(this, "virtualizedListRef", el => {
454
+ this.virtualizedList = el;
455
+ });
456
+
457
+ _defineProperty(this, "containerRef", el => {
458
+ this.container = el;
459
+ });
460
+
461
+ _defineProperty(this, "id", getUID('list-'));
462
+
463
+ _defineProperty(this, "shortcutsScope", this.id);
464
+
465
+ _defineProperty(this, "shortcutsMap", {
466
+ up: this.upHandler,
467
+ down: this.downHandler,
468
+ home: this.homeHandler,
469
+ end: this.endHandler,
470
+ enter: this.enterHandler,
471
+ 'meta+enter': this.enterHandler,
472
+ 'ctrl+enter': this.enterHandler,
473
+ 'command+enter': this.enterHandler,
474
+ 'shift+enter': this.enterHandler
475
+ });
476
+ }
477
+
478
+ static getDerivedStateFromProps(nextProps, prevState) {
479
+ const {
480
+ prevActiveIndex,
481
+ prevData,
482
+ activeItem
483
+ } = prevState;
484
+ const {
485
+ data,
486
+ activeIndex,
487
+ restoreActiveIndex
488
+ } = nextProps;
489
+ const nextState = {
490
+ prevActiveIndex: activeIndex,
491
+ prevData: data
492
+ };
493
+
494
+ if (data !== prevData) {
495
+ Object.assign(nextState, {
496
+ activeIndex: null,
497
+ activeItem: null
498
+ });
499
+ }
500
+
501
+ if (activeIndex != null && activeIndex !== prevActiveIndex && data[activeIndex] != null) {
502
+ Object.assign(nextState, {
503
+ activeIndex,
504
+ activeItem: data[activeIndex],
505
+ needScrollToActive: true
506
+ });
507
+ } else if (data !== prevData && restoreActiveIndex && activeItem != null && activeItem.key != null) {
508
+ // Restore active index if there is an item with the same "key" property
509
+ const index = data.findIndex(item => item.key === activeItem.key);
510
+
511
+ if (index >= 0) {
512
+ Object.assign(nextState, {
513
+ activeIndex: index,
514
+ activeItem: data[index]
515
+ });
516
+ }
517
+ }
518
+
519
+ if (activeIndex == null && prevState.activeIndex == null && shouldActivateFirstItem(nextProps)) {
520
+ const firstActivatableIndex = data.findIndex(isActivatable);
521
+
522
+ if (firstActivatableIndex >= 0) {
523
+ Object.assign(nextState, {
524
+ activeIndex: firstActivatableIndex,
525
+ activeItem: data[firstActivatableIndex],
526
+ needScrollToActive: true
527
+ });
528
+ }
529
+ }
530
+
531
+ return nextState;
532
+ }
533
+
534
+ componentDidMount() {
535
+ document.addEventListener('mousemove', this.onDocumentMouseMove);
536
+ document.addEventListener('keydown', this.onDocumentKeyDown, true);
537
+ }
538
+
539
+ shouldComponentUpdate(nextProps, nextState) {
540
+ return nextProps !== this.props || Object.keys(nextState).some(key => nextState[key] !== this.state[key]);
541
+ }
542
+
543
+ componentDidUpdate(prevProps) {
544
+ if (this.virtualizedList && prevProps.data !== this.props.data) {
545
+ this.virtualizedList.recomputeRowHeights();
546
+ }
547
+
548
+ this.checkOverflow();
549
+ }
550
+
551
+ componentWillUnmount() {
552
+ this.unmounted = true;
553
+ document.removeEventListener('mousemove', this.onDocumentMouseMove);
554
+ document.removeEventListener('keydown', this.onDocumentKeyDown, true);
555
+ }
556
+
557
+ hasActivatableItems() {
558
+ return this._hasActivatableItems(this.props.data);
559
+ }
560
+
561
+ moveHandler(index, retryCallback, e) {
562
+ let correctedIndex;
563
+
564
+ if (this.props.data.length === 0 || !this.hasActivatableItems()) {
565
+ return;
566
+ } else if (this.props.data.length < index) {
567
+ correctedIndex = 0;
568
+ } else {
569
+ correctedIndex = index;
570
+ }
571
+
572
+ const item = this.props.data[correctedIndex];
573
+ this.setState({
574
+ activeIndex: correctedIndex,
575
+ activeItem: item,
576
+ needScrollToActive: true
577
+ }, function onSet() {
578
+ if (!isActivatable(item)) {
579
+ retryCallback(e);
580
+ return;
581
+ }
582
+
583
+ if (e.key !== 'Home' && e.key !== 'End') {
584
+ preventDefault(e);
585
+ }
586
+ });
587
+ }
588
+
589
+ getFirst() {
590
+ return this.props.data.find(item => item.rgItemType === Type.ITEM || item.rgItemType === Type.CUSTOM);
591
+ }
592
+
593
+ getSelected() {
594
+ return this.props.data[this.state.activeIndex];
595
+ }
596
+
597
+ defaultItemHeight() {
598
+ return this.props.compact ? Dimension.COMPACT_ITEM_HEIGHT : Dimension.ITEM_HEIGHT;
599
+ }
600
+
601
+ getVisibleListHeight(props) {
602
+ return props.maxHeight - this.defaultItemHeight() - Dimension.INNER_PADDING;
603
+ }
604
+
605
+ _deprecatedGenerateKeyFromContent(itemProps) {
606
+ const identificator = itemProps.label || itemProps.description;
607
+ const isString = typeof identificator === 'string' || identificator instanceof String;
608
+
609
+ if (identificator && !isString) {
610
+ warnEmptyKey();
611
+ `${itemProps.rgItemType}_${JSON.stringify(identificator)}`;
612
+ }
613
+
614
+ return `${itemProps.rgItemType}_${identificator}`;
615
+ }
616
+
617
+ getId(item) {
618
+ return item != null ? `${this.id}:${item.key || this._deprecatedGenerateKeyFromContent(item)}` : null;
619
+ }
620
+
621
+ get inner() {
622
+ if (!this._inner) {
623
+ this._inner = this.container && this.container.querySelector('.ring-list__i');
624
+ }
625
+
626
+ return this._inner;
627
+ }
628
+
629
+ renderVirtualizedInner(_ref3) {
630
+ let {
631
+ height,
632
+ maxHeight,
633
+ autoHeight = false,
634
+ rowCount,
635
+ isScrolling,
636
+ onChildScroll = noop,
637
+ scrollTop,
638
+ registerChild
639
+ } = _ref3;
640
+ const dirOverride = {
641
+ direction: 'auto'
642
+ }; // Virtualized sets "direction: ltr" by default https://github.com/bvaughn/react-virtualized/issues/457
643
+
644
+ return /*#__PURE__*/React.createElement(AutoSizer, {
645
+ disableHeight: true,
646
+ onResize: this.props.onResize
647
+ }, _ref4 => {
648
+ let {
649
+ width
650
+ } = _ref4;
651
+ return /*#__PURE__*/React.createElement("div", {
652
+ ref: registerChild
653
+ }, /*#__PURE__*/React.createElement(VirtualizedList, {
654
+ "aria-label": this.props.ariaLabel,
655
+ ref: this.virtualizedListRef,
656
+ className: "ring-list__i",
657
+ autoHeight: autoHeight,
658
+ style: maxHeight ? {
659
+ maxHeight,
660
+ height: 'auto',
661
+ ...dirOverride
662
+ } : dirOverride,
663
+ autoContainerWidth: true,
664
+ height: height,
665
+ width: width,
666
+ isScrolling: isScrolling,
667
+ onScroll: e => {
668
+ onChildScroll(e);
669
+ this.scrollEndHandler(e);
670
+ },
671
+ scrollTop: scrollTop,
672
+ rowCount: rowCount,
673
+ estimatedRowSize: this.defaultItemHeight(),
674
+ rowHeight: this._cache.rowHeight,
675
+ rowRenderer: this.renderItem,
676
+ overscanRowCount: this._bufferSize // ensure rerendering
677
+ ,
678
+ noop: () => {},
679
+ scrollToIndex: !this.props.disableScrollToActive && this.state.needScrollToActive && this.state.activeIndex != null ? this.state.activeIndex + 1 : undefined,
680
+ scrollToAlignment: "center",
681
+ deferredMeasurementCache: this._cache,
682
+ onRowsRendered: this.checkOverflow
683
+ }));
684
+ });
685
+ }
686
+
687
+ renderVirtualized(maxHeight, rowCount) {
688
+ if (maxHeight) {
689
+ return this.renderVirtualizedInner({
690
+ height: maxHeight,
691
+ maxHeight,
692
+ rowCount
693
+ });
694
+ }
695
+
696
+ return /*#__PURE__*/React.createElement(WindowScroller, null, props => this.renderVirtualizedInner({ ...props,
697
+ rowCount,
698
+ autoHeight: true
699
+ }));
700
+ }
701
+
702
+ renderSimple(maxHeight, rowCount) {
703
+ const items = [];
704
+
705
+ for (let index = 0; index < rowCount; index++) {
706
+ items.push(this.renderItem({
707
+ index,
708
+ isScrolling: this.state.scrolling
709
+ }));
710
+ }
711
+
712
+ return /*#__PURE__*/React.createElement("div", {
713
+ className: classNames('ring-list__i', modules_3b67a421.simpleInner),
714
+ onScroll: this.scrollHandler,
715
+ onMouseMove: this.mouseHandler
716
+ }, /*#__PURE__*/React.createElement("div", {
717
+ "aria-label": this.props.ariaLabel,
718
+ role: "grid",
719
+ style: maxHeight ? {
720
+ maxHeight: this.getVisibleListHeight(this.props)
721
+ } : null
722
+ }, items));
723
+ }
724
+
725
+ /** @override */
726
+ render() {
727
+ const hint = this.getSelected() && this.props.hintOnSelection || this.props.hint;
728
+ const fadeStyles = hint ? {
729
+ bottom: Dimension.ITEM_HEIGHT
730
+ } : null;
731
+ const rowCount = this.props.data.length + 2;
732
+ const maxHeight = this.props.maxHeight && this.getVisibleListHeight(this.props);
733
+ const classes = classNames(modules_3b67a421.list, this.props.className);
734
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ActiveItemContext.Updater, {
735
+ value: this.getId(this.state.activeItem),
736
+ skipUpdate: this.props.hidden || !isActivatable(this.state.activeItem)
737
+ }), /*#__PURE__*/React.createElement("div", {
738
+ id: this.props.id,
739
+ ref: this.containerRef,
740
+ className: classes,
741
+ onMouseOut: this.props.onMouseOut,
742
+ onBlur: this.props.onMouseOut,
743
+ onMouseLeave: this.clearSelected,
744
+ "data-test": "ring-list"
745
+ }, this.props.shortcuts && /*#__PURE__*/React.createElement(Shortcuts, {
746
+ map: this.shortcutsMap,
747
+ scope: this.shortcutsScope
748
+ }), this.props.renderOptimization ? this.renderVirtualized(maxHeight, rowCount) : this.renderSimple(maxHeight, rowCount), this.state.hasOverflow && !this.state.scrolledToBottom && /*#__PURE__*/React.createElement("div", {
749
+ className: modules_3b67a421.fade,
750
+ style: fadeStyles
751
+ }), hint && /*#__PURE__*/React.createElement(ListHint, {
752
+ label: hint
753
+ })));
754
+ }
755
+
756
+ }
757
+
758
+ _defineProperty(List, "propTypes", {
759
+ id: PropTypes.string,
760
+ className: PropTypes.string,
761
+ hint: PropTypes.node,
762
+ hintOnSelection: PropTypes.string,
763
+ data: PropTypes.array,
764
+ maxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
765
+ activeIndex: PropTypes.number,
766
+ restoreActiveIndex: PropTypes.bool,
767
+ activateSingleItem: PropTypes.bool,
768
+ activateFirstItem: PropTypes.bool,
769
+ shortcuts: PropTypes.bool,
770
+ onMouseOut: PropTypes.func,
771
+ onSelect: PropTypes.func,
772
+ onScrollToBottom: PropTypes.func,
773
+ onResize: PropTypes.func,
774
+ useMouseUp: PropTypes.bool,
775
+ visible: PropTypes.bool,
776
+ renderOptimization: PropTypes.bool,
777
+ disableMoveOverflow: PropTypes.bool,
778
+ disableMoveDownOverflow: PropTypes.bool,
779
+ compact: PropTypes.bool,
780
+ disableScrollToActive: PropTypes.bool,
781
+ hidden: PropTypes.bool,
782
+ ariaLabel: PropTypes.string
783
+ });
784
+
785
+ _defineProperty(List, "defaultProps", {
786
+ data: [],
787
+ restoreActiveIndex: false,
788
+ // restore active item using its "key" property
789
+ activateSingleItem: false,
790
+ // if there is only one item, activate it
791
+ activateFirstItem: false,
792
+ // if there no active items, activate the first one
793
+ onMouseOut: noop,
794
+ onSelect: noop,
795
+ onScrollToBottom: noop,
796
+ onResize: noop,
797
+ shortcuts: false,
798
+ renderOptimization: true,
799
+ disableMoveDownOverflow: false,
800
+ ariaLabel: 'List'
801
+ });
802
+
803
+ _defineProperty(List, "isItemType", isItemType);
804
+
805
+ _defineProperty(List, "ListHint", ListHint);
806
+
807
+ _defineProperty(List, "ListProps", {
808
+ Type,
809
+ Dimension
810
+ });
811
+
812
+ export { ActiveItemContext, List as default };