@jetbrains/ring-ui 5.0.156 → 5.0.158

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 (304) hide show
  1. package/components/control-label/control-label.css +1 -1
  2. package/components/control-label/control-label.d.ts +1 -1
  3. package/components/control-label/control-label.js +2 -2
  4. package/components/select/select__popup.d.ts +36 -0
  5. package/components/select/select__popup.js +7 -1
  6. package/dist/_helpers/_rollupPluginBabelHelpers.js +642 -1
  7. package/dist/_helpers/anchor.js +6 -7
  8. package/dist/_helpers/button__classes.js +16 -28
  9. package/dist/_helpers/card.js +107 -95
  10. package/dist/_helpers/control-label.js +1 -1
  11. package/dist/_helpers/dialog__body-scroll-preventer.js +20 -11
  12. package/dist/_helpers/footer.js +29 -34
  13. package/dist/_helpers/query-assist__suggestions.js +91 -74
  14. package/dist/_helpers/select__filter.js +71 -48
  15. package/dist/_helpers/services-link.js +41 -29
  16. package/dist/_helpers/sidebar.js +103 -99
  17. package/dist/_helpers/theme.js +42 -35
  18. package/dist/_helpers/title.js +71 -57
  19. package/dist/alert/alert.js +199 -158
  20. package/dist/alert/container.js +43 -32
  21. package/dist/alert-service/alert-service.js +172 -104
  22. package/dist/analytics/analytics.js +92 -68
  23. package/dist/analytics/analytics__custom-plugin.js +84 -60
  24. package/dist/analytics/analytics__fus-plugin.js +28 -15
  25. package/dist/analytics/analytics__ga-plugin.js +60 -43
  26. package/dist/analytics/analytics__plugin-utils.js +28 -22
  27. package/dist/auth/auth.js +36 -4
  28. package/dist/auth/auth__core.js +1458 -732
  29. package/dist/auth/background-flow.js +129 -87
  30. package/dist/auth/down-notification.js +75 -30
  31. package/dist/auth/iframe-flow.js +136 -75
  32. package/dist/auth/landing.js +90 -30
  33. package/dist/auth/request-builder.js +82 -46
  34. package/dist/auth/response-parser.js +119 -86
  35. package/dist/auth/storage.js +333 -171
  36. package/dist/auth/token-validator.js +244 -137
  37. package/dist/auth/window-flow.js +136 -92
  38. package/dist/auth-dialog/auth-dialog.js +176 -114
  39. package/dist/auth-dialog-service/auth-dialog-service.js +32 -7
  40. package/dist/auth-ng/auth-ng.js +70 -34
  41. package/dist/auth-ng/auth-ng.mock.js +6 -6
  42. package/dist/autofocus-ng/autofocus-ng.js +23 -8
  43. package/dist/avatar/avatar-example-datauri.js +1 -23
  44. package/dist/avatar/avatar.js +155 -119
  45. package/dist/avatar/fallback-avatar.js +41 -22
  46. package/dist/avatar-editor-ng/avatar-editor-ng.js +56 -23
  47. package/dist/avatar-editor-ng/avatar-editor-ng__template.js +1 -28
  48. package/dist/avatar-ng/avatar-ng.js +23 -1
  49. package/dist/badge/badge.js +43 -35
  50. package/dist/badge-ng/badge-ng.js +13 -1
  51. package/dist/breadcrumb-ng/breadcrumb-ng.js +15 -29
  52. package/dist/button/button.js +111 -87
  53. package/dist/button/button__classes.js +1 -0
  54. package/dist/button-group/button-group.js +35 -19
  55. package/dist/button-group/caption.js +22 -14
  56. package/dist/button-group-ng/button-group-ng.js +13 -7
  57. package/dist/button-ng/button-ng.js +154 -133
  58. package/dist/button-set/button-set.js +34 -20
  59. package/dist/button-set-ng/button-set-ng.js +2 -2
  60. package/dist/button-toolbar/button-toolbar.js +33 -19
  61. package/dist/button-toolbar-ng/button-toolbar-ng.js +5 -3
  62. package/dist/caret/caret.js +225 -188
  63. package/dist/checkbox/checkbox.js +104 -76
  64. package/dist/checkbox-ng/checkbox-ng.js +18 -27
  65. package/dist/clipboard/clipboard-fallback.js +10 -10
  66. package/dist/clipboard/clipboard.js +131 -34
  67. package/dist/code/code.js +168 -92
  68. package/dist/compiler-ng/compiler-ng.js +18 -15
  69. package/dist/confirm/confirm.js +108 -66
  70. package/dist/confirm-ng/confirm-ng.js +33 -4
  71. package/dist/confirm-service/confirm-service.js +66 -42
  72. package/dist/content-layout/content-layout.js +64 -43
  73. package/dist/content-layout/sidebar.js +1 -0
  74. package/dist/contenteditable/contenteditable.js +61 -50
  75. package/dist/control-label/control-label.d.ts +1 -1
  76. package/dist/control-label/control-label.js +12 -16
  77. package/dist/data-list/data-list.js +184 -128
  78. package/dist/data-list/data-list.mock.js +11 -2
  79. package/dist/data-list/item.js +174 -143
  80. package/dist/data-list/selection.js +139 -76
  81. package/dist/data-list/title.js +13 -1
  82. package/dist/data-list-ng/data-list-ng.js +31 -1
  83. package/dist/date-picker/consts.js +18 -15
  84. package/dist/date-picker/date-input.js +147 -115
  85. package/dist/date-picker/date-picker.js +285 -228
  86. package/dist/date-picker/date-popup.js +397 -356
  87. package/dist/date-picker/day.js +98 -84
  88. package/dist/date-picker/month-names.js +64 -43
  89. package/dist/date-picker/month-slider.js +74 -51
  90. package/dist/date-picker/month.js +21 -15
  91. package/dist/date-picker/months.js +48 -43
  92. package/dist/date-picker/weekdays.js +18 -12
  93. package/dist/date-picker/years.js +109 -84
  94. package/dist/dialog/dialog.js +189 -141
  95. package/dist/dialog/dialog__body-scroll-preventer.js +5 -0
  96. package/dist/dialog-ng/dialog-ng.js +401 -287
  97. package/dist/dialog-ng/dialog-ng__template.js +1 -70
  98. package/dist/docked-panel-ng/docked-panel-ng.js +33 -18
  99. package/dist/dropdown/anchor.js +10 -0
  100. package/dist/dropdown/dropdown.js +214 -182
  101. package/dist/dropdown-menu/dropdown-menu.js +102 -72
  102. package/dist/editable-heading/editable-heading.js +100 -58
  103. package/dist/error-bubble/error-bubble.js +64 -31
  104. package/dist/error-message/error-message.js +61 -38
  105. package/dist/error-message-ng/error-message-ng.js +11 -22
  106. package/dist/footer/footer.js +11 -1
  107. package/dist/footer-ng/footer-ng.js +64 -36
  108. package/dist/form-ng/form-ng.js +66 -56
  109. package/dist/global/angular-component-factory.js +76 -53
  110. package/dist/global/compose.js +10 -1
  111. package/dist/global/composeRefs.js +12 -7
  112. package/dist/global/controls-height.js +2 -2
  113. package/dist/global/create-stateful-context.js +19 -19
  114. package/dist/global/data-tests.js +15 -7
  115. package/dist/global/dom.js +95 -53
  116. package/dist/global/focus-sensor-hoc.js +134 -122
  117. package/dist/global/fuzzy-highlight.js +41 -27
  118. package/dist/global/get-event-key.js +8 -8
  119. package/dist/global/get-uid.js +8 -4
  120. package/dist/global/inject-styles.js +15 -10
  121. package/dist/global/linear-function.js +2 -2
  122. package/dist/global/listeners.js +53 -27
  123. package/dist/global/memoize.js +13 -6
  124. package/dist/global/normalize-indent.js +51 -19
  125. package/dist/global/promise-with-timeout.js +8 -6
  126. package/dist/global/prop-types.js +5 -3
  127. package/dist/global/react-dom-renderer.js +47 -28
  128. package/dist/global/react-render-adapter.js +19 -13
  129. package/dist/global/rerender-hoc.js +41 -16
  130. package/dist/global/ring-angular-component.js +20 -10
  131. package/dist/global/schedule-raf.js +6 -5
  132. package/dist/global/sniffer.js +1 -1
  133. package/dist/global/theme.js +24 -0
  134. package/dist/global/trivial-template-tag.js +10 -3
  135. package/dist/global/typescript-utils.js +6 -2
  136. package/dist/global/url.js +27 -21
  137. package/dist/global/use-event-callback.js +4 -6
  138. package/dist/grid/col.js +55 -35
  139. package/dist/grid/grid.js +36 -17
  140. package/dist/grid/row.js +48 -35
  141. package/dist/group/group.js +27 -17
  142. package/dist/group-ng/group-ng.js +2 -2
  143. package/dist/header/header.js +80 -33
  144. package/dist/header/logo.js +39 -20
  145. package/dist/header/profile.js +188 -150
  146. package/dist/header/services-link.js +9 -0
  147. package/dist/header/services.js +118 -73
  148. package/dist/header/smart-profile.js +207 -111
  149. package/dist/header/smart-services.js +115 -62
  150. package/dist/header/tray-icon.js +38 -21
  151. package/dist/header/tray.js +34 -21
  152. package/dist/heading/heading.js +25 -26
  153. package/dist/heading-ng/heading-ng.js +11 -1
  154. package/dist/http/http.js +368 -215
  155. package/dist/http/http.mock.js +104 -49
  156. package/dist/hub-source/hub-source.js +191 -83
  157. package/dist/hub-source/hub-source__user.js +45 -11
  158. package/dist/hub-source/hub-source__users-groups.js +67 -37
  159. package/dist/i18n/i18n-context.js +14 -10
  160. package/dist/i18n/i18n.js +11 -7
  161. package/dist/icon/icon.js +94 -76
  162. package/dist/icon/icon__svg.js +31 -24
  163. package/dist/icon/index.js +9 -0
  164. package/dist/icon-ng/icon-ng.js +27 -15
  165. package/dist/input/input.js +184 -145
  166. package/dist/input-ng/input-ng.js +96 -118
  167. package/dist/island/adaptive-island-hoc.js +45 -30
  168. package/dist/island/content.js +130 -115
  169. package/dist/island/header.js +69 -56
  170. package/dist/island/island.js +40 -28
  171. package/dist/island-legacy/content-legacy.js +27 -17
  172. package/dist/island-legacy/header-legacy.js +29 -19
  173. package/dist/island-legacy/island-legacy.js +27 -17
  174. package/dist/island-ng/island-content-ng.js +17 -26
  175. package/dist/island-ng/island-header-ng.js +9 -12
  176. package/dist/island-ng/island-ng-class-fixer.js +3 -0
  177. package/dist/island-ng/island-ng.js +6 -10
  178. package/dist/link/clickableLink.js +61 -44
  179. package/dist/link/link.js +85 -74
  180. package/dist/link-ng/link-ng.js +3 -5
  181. package/dist/list/consts.js +1 -1
  182. package/dist/list/list.js +696 -602
  183. package/dist/list/list__custom.js +61 -44
  184. package/dist/list/list__hint.js +21 -10
  185. package/dist/list/list__item.js +167 -129
  186. package/dist/list/list__link.js +54 -37
  187. package/dist/list/list__separator.js +24 -14
  188. package/dist/list/list__title.js +32 -22
  189. package/dist/list/list__users-groups-source.js +131 -54
  190. package/dist/loader/loader.js +78 -43
  191. package/dist/loader/loader__core.js +257 -189
  192. package/dist/loader-inline/loader-inline.js +37 -23
  193. package/dist/loader-inline-ng/loader-inline-ng.js +2 -2
  194. package/dist/loader-ng/loader-ng.js +46 -19
  195. package/dist/loader-screen/loader-screen.js +48 -25
  196. package/dist/loader-screen-ng/loader-screen-ng.js +46 -30
  197. package/dist/login-dialog/login-dialog.js +162 -111
  198. package/dist/login-dialog/service.js +35 -7
  199. package/dist/markdown/code.js +31 -9
  200. package/dist/markdown/heading.js +3 -5
  201. package/dist/markdown/link.js +13 -6
  202. package/dist/markdown/markdown.js +66 -33
  203. package/dist/message/message.js +157 -125
  204. package/dist/message-bundle-ng/message-bundle-ng.js +128 -44
  205. package/dist/old-browsers-message/old-browsers-message.js +19 -11
  206. package/dist/old-browsers-message/old-browsers-message__stop.js +8 -0
  207. package/dist/old-browsers-message/white-list.js +16 -9
  208. package/dist/pager/pager.js +275 -210
  209. package/dist/pager-ng/pager-ng.js +36 -1
  210. package/dist/panel/panel.js +27 -17
  211. package/dist/panel-ng/panel-ng.js +14 -1
  212. package/dist/permissions/permissions.js +173 -127
  213. package/dist/permissions/permissions__cache.js +225 -194
  214. package/dist/permissions-ng/permissions-ng.js +86 -35
  215. package/dist/place-under-ng/place-under-ng.js +68 -45
  216. package/dist/popup/popup.consts.js +1 -1
  217. package/dist/popup/popup.js +342 -280
  218. package/dist/popup/popup.target.js +8 -9
  219. package/dist/popup/position.js +153 -153
  220. package/dist/popup-menu/popup-menu.js +86 -44
  221. package/dist/progress-bar/progress-bar.js +97 -80
  222. package/dist/progress-bar-ng/progress-bar-ng.js +11 -1
  223. package/dist/promised-click-ng/promised-click-ng.js +92 -58
  224. package/dist/proxy-attrs/proxy-attrs.js +18 -9
  225. package/dist/query-assist/query-assist.js +903 -832
  226. package/dist/query-assist/query-assist__suggestions.js +33 -1
  227. package/dist/query-assist-ng/query-assist-ng.js +38 -1
  228. package/dist/radio/radio.js +36 -19
  229. package/dist/radio/radio__item.js +71 -52
  230. package/dist/radio-ng/radio-ng.js +14 -25
  231. package/dist/save-field-ng/save-field-ng.js +86 -52
  232. package/dist/save-field-ng/save-field-ng__template.js +1 -32
  233. package/dist/select/select.js +937 -835
  234. package/dist/select/select__filter.js +33 -0
  235. package/dist/select/select__popup.d.ts +36 -0
  236. package/dist/select/select__popup.js +480 -358
  237. package/dist/select-ng/select-ng.js +125 -74
  238. package/dist/select-ng/select-ng__lazy.js +101 -50
  239. package/dist/select-ng/select-ng__options.js +107 -81
  240. package/dist/shortcuts/core.js +218 -166
  241. package/dist/shortcuts/shortcut-title.js +11 -6
  242. package/dist/shortcuts/shortcuts-hoc.js +47 -19
  243. package/dist/shortcuts/shortcuts.js +77 -50
  244. package/dist/shortcuts-hint-ng/shortcuts-hint-ng.js +104 -53
  245. package/dist/shortcuts-hint-ng/shortcuts-hint-ng__template.js +1 -48
  246. package/dist/shortcuts-ng/shortcuts-ng.js +86 -51
  247. package/dist/sidebar-ng/sidebar-ng.js +53 -22
  248. package/dist/sidebar-ng/sidebar-ng__button-template.js +1 -18
  249. package/dist/sidebar-ng/sidebar-ng__template.js +1 -10
  250. package/dist/storage/storage.js +35 -4
  251. package/dist/storage/storage__fallback.js +224 -149
  252. package/dist/storage/storage__local.js +156 -90
  253. package/dist/style.css +1 -1
  254. package/dist/tab-trap/tab-trap.js +157 -122
  255. package/dist/table/cell.js +28 -14
  256. package/dist/table/disable-hover-hoc.js +53 -33
  257. package/dist/table/header-cell.js +87 -64
  258. package/dist/table/header.js +126 -98
  259. package/dist/table/multitable.js +127 -107
  260. package/dist/table/row-with-focus-sensor.js +73 -25
  261. package/dist/table/row.js +208 -170
  262. package/dist/table/selection-adapter.js +3 -1
  263. package/dist/table/selection-shortcuts-hoc.js +184 -181
  264. package/dist/table/selection.js +228 -156
  265. package/dist/table/smart-table.js +93 -51
  266. package/dist/table/table.js +348 -281
  267. package/dist/table-legacy-ng/table-legacy-ng.js +117 -102
  268. package/dist/table-legacy-ng/table-legacy-ng__pager.js +42 -10
  269. package/dist/table-legacy-ng/table-legacy-ng__selection-navigate-actions.js +92 -69
  270. package/dist/table-legacy-ng/table-legacy-ng__selection.js +169 -119
  271. package/dist/table-legacy-ng/table-legacy-ng__toolbar.js +36 -21
  272. package/dist/table-ng/smart-table-ng.js +31 -1
  273. package/dist/table-ng/table-ng.js +31 -1
  274. package/dist/tabs/collapsible-more.js +87 -50
  275. package/dist/tabs/collapsible-tab.js +45 -38
  276. package/dist/tabs/collapsible-tabs.js +161 -94
  277. package/dist/tabs/custom-item.js +2 -4
  278. package/dist/tabs/dumb-tabs.js +122 -75
  279. package/dist/tabs/smart-tabs.js +75 -29
  280. package/dist/tabs/tab-link.js +29 -19
  281. package/dist/tabs/tab.js +33 -19
  282. package/dist/tabs/tabs.js +35 -0
  283. package/dist/tabs-ng/tabs-ng.js +38 -24
  284. package/dist/tabs-ng/tabs-ng__template.js +1 -38
  285. package/dist/tag/tag.js +170 -133
  286. package/dist/tags-input/tags-input.js +428 -327
  287. package/dist/tags-input-ng/tags-input-ng.js +37 -1
  288. package/dist/tags-list/tags-list.js +80 -56
  289. package/dist/template-ng/template-ng.js +50 -39
  290. package/dist/text/text.js +38 -28
  291. package/dist/title-ng/title-ng.js +28 -23
  292. package/dist/toggle/toggle.js +72 -56
  293. package/dist/toggle-ng/toggle-ng.js +14 -1
  294. package/dist/tooltip/tooltip.js +192 -146
  295. package/dist/tooltip-ng/tooltip-ng.js +51 -25
  296. package/dist/user-agreement/service.js +374 -227
  297. package/dist/user-agreement/toolbox.eula.js +1 -160
  298. package/dist/user-agreement/user-agreement.js +128 -86
  299. package/dist/user-card/card.js +32 -0
  300. package/dist/user-card/smart-user-card-tooltip.js +116 -51
  301. package/dist/user-card/tooltip.js +90 -48
  302. package/dist/user-card/user-card.js +32 -0
  303. package/dist/user-card-ng/user-card-ng.js +34 -2
  304. package/package.json +8 -8
@@ -1,3 +1,12 @@
1
+ import { c as _defineProperty, j as _inherits, k as _createSuper, b as _classCallCheck, m as _assertThisInitialized, _ as _createClass, d as _typeof } from '../_helpers/_rollupPluginBabelHelpers.js';
2
+ import 'core-js/modules/es.array.concat.js';
3
+ import 'core-js/modules/es.array.filter.js';
4
+ import 'core-js/modules/es.object.to-string.js';
5
+ import 'core-js/modules/es.array.index-of.js';
6
+ import 'core-js/modules/es.array.reduce.js';
7
+ import 'core-js/modules/es.number.constructor.js';
8
+ import 'core-js/modules/es.array.slice.js';
9
+ import 'core-js/modules/es.object.keys.js';
1
10
  import React, { PureComponent } from 'react';
2
11
  import classNames from 'classnames';
3
12
  import searchIcon from '@jetbrains/icons/search';
@@ -21,15 +30,36 @@ import Text from '../text/text.js';
21
30
  import { ControlsHeight } from '../global/controls-height.js';
22
31
  import { DEFAULT_DIRECTIONS } from '../popup/popup.consts.js';
23
32
  import { S as SelectFilter, m as modules_b607bec2 } from '../_helpers/select__filter.js';
24
- import '../_helpers/_rollupPluginBabelHelpers.js';
25
33
  import 'util-deprecate';
26
34
  import '../icon/icon__constants.js';
27
35
  import '../_helpers/icon.js';
28
36
  import '../icon/icon__svg.js';
37
+ import 'core-js/modules/es.regexp.exec.js';
38
+ import 'core-js/modules/es.string.replace.js';
39
+ import 'core-js/modules/es.string.starts-with.js';
40
+ import 'core-js/modules/es.array.iterator.js';
41
+ import 'core-js/modules/es.map.js';
42
+ import 'core-js/modules/es.string.iterator.js';
43
+ import 'core-js/modules/web.dom-collections.iterator.js';
44
+ import 'core-js/modules/es.weak-map.js';
45
+ import 'core-js/modules/web.dom-collections.for-each.js';
46
+ import 'core-js/modules/es.object.entries.js';
47
+ import 'core-js/modules/es.regexp.to-string.js';
29
48
  import 'react-dom';
30
49
  import '../global/schedule-raf.js';
31
50
  import '../global/data-tests.js';
32
51
  import '../tab-trap/tab-trap.js';
52
+ import 'core-js/modules/es.array.includes.js';
53
+ import 'core-js/modules/es.string.includes.js';
54
+ import 'core-js/modules/es.array.sort.js';
55
+ import 'core-js/modules/es.array.map.js';
56
+ import 'core-js/modules/es.object.assign.js';
57
+ import 'core-js/modules/es.string.split.js';
58
+ import 'core-js/modules/es.set.js';
59
+ import 'core-js/modules/es.symbol.js';
60
+ import 'core-js/modules/es.symbol.description.js';
61
+ import 'core-js/modules/es.array.find-index.js';
62
+ import 'core-js/modules/es.array.find.js';
33
63
  import 'react-virtualized/dist/es/List';
34
64
  import 'react-virtualized/dist/es/AutoSizer';
35
65
  import 'react-virtualized/dist/es/WindowScroller';
@@ -43,7 +73,9 @@ import '../_helpers/list.js';
43
73
  import '../list/list__item.js';
44
74
  import '../avatar/avatar.js';
45
75
  import '../global/url.js';
76
+ import 'core-js/modules/es.string.match.js';
46
77
  import '../avatar/fallback-avatar.js';
78
+ import 'core-js/modules/es.array.from.js';
47
79
  import '../checkbox/checkbox.js';
48
80
  import '@jetbrains/icons/checkmark-14px';
49
81
  import '@jetbrains/icons/remove-14px';
@@ -57,6 +89,7 @@ import '../list/list__separator.js';
57
89
  import '../list/list__hint.js';
58
90
  import '../list/consts.js';
59
91
  import '../shortcuts/core.js';
92
+ import 'core-js/modules/es.array.splice.js';
60
93
  import 'combokeys';
61
94
  import '../global/sniffer.js';
62
95
  import 'sniffr';
@@ -66,394 +99,483 @@ import '@jetbrains/icons/close-12px';
66
99
  import '@jetbrains/icons/chevron-10px';
67
100
  import '../_helpers/button__classes.js';
68
101
  import '../input/input.js';
102
+ import 'core-js/modules/es.object.values.js';
69
103
  import '../i18n/i18n-context.js';
70
104
  import '../i18n/i18n.js';
71
105
  import '../control-label/control-label.js';
72
106
  import '../_helpers/control-label.js';
73
107
  import '../_helpers/input.js';
74
108
 
75
- const FILTER_HEIGHT = 35;
76
- const TOOLBAR_HEIGHT = 49;
109
+ var FILTER_HEIGHT = 35;
110
+ var TOOLBAR_HEIGHT = 49;
77
111
  function noop() {}
78
- const FilterWithShortcuts = shortcutsHOC(SelectFilter);
79
- class SelectPopup extends PureComponent {
80
- static defaultProps = {
81
- data: [],
82
- activeIndex: null,
83
- toolbar: null,
84
- topbar: null,
85
- filter: false,
86
- multiple: false,
87
- message: null,
88
- anchorElement: null,
89
- maxHeight: 600,
90
- minWidth: 240,
91
- loading: false,
92
- onSelect: noop,
93
- onCloseAttempt: noop,
94
- onOutsideClick: noop,
95
- onFilter: noop,
96
- onClear: noop,
97
- onLoadMore: noop,
98
- selected: [],
99
- tags: null,
100
- ringPopupTarget: null,
101
- onSelectAll: noop,
102
- onEmptyPopupEnter: noop
103
- };
104
- state = {
105
- popupFilterShortcutsOptions: {
106
- modal: true,
107
- disabled: true
108
- },
109
- tagsActiveIndex: null
110
- };
111
- componentDidMount() {
112
- window.document.addEventListener('mouseup', this.mouseUpHandler);
113
- }
114
- componentWillUnmount() {
115
- window.document.removeEventListener('mouseup', this.mouseUpHandler);
116
- }
117
- isClickingPopup = false; // This flag is set to true while an item in the popup is being clicked
118
- filter;
119
- focusFilter() {
120
- setTimeout(() => this.filter?.focus());
121
- }
122
- isEventTargetFilter(event) {
123
- return event.target instanceof Element && event.target.matches('input,textarea');
124
- }
125
- caret;
126
- handleNavigation(event, navigateLeft) {
127
- if (this.isEventTargetFilter(event) && this.caret != null && Number(this.caret.getPosition()) > 0 || !Array.isArray(this.props.selected)) {
128
- return;
129
- }
130
- let newIndex = null;
131
- if (navigateLeft) {
132
- newIndex = this.state.tagsActiveIndex === null ? this.props.selected.length - 1 : this.state.tagsActiveIndex - 1;
133
- } else if (this.state.tagsActiveIndex !== null) {
134
- newIndex = this.state.tagsActiveIndex + 1;
112
+ var FilterWithShortcuts = shortcutsHOC(SelectFilter);
113
+ var SelectPopup = /*#__PURE__*/function (_PureComponent) {
114
+ _inherits(SelectPopup, _PureComponent);
115
+ var _super = _createSuper(SelectPopup);
116
+ function SelectPopup() {
117
+ var _this;
118
+ _classCallCheck(this, SelectPopup);
119
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
120
+ args[_key] = arguments[_key];
135
121
  }
136
- if (newIndex !== null && (newIndex >= this.props.selected.length || newIndex < 0)) {
137
- newIndex = null;
138
- this.focusFilter();
139
- }
140
- this.setState({
141
- tagsActiveIndex: newIndex
122
+ _this = _super.call.apply(_super, [this].concat(args));
123
+ _defineProperty(_assertThisInitialized(_this), "state", {
124
+ popupFilterShortcutsOptions: {
125
+ modal: true,
126
+ disabled: true
127
+ },
128
+ tagsActiveIndex: null
129
+ });
130
+ _defineProperty(_assertThisInitialized(_this), "isClickingPopup", false);
131
+ // This flag is set to true while an item in the popup is being clicked
132
+ _defineProperty(_assertThisInitialized(_this), "filter", void 0);
133
+ _defineProperty(_assertThisInitialized(_this), "caret", void 0);
134
+ _defineProperty(_assertThisInitialized(_this), "onFilterFocus", function () {
135
+ _this._togglePopupFilterShortcuts(false);
136
+ _this.setState({
137
+ tagsActiveIndex: null
138
+ });
139
+ });
140
+ _defineProperty(_assertThisInitialized(_this), "popupFilterOnBlur", function () {
141
+ if (_this.state.tagsActiveIndex === null) {
142
+ _this._togglePopupFilterShortcuts(true);
143
+ }
144
+ });
145
+ _defineProperty(_assertThisInitialized(_this), "mouseDownHandler", function () {
146
+ _this.isClickingPopup = true;
147
+ });
148
+ _defineProperty(_assertThisInitialized(_this), "mouseUpHandler", function () {
149
+ _this.isClickingPopup = false;
150
+ });
151
+ _defineProperty(_assertThisInitialized(_this), "popup", void 0);
152
+ _defineProperty(_assertThisInitialized(_this), "onListSelect", function (selected, event, opts) {
153
+ var getSelectItemEvent = function getSelectItemEvent() {
154
+ var customEvent = document.createEvent('Event');
155
+ customEvent.initEvent('select', true, false);
156
+ if (event && 'persist' in event) {
157
+ event.persist();
158
+ }
159
+ customEvent.originalEvent = event;
160
+ return customEvent;
161
+ };
162
+ _this.props.onSelect(selected, getSelectItemEvent(), opts);
163
+ });
164
+ _defineProperty(_assertThisInitialized(_this), "tabPress", function (event) {
165
+ _this.props.onCloseAttempt(event, true);
166
+ });
167
+ _defineProperty(_assertThisInitialized(_this), "onClickHandler", function () {
168
+ var _this$filter;
169
+ return (_this$filter = _this.filter) === null || _this$filter === void 0 ? void 0 : _this$filter.focus();
142
170
  });
171
+ _defineProperty(_assertThisInitialized(_this), "handleRemoveTag", memoize(function (tag) {
172
+ return function (event) {
173
+ return _this.removeTag(tag, event);
174
+ };
175
+ }));
176
+ _defineProperty(_assertThisInitialized(_this), "handleTagClick", memoize(function (tag) {
177
+ return function () {
178
+ if (Array.isArray(_this.props.selected)) {
179
+ _this.setState({
180
+ tagsActiveIndex: _this.props.selected.indexOf(tag)
181
+ });
182
+ }
183
+ };
184
+ }));
185
+ _defineProperty(_assertThisInitialized(_this), "handleListResize", function () {
186
+ _this.forceUpdate();
187
+ });
188
+ _defineProperty(_assertThisInitialized(_this), "handleSelectAll", function () {
189
+ if (Array.isArray(_this.props.selected)) {
190
+ _this.props.onSelectAll(_this.props.data.filter(function (item) {
191
+ return !item.disabled;
192
+ }).length !== _this.props.selected.length);
193
+ }
194
+ });
195
+ _defineProperty(_assertThisInitialized(_this), "getSelectAll", function () {
196
+ var _multiple$renderSelec;
197
+ var multiple = _this.props.multiple;
198
+ var activeFilters = _this.props.data.filter(function (item) {
199
+ return !item.disabled;
200
+ });
201
+ return Array.isArray(_this.props.selected) && /*#__PURE__*/React.createElement("div", {
202
+ className: modules_b607bec2.selectAll
203
+ }, activeFilters.length === 0 ? /*#__PURE__*/React.createElement("span", null) : /*#__PURE__*/React.createElement(Button, {
204
+ text: true,
205
+ inline: true,
206
+ onClick: _this.handleSelectAll
207
+ }, activeFilters.length !== _this.props.selected.length ? multiple.selectAllLabel || 'Select all' : multiple.deselectAllLabel || 'Deselect all'), ((_multiple$renderSelec = multiple.renderSelectedItemsDescription) === null || _multiple$renderSelec === void 0 ? void 0 : _multiple$renderSelec.call(multiple, _this.props.selected, activeFilters.length)) || /*#__PURE__*/React.createElement(Text, {
208
+ info: true
209
+ }, "".concat(_this.props.selected.length, " selected")));
210
+ });
211
+ // Cache the value because this method is called
212
+ // inside `render` function which can be called N times
213
+ // and should be fast as possible.
214
+ // Cache invalidates each time hidden or userDefinedMaxHeight changes
215
+ _defineProperty(_assertThisInitialized(_this), "_adjustListMaxHeight", memoizeOne(function (hidden, userDefinedMaxHeight, ringPopupTarget) {
216
+ if (hidden) {
217
+ return userDefinedMaxHeight;
218
+ }
219
+ // Calculate list's maximum height that can't
220
+ // get beyond the screen
221
+ // @see RG-1838, JT-48358
222
+ var minMaxHeight = 100;
223
+ var directions = _this.props.directions || DEFAULT_DIRECTIONS;
224
+ // Note:
225
+ // Create a method which'll be called only when the popup opens and before
226
+ // render the list would be a better way
227
+ var anchorNode = _this.props.anchorElement;
228
+ var containerNode = getPopupContainer(ringPopupTarget) || document.documentElement;
229
+ return anchorNode != null ? Math.min(directions.reduce(function (maxHeight, direction) {
230
+ var _maxHeightForDirectio;
231
+ return Math.max(maxHeight, (_maxHeightForDirectio = maxHeightForDirection(direction, anchorNode, getStyles(containerNode).position !== 'static' ? containerNode : null)) !== null && _maxHeightForDirectio !== void 0 ? _maxHeightForDirectio : 0);
232
+ }, minMaxHeight), userDefinedMaxHeight) : userDefinedMaxHeight;
233
+ }));
234
+ _defineProperty(_assertThisInitialized(_this), "popupRef", function (el) {
235
+ _this.popup = el;
236
+ });
237
+ _defineProperty(_assertThisInitialized(_this), "list", void 0);
238
+ _defineProperty(_assertThisInitialized(_this), "listRef", function (el) {
239
+ _this.list = el;
240
+ });
241
+ _defineProperty(_assertThisInitialized(_this), "filterRef", function (el) {
242
+ _this.filter = el;
243
+ _this.caret = el && new Caret(el);
244
+ });
245
+ _defineProperty(_assertThisInitialized(_this), "shortcutsScope", getUID('select-popup-'));
246
+ _defineProperty(_assertThisInitialized(_this), "shortcutsMap", {
247
+ tab: _this.tabPress
248
+ });
249
+ _defineProperty(_assertThisInitialized(_this), "popupFilterShortcutsMap", {
250
+ up: function up(event) {
251
+ return _this.list && _this.list.upHandler(event);
252
+ },
253
+ down: function down(event) {
254
+ return _this.list && _this.list.downHandler(event);
255
+ },
256
+ home: function home(event) {
257
+ return _this.list && _this.list.homeHandler(event);
258
+ },
259
+ end: function end(event) {
260
+ return _this.list && _this.list.endHandler(event);
261
+ },
262
+ enter: function enter(event) {
263
+ return _this.list ? _this.list.enterHandler(event) : _this.props.onEmptyPopupEnter(event);
264
+ },
265
+ esc: function esc(event) {
266
+ return _this.props.onCloseAttempt(event, true);
267
+ },
268
+ tab: function tab(event) {
269
+ return _this.tabPress(event);
270
+ },
271
+ backspace: function backspace(event) {
272
+ return _this.handleBackspace(event);
273
+ },
274
+ del: function del() {
275
+ return _this.removeSelectedTag();
276
+ },
277
+ left: function left(event) {
278
+ return _this.handleNavigation(event, true);
279
+ },
280
+ right: function right(event) {
281
+ return _this.handleNavigation(event);
282
+ }
283
+ });
284
+ return _this;
143
285
  }
144
- removeTag(tag, event) {
145
- if (!Array.isArray(this.props.selected)) {
146
- return;
286
+ _createClass(SelectPopup, [{
287
+ key: "componentDidMount",
288
+ value: function componentDidMount() {
289
+ window.document.addEventListener('mouseup', this.mouseUpHandler);
147
290
  }
148
- const _tag = tag || this.props.selected.slice(0)[this.props.selected.length - 1];
149
- if (_tag) {
150
- this.onListSelect(_tag, event, {
151
- tryKeepOpen: true
291
+ }, {
292
+ key: "componentWillUnmount",
293
+ value: function componentWillUnmount() {
294
+ window.document.removeEventListener('mouseup', this.mouseUpHandler);
295
+ }
296
+ }, {
297
+ key: "focusFilter",
298
+ value: function focusFilter() {
299
+ var _this2 = this;
300
+ setTimeout(function () {
301
+ var _this2$filter;
302
+ return (_this2$filter = _this2.filter) === null || _this2$filter === void 0 ? void 0 : _this2$filter.focus();
152
303
  });
304
+ }
305
+ }, {
306
+ key: "isEventTargetFilter",
307
+ value: function isEventTargetFilter(event) {
308
+ return event.target instanceof Element && event.target.matches('input,textarea');
309
+ }
310
+ }, {
311
+ key: "handleNavigation",
312
+ value: function handleNavigation(event, navigateLeft) {
313
+ if (this.isEventTargetFilter(event) && this.caret != null && Number(this.caret.getPosition()) > 0 || !Array.isArray(this.props.selected)) {
314
+ return;
315
+ }
316
+ var newIndex = null;
317
+ if (navigateLeft) {
318
+ newIndex = this.state.tagsActiveIndex === null ? this.props.selected.length - 1 : this.state.tagsActiveIndex - 1;
319
+ } else if (this.state.tagsActiveIndex !== null) {
320
+ newIndex = this.state.tagsActiveIndex + 1;
321
+ }
322
+ if (newIndex !== null && (newIndex >= this.props.selected.length || newIndex < 0)) {
323
+ newIndex = null;
324
+ this.focusFilter();
325
+ }
153
326
  this.setState({
154
- tagsActiveIndex: null
327
+ tagsActiveIndex: newIndex
155
328
  });
156
- this.focusFilter();
157
329
  }
158
- }
159
- removeSelectedTag() {
160
- if (Array.isArray(this.props.selected) && this.state.tagsActiveIndex != null) {
161
- this.removeTag(this.props.selected[this.state.tagsActiveIndex]);
162
- return false;
330
+ }, {
331
+ key: "removeTag",
332
+ value: function removeTag(tag, event) {
333
+ if (!Array.isArray(this.props.selected)) {
334
+ return;
335
+ }
336
+ var _tag = tag || this.props.selected.slice(0)[this.props.selected.length - 1];
337
+ if (_tag) {
338
+ this.onListSelect(_tag, event, {
339
+ tryKeepOpen: true
340
+ });
341
+ this.setState({
342
+ tagsActiveIndex: null
343
+ });
344
+ this.focusFilter();
345
+ }
163
346
  }
164
- return true;
165
- }
166
- handleBackspace(event) {
167
- if (!this.props.tags) {
347
+ }, {
348
+ key: "removeSelectedTag",
349
+ value: function removeSelectedTag() {
350
+ if (Array.isArray(this.props.selected) && this.state.tagsActiveIndex != null) {
351
+ this.removeTag(this.props.selected[this.state.tagsActiveIndex]);
352
+ return false;
353
+ }
168
354
  return true;
169
355
  }
170
- if (!this.isEventTargetFilter(event)) {
171
- this.removeSelectedTag();
172
- return false;
173
- }
174
- if ((event.target instanceof HTMLInputElement || event.target instanceof HTMLTextAreaElement) && !event.target.value) {
175
- this.removeTag();
176
- return false;
177
- }
178
- return true;
179
- }
180
- onFilterFocus = () => {
181
- this._togglePopupFilterShortcuts(false);
182
- this.setState({
183
- tagsActiveIndex: null
184
- });
185
- };
186
- popupFilterOnBlur = () => {
187
- if (this.state.tagsActiveIndex === null) {
188
- this._togglePopupFilterShortcuts(true);
189
- }
190
- };
191
- _togglePopupFilterShortcuts(shortcutsDisabled) {
192
- this.setState({
193
- popupFilterShortcutsOptions: {
194
- modal: true,
195
- disabled: shortcutsDisabled
356
+ }, {
357
+ key: "handleBackspace",
358
+ value: function handleBackspace(event) {
359
+ if (!this.props.tags) {
360
+ return true;
196
361
  }
197
- });
198
- }
199
- mouseDownHandler = () => {
200
- this.isClickingPopup = true;
201
- };
202
- mouseUpHandler = () => {
203
- this.isClickingPopup = false;
204
- };
205
- popup;
206
- isVisible() {
207
- return this.popup && this.popup.isVisible();
208
- }
209
- onListSelect = (selected, event, opts) => {
210
- const getSelectItemEvent = () => {
211
- const customEvent = document.createEvent('Event');
212
- customEvent.initEvent('select', true, false);
213
- if (event && 'persist' in event) {
214
- event.persist();
362
+ if (!this.isEventTargetFilter(event)) {
363
+ this.removeSelectedTag();
364
+ return false;
215
365
  }
216
- customEvent.originalEvent = event;
217
- return customEvent;
218
- };
219
- this.props.onSelect(selected, getSelectItemEvent(), opts);
220
- };
221
- tabPress = event => {
222
- this.props.onCloseAttempt(event, true);
223
- };
224
- onClickHandler = () => this.filter?.focus();
225
- getFilter() {
226
- if (this.props.filter || this.props.tags) {
227
- return /*#__PURE__*/React.createElement("div", {
228
- className: modules_b607bec2.filterWrapper,
229
- "data-test": "ring-select-popup-filter"
230
- }, !this.props.tags && /*#__PURE__*/React.createElement(Icon, {
231
- glyph: searchIcon,
232
- className: modules_b607bec2.filterIcon,
233
- "data-test-custom": "ring-select-popup-filter-icon"
234
- }), /*#__PURE__*/React.createElement(FilterWithShortcuts, {
235
- rgShortcutsOptions: this.state.popupFilterShortcutsOptions,
236
- rgShortcutsMap: this.popupFilterShortcutsMap,
237
- value: this.props.filterValue,
238
- inputRef: this.filterRef,
239
- onBlur: this.popupFilterOnBlur,
240
- onFocus: this.onFilterFocus,
241
- className: "ring-js-shortcuts",
242
- inputClassName: classNames({
243
- [modules_b607bec2.filterWithTagsInput]: this.props.tags
244
- }),
245
- placeholder: typeof this.props.filter === 'object' ? this.props.filter.placeholder : undefined,
246
- height: this.props.tags ? ControlsHeight.S : ControlsHeight.L,
247
- onChange: this.props.onFilter,
248
- onClick: this.onClickHandler,
249
- onClear: this.props.tags ? undefined : this.props.onClear,
250
- "data-test-custom": "ring-select-popup-filter-input",
251
- listId: this.props.listId,
252
- enableShortcuts: Object.keys(this.popupFilterShortcutsMap)
253
- }));
366
+ if ((event.target instanceof HTMLInputElement || event.target instanceof HTMLTextAreaElement) && !event.target.value) {
367
+ this.removeTag();
368
+ return false;
369
+ }
370
+ return true;
254
371
  }
255
- return null;
256
- }
257
- handleRemoveTag = memoize(tag => event => this.removeTag(tag, event));
258
- handleTagClick = memoize(tag => () => {
259
- if (Array.isArray(this.props.selected)) {
372
+ }, {
373
+ key: "_togglePopupFilterShortcuts",
374
+ value: function _togglePopupFilterShortcuts(shortcutsDisabled) {
260
375
  this.setState({
261
- tagsActiveIndex: this.props.selected.indexOf(tag)
376
+ popupFilterShortcutsOptions: {
377
+ modal: true,
378
+ disabled: shortcutsDisabled
379
+ }
262
380
  });
263
381
  }
264
- });
265
- getTags() {
266
- return Array.isArray(this.props.selected) && /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(TagsList, {
267
- tags: this.props.selected,
268
- activeIndex: this.state.tagsActiveIndex,
269
- handleRemove: this.handleRemoveTag,
270
- handleClick: this.handleTagClick,
271
- disabled: this.props.disabled
272
- }));
273
- }
274
- getFilterWithTags() {
275
- if (this.props.tags) {
276
- const classes = classNames([modules_b607bec2.filterWithTags, {
277
- [modules_b607bec2.filterWithTagsFocused]: !this.state.popupFilterShortcutsOptions.disabled
278
- }]);
279
- return /*#__PURE__*/React.createElement("div", {
280
- className: classes
281
- }, this.getTags(), this.getFilter());
382
+ }, {
383
+ key: "isVisible",
384
+ value: function isVisible() {
385
+ return this.popup && this.popup.isVisible();
282
386
  }
283
- return this.getFilter();
284
- }
285
- getBottomLine() {
286
- const {
287
- loading,
288
- message
289
- } = this.props;
290
- return (loading || message) && /*#__PURE__*/React.createElement("div", {
291
- className: modules_b607bec2.bottomLine
292
- }, loading && /*#__PURE__*/React.createElement(LoaderInline, null), message && /*#__PURE__*/React.createElement("div", {
293
- className: modules_b607bec2.message
294
- }, message));
295
- }
296
- handleListResize = () => {
297
- this.forceUpdate();
298
- };
299
- getList(ringPopupTarget) {
300
- if (this.props.data.length) {
301
- let {
302
- maxHeight
303
- } = this.props;
304
- if (this.props.anchorElement) {
305
- maxHeight = this._adjustListMaxHeight(this.props.hidden, maxHeight, ringPopupTarget);
387
+ }, {
388
+ key: "getFilter",
389
+ value: function getFilter() {
390
+ if (this.props.filter || this.props.tags) {
391
+ return /*#__PURE__*/React.createElement("div", {
392
+ className: modules_b607bec2.filterWrapper,
393
+ "data-test": "ring-select-popup-filter"
394
+ }, !this.props.tags && /*#__PURE__*/React.createElement(Icon, {
395
+ glyph: searchIcon,
396
+ className: modules_b607bec2.filterIcon,
397
+ "data-test-custom": "ring-select-popup-filter-icon"
398
+ }), /*#__PURE__*/React.createElement(FilterWithShortcuts, {
399
+ rgShortcutsOptions: this.state.popupFilterShortcutsOptions,
400
+ rgShortcutsMap: this.popupFilterShortcutsMap,
401
+ value: this.props.filterValue,
402
+ inputRef: this.filterRef,
403
+ onBlur: this.popupFilterOnBlur,
404
+ onFocus: this.onFilterFocus,
405
+ className: "ring-js-shortcuts",
406
+ inputClassName: classNames(_defineProperty({}, modules_b607bec2.filterWithTagsInput, this.props.tags)),
407
+ placeholder: _typeof(this.props.filter) === 'object' ? this.props.filter.placeholder : undefined,
408
+ height: this.props.tags ? ControlsHeight.S : ControlsHeight.L,
409
+ onChange: this.props.onFilter,
410
+ onClick: this.onClickHandler,
411
+ onClear: this.props.tags ? undefined : this.props.onClear,
412
+ "data-test-custom": "ring-select-popup-filter-input",
413
+ listId: this.props.listId,
414
+ enableShortcuts: Object.keys(this.popupFilterShortcutsMap)
415
+ }));
306
416
  }
307
- if (this.props.filter) {
308
- maxHeight -= FILTER_HEIGHT;
417
+ return null;
418
+ }
419
+ }, {
420
+ key: "getCustomTag",
421
+ value: function getCustomTag(tags) {
422
+ if (tags !== null && typeof tags !== 'boolean') {
423
+ return tags.customTagComponent;
309
424
  }
310
- if (this.props.toolbar) {
311
- maxHeight -= TOOLBAR_HEIGHT;
425
+ return undefined;
426
+ }
427
+ }, {
428
+ key: "getTags",
429
+ value: function getTags() {
430
+ return Array.isArray(this.props.selected) && /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(TagsList, {
431
+ tags: this.props.selected,
432
+ activeIndex: this.state.tagsActiveIndex,
433
+ handleRemove: this.handleRemoveTag,
434
+ handleClick: this.handleTagClick,
435
+ disabled: this.props.disabled,
436
+ customTagComponent: this.getCustomTag(this.props.tags)
437
+ }));
438
+ }
439
+ }, {
440
+ key: "getFilterWithTags",
441
+ value: function getFilterWithTags() {
442
+ if (this.props.tags) {
443
+ var classes = classNames([modules_b607bec2.filterWithTags, _defineProperty({}, modules_b607bec2.filterWithTagsFocused, !this.state.popupFilterShortcutsOptions.disabled)]);
444
+ return /*#__PURE__*/React.createElement("div", {
445
+ className: classes
446
+ }, this.getTags(), this.getFilter());
312
447
  }
313
- return /*#__PURE__*/React.createElement(List, {
314
- id: this.props.listId,
315
- maxHeight: maxHeight,
316
- data: this.props.data,
317
- activeIndex: this.props.activeIndex,
318
- ref: this.listRef,
319
- restoreActiveIndex: true,
320
- activateFirstItem: true,
321
- onSelect: this.onListSelect,
322
- onResize: this.handleListResize,
323
- onScrollToBottom: this.props.onLoadMore,
324
- hidden: this.props.hidden,
325
- shortcuts: !this.props.hidden,
326
- disableMoveOverflow: this.props.disableMoveOverflow,
327
- disableMoveDownOverflow: this.props.loading,
328
- disableScrollToActive: this.props.disableScrollToActive,
329
- compact: this.props.compact,
330
- renderOptimization: this.props.renderOptimization
331
- });
448
+ return this.getFilter();
332
449
  }
333
- return null;
334
- }
335
- handleSelectAll = () => {
336
- if (Array.isArray(this.props.selected)) {
337
- this.props.onSelectAll(this.props.data.filter(item => !item.disabled).length !== this.props.selected.length);
450
+ }, {
451
+ key: "getBottomLine",
452
+ value: function getBottomLine() {
453
+ var _this$props = this.props,
454
+ loading = _this$props.loading,
455
+ message = _this$props.message;
456
+ return (loading || message) && /*#__PURE__*/React.createElement("div", {
457
+ className: modules_b607bec2.bottomLine
458
+ }, loading && /*#__PURE__*/React.createElement(LoaderInline, null), message && /*#__PURE__*/React.createElement("div", {
459
+ className: modules_b607bec2.message
460
+ }, message));
338
461
  }
339
- };
340
- getSelectAll = () => {
341
- const multiple = this.props.multiple;
342
- const activeFilters = this.props.data.filter(item => !item.disabled);
343
- return Array.isArray(this.props.selected) && /*#__PURE__*/React.createElement("div", {
344
- className: modules_b607bec2.selectAll
345
- }, activeFilters.length === 0 ? /*#__PURE__*/React.createElement("span", null) : /*#__PURE__*/React.createElement(Button, {
346
- text: true,
347
- inline: true,
348
- onClick: this.handleSelectAll
349
- }, activeFilters.length !== this.props.selected.length ? multiple.selectAllLabel || 'Select all' : multiple.deselectAllLabel || 'Deselect all'), multiple.renderSelectedItemsDescription?.(this.props.selected, activeFilters.length) || /*#__PURE__*/React.createElement(Text, {
350
- info: true
351
- }, `${this.props.selected.length} selected`));
352
- };
353
- // Cache the value because this method is called
354
- // inside `render` function which can be called N times
355
- // and should be fast as possible.
356
- // Cache invalidates each time hidden or userDefinedMaxHeight changes
357
- _adjustListMaxHeight = memoizeOne((hidden, userDefinedMaxHeight, ringPopupTarget) => {
358
- if (hidden) {
359
- return userDefinedMaxHeight;
462
+ }, {
463
+ key: "getList",
464
+ value: function getList(ringPopupTarget) {
465
+ if (this.props.data.length) {
466
+ var maxHeight = this.props.maxHeight;
467
+ if (this.props.anchorElement) {
468
+ maxHeight = this._adjustListMaxHeight(this.props.hidden, maxHeight, ringPopupTarget);
469
+ }
470
+ if (this.props.filter) {
471
+ maxHeight -= FILTER_HEIGHT;
472
+ }
473
+ if (this.props.toolbar) {
474
+ maxHeight -= TOOLBAR_HEIGHT;
475
+ }
476
+ return /*#__PURE__*/React.createElement(List, {
477
+ id: this.props.listId,
478
+ maxHeight: maxHeight,
479
+ data: this.props.data,
480
+ activeIndex: this.props.activeIndex,
481
+ ref: this.listRef,
482
+ restoreActiveIndex: true,
483
+ activateFirstItem: true,
484
+ onSelect: this.onListSelect,
485
+ onResize: this.handleListResize,
486
+ onScrollToBottom: this.props.onLoadMore,
487
+ hidden: this.props.hidden,
488
+ shortcuts: !this.props.hidden,
489
+ disableMoveOverflow: this.props.disableMoveOverflow,
490
+ disableMoveDownOverflow: this.props.loading,
491
+ disableScrollToActive: this.props.disableScrollToActive,
492
+ compact: this.props.compact,
493
+ renderOptimization: this.props.renderOptimization
494
+ });
495
+ }
496
+ return null;
360
497
  }
361
- // Calculate list's maximum height that can't
362
- // get beyond the screen
363
- // @see RG-1838, JT-48358
364
- const minMaxHeight = 100;
365
- const directions = this.props.directions || DEFAULT_DIRECTIONS;
366
- // Note:
367
- // Create a method which'll be called only when the popup opens and before
368
- // render the list would be a better way
369
- const anchorNode = this.props.anchorElement;
370
- const containerNode = getPopupContainer(ringPopupTarget) || document.documentElement;
371
- return anchorNode != null ? Math.min(directions.reduce((maxHeight, direction) => {
372
- var _maxHeightForDirectio;
373
- return Math.max(maxHeight, (_maxHeightForDirectio = maxHeightForDirection(direction, anchorNode, getStyles(containerNode).position !== 'static' ? containerNode : null)) !== null && _maxHeightForDirectio !== void 0 ? _maxHeightForDirectio : 0);
374
- }, minMaxHeight), userDefinedMaxHeight) : userDefinedMaxHeight;
375
- });
376
- popupRef = el => {
377
- this.popup = el;
378
- };
379
- list;
380
- listRef = el => {
381
- this.list = el;
382
- };
383
- filterRef = el => {
384
- this.filter = el;
385
- this.caret = el && new Caret(el);
386
- };
387
- shortcutsScope = getUID('select-popup-');
388
- shortcutsMap = {
389
- tab: this.tabPress
390
- };
391
- popupFilterShortcutsMap = {
392
- up: event => this.list && this.list.upHandler(event),
393
- down: event => this.list && this.list.downHandler(event),
394
- home: event => this.list && this.list.homeHandler(event),
395
- end: event => this.list && this.list.endHandler(event),
396
- enter: event => this.list ? this.list.enterHandler(event) : this.props.onEmptyPopupEnter(event),
397
- esc: event => this.props.onCloseAttempt(event, true),
398
- tab: event => this.tabPress(event),
399
- backspace: event => this.handleBackspace(event),
400
- del: () => this.removeSelectedTag(),
401
- left: event => this.handleNavigation(event, true),
402
- right: event => this.handleNavigation(event)
403
- };
404
- render() {
405
- const {
406
- toolbar,
407
- topbar,
408
- className,
409
- multiple,
410
- hidden,
411
- isInputMode,
412
- anchorElement,
413
- minWidth,
414
- onCloseAttempt,
415
- onOutsideClick,
416
- directions,
417
- top,
418
- left,
419
- style,
420
- dir,
421
- filter
422
- } = this.props;
423
- const classes = classNames(modules_b607bec2.popup, className);
424
- return /*#__PURE__*/React.createElement(PopupTargetContext.Consumer, null, ringPopupTarget => {
425
- const filterWithTags = this.getFilterWithTags();
426
- const selectAll = multiple && typeof multiple === 'object' && !multiple.limit && multiple.selectAll && this.getSelectAll();
427
- const list = this.getList(this.props.ringPopupTarget || ringPopupTarget);
428
- const bottomLine = this.getBottomLine();
429
- const hasContent = filterWithTags || selectAll || list || bottomLine || toolbar || topbar;
430
- return /*#__PURE__*/React.createElement(Popup, {
431
- trapFocus: false,
432
- ref: this.popupRef,
433
- hidden: hidden || !hasContent,
434
- attached: isInputMode,
435
- className: classes,
436
- dontCloseOnAnchorClick: true,
437
- anchorElement: anchorElement,
438
- minWidth: minWidth,
439
- onCloseAttempt: onCloseAttempt,
440
- onOutsideClick: onOutsideClick,
441
- directions: directions,
442
- top: top,
443
- left: left,
444
- onMouseDown: this.mouseDownHandler,
445
- target: this.props.ringPopupTarget,
446
- autoCorrectTopOverflow: false,
447
- style: style
448
- }, /*#__PURE__*/React.createElement("div", {
449
- dir: dir
450
- }, !hidden && filter && /*#__PURE__*/React.createElement(Shortcuts, {
451
- map: this.shortcutsMap,
452
- scope: this.shortcutsScope
453
- }), topbar, hidden ? /*#__PURE__*/React.createElement("div", null) : filterWithTags, selectAll, list, bottomLine, toolbar));
454
- });
455
- }
456
- }
498
+ }, {
499
+ key: "render",
500
+ value: function render() {
501
+ var _this3 = this;
502
+ var _this$props2 = this.props,
503
+ toolbar = _this$props2.toolbar,
504
+ topbar = _this$props2.topbar,
505
+ className = _this$props2.className,
506
+ multiple = _this$props2.multiple,
507
+ hidden = _this$props2.hidden,
508
+ isInputMode = _this$props2.isInputMode,
509
+ anchorElement = _this$props2.anchorElement,
510
+ minWidth = _this$props2.minWidth,
511
+ onCloseAttempt = _this$props2.onCloseAttempt,
512
+ onOutsideClick = _this$props2.onOutsideClick,
513
+ directions = _this$props2.directions,
514
+ top = _this$props2.top,
515
+ left = _this$props2.left,
516
+ style = _this$props2.style,
517
+ dir = _this$props2.dir,
518
+ filter = _this$props2.filter;
519
+ var classes = classNames(modules_b607bec2.popup, className);
520
+ return /*#__PURE__*/React.createElement(PopupTargetContext.Consumer, null, function (ringPopupTarget) {
521
+ var filterWithTags = _this3.getFilterWithTags();
522
+ var selectAll = multiple && _typeof(multiple) === 'object' && !multiple.limit && multiple.selectAll && _this3.getSelectAll();
523
+ var list = _this3.getList(_this3.props.ringPopupTarget || ringPopupTarget);
524
+ var bottomLine = _this3.getBottomLine();
525
+ var hasContent = filterWithTags || selectAll || list || bottomLine || toolbar || topbar;
526
+ return /*#__PURE__*/React.createElement(Popup, {
527
+ trapFocus: false,
528
+ ref: _this3.popupRef,
529
+ hidden: hidden || !hasContent,
530
+ attached: isInputMode,
531
+ className: classes,
532
+ dontCloseOnAnchorClick: true,
533
+ anchorElement: anchorElement,
534
+ minWidth: minWidth,
535
+ onCloseAttempt: onCloseAttempt,
536
+ onOutsideClick: onOutsideClick,
537
+ directions: directions,
538
+ top: top,
539
+ left: left,
540
+ onMouseDown: _this3.mouseDownHandler,
541
+ target: _this3.props.ringPopupTarget,
542
+ autoCorrectTopOverflow: false,
543
+ style: style
544
+ }, /*#__PURE__*/React.createElement("div", {
545
+ dir: dir
546
+ }, !hidden && filter && /*#__PURE__*/React.createElement(Shortcuts, {
547
+ map: _this3.shortcutsMap,
548
+ scope: _this3.shortcutsScope
549
+ }), topbar, hidden ? /*#__PURE__*/React.createElement("div", null) : filterWithTags, selectAll, list, bottomLine, toolbar));
550
+ });
551
+ }
552
+ }]);
553
+ return SelectPopup;
554
+ }(PureComponent);
555
+ _defineProperty(SelectPopup, "defaultProps", {
556
+ data: [],
557
+ activeIndex: null,
558
+ toolbar: null,
559
+ topbar: null,
560
+ filter: false,
561
+ multiple: false,
562
+ message: null,
563
+ anchorElement: null,
564
+ maxHeight: 600,
565
+ minWidth: 240,
566
+ loading: false,
567
+ onSelect: noop,
568
+ onCloseAttempt: noop,
569
+ onOutsideClick: noop,
570
+ onFilter: noop,
571
+ onClear: noop,
572
+ onLoadMore: noop,
573
+ selected: [],
574
+ tags: null,
575
+ ringPopupTarget: null,
576
+ onSelectAll: noop,
577
+ onEmptyPopupEnter: noop
578
+ });
457
579
  SelectPopup.propTypes = {
458
580
  activeIndex: PropTypes.number,
459
581
  anchorElement: PropTypes.instanceOf(HTMLElement),