@jetbrains/ring-ui 4.1.12 → 5.0.0-beta.11

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 (1108) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/README.md +0 -11
  3. package/babel.config.js +2 -12
  4. package/components/alert/alert.css +4 -14
  5. package/components/alert/alert.d.ts +113 -0
  6. package/components/alert/alert.js +140 -196
  7. package/components/alert/container.css +0 -2
  8. package/components/alert/container.d.ts +15 -0
  9. package/components/alert/container.js +24 -41
  10. package/components/alert-service/alert-service.d.ts +34 -0
  11. package/components/alert-service/alert-service.examples.css +5 -3
  12. package/components/alert-service/alert-service.js +94 -124
  13. package/components/analytics/analytics.d.ts +24 -0
  14. package/components/analytics/analytics.js +75 -89
  15. package/components/analytics/analytics__custom-plugin.d.ts +39 -0
  16. package/components/analytics/analytics__custom-plugin.js +90 -111
  17. package/components/analytics/analytics__fus-plugin.d.ts +62 -0
  18. package/components/analytics/analytics__fus-plugin.js +62 -75
  19. package/components/analytics/analytics__ga-plugin.d.ts +17 -0
  20. package/components/analytics/analytics__ga-plugin.js +40 -43
  21. package/components/analytics/analytics__plugin-utils.d.ts +15 -0
  22. package/components/analytics/analytics__plugin-utils.js +61 -68
  23. package/components/analytics-ng/analytics-ng.examples.js +2 -2
  24. package/components/auth/auth.d.ts +3 -0
  25. package/components/auth/auth.js +3 -6
  26. package/components/auth/auth__core.d.ts +235 -0
  27. package/components/auth/auth__core.js +780 -878
  28. package/components/auth/background-flow.d.ts +31 -0
  29. package/components/auth/background-flow.js +91 -108
  30. package/components/auth/down-notification.css +1 -1
  31. package/components/auth/down-notification.d.ts +15 -0
  32. package/components/auth/down-notification.js +32 -52
  33. package/components/auth/iframe-flow.d.ts +20 -0
  34. package/components/auth/iframe-flow.js +71 -89
  35. package/components/auth/landing-entry.d.ts +3 -0
  36. package/components/auth/landing-entry.js +0 -1
  37. package/components/auth/landing.d.ts +2 -0
  38. package/components/auth/landing.html +1 -1
  39. package/components/auth/landing.js +19 -23
  40. package/components/auth/request-builder.d.ts +47 -0
  41. package/components/auth/request-builder.js +61 -68
  42. package/components/auth/response-parser.d.ts +70 -0
  43. package/components/auth/response-parser.js +84 -94
  44. package/components/auth/storage.d.ts +112 -0
  45. package/components/auth/storage.js +199 -214
  46. package/components/auth/token-validator.d.ts +93 -0
  47. package/components/auth/token-validator.js +160 -172
  48. package/components/auth/window-flow.d.ts +26 -0
  49. package/components/auth/window-flow.js +91 -112
  50. package/components/auth-dialog/auth-dialog.d.ts +60 -0
  51. package/components/auth-dialog/auth-dialog.js +72 -139
  52. package/components/auth-dialog-service/auth-dialog-service.d.ts +5 -0
  53. package/components/auth-dialog-service/auth-dialog-service.js +9 -15
  54. package/components/auth-ng/auth-ng.examples.js +1 -1
  55. package/components/autofocus-ng/autofocus-ng.examples.js +3 -3
  56. package/components/autofocus-ng/autofocus-ng.js +1 -1
  57. package/components/autofocus-ng/autofocus-ng.test.js +1 -1
  58. package/components/avatar/avatar-example-datauri.d.ts +1 -0
  59. package/components/avatar/avatar-example-datauri.js +0 -1
  60. package/components/avatar/avatar.d.ts +51 -0
  61. package/components/avatar/avatar.js +86 -157
  62. package/components/avatar/fallback-avatar.d.ts +17 -0
  63. package/components/avatar/fallback-avatar.js +84 -108
  64. package/components/avatar-editor-ng/avatar-editor-ng.examples.js +1 -1
  65. package/components/avatar-ng/avatar-ng.examples.js +3 -3
  66. package/components/badge/badge.d.ts +24 -0
  67. package/components/badge/badge.js +25 -49
  68. package/components/badge-ng/badge-ng.examples.js +2 -2
  69. package/components/breadcrumb-ng/breadcrumb-ng.examples.js +1 -1
  70. package/components/button/button.css +95 -206
  71. package/components/button/button.d.ts +67 -0
  72. package/components/button/button.js +56 -107
  73. package/components/button/button__classes.d.ts +2 -0
  74. package/components/button/button__classes.js +15 -37
  75. package/components/button-group/button-group.css +136 -19
  76. package/components/button-group/button-group.d.ts +17 -0
  77. package/components/button-group/button-group.js +11 -21
  78. package/components/button-group/caption.d.ts +8 -0
  79. package/components/button-group/caption.js +9 -18
  80. package/components/button-group-ng/button-group-ng.css +1 -0
  81. package/components/button-group-ng/button-group-ng.examples.js +3 -3
  82. package/components/button-ng/button-ng.examples.js +11 -12
  83. package/components/button-ng/button-ng.js +6 -25
  84. package/components/button-set/button-set.css +1 -0
  85. package/components/button-set/button-set.d.ts +12 -0
  86. package/components/button-set/button-set.js +10 -18
  87. package/components/button-set-ng/button-set-ng.examples.js +2 -2
  88. package/components/button-toolbar/button-toolbar.css +2 -0
  89. package/components/button-toolbar/button-toolbar.d.ts +12 -0
  90. package/components/button-toolbar/button-toolbar.js +10 -21
  91. package/components/button-toolbar-ng/button-toolbar-ng.examples.js +3 -3
  92. package/components/caret/caret.d.ts +66 -0
  93. package/components/caret/caret.js +200 -209
  94. package/components/checkbox/checkbox.css +10 -4
  95. package/components/checkbox/checkbox.d.ts +41 -0
  96. package/components/checkbox/checkbox.js +47 -81
  97. package/components/checkbox-ng/checkbox-ng.examples.js +2 -2
  98. package/components/code/code.d.ts +43 -0
  99. package/components/code/code.js +74 -98
  100. package/components/compiler-ng/compiler-ng.examples.js +1 -1
  101. package/components/confirm/confirm.d.ts +48 -0
  102. package/components/confirm/confirm.js +39 -81
  103. package/components/confirm-ng/confirm-ng.examples.js +2 -2
  104. package/components/confirm-service/confirm-service.d.ts +15 -0
  105. package/components/confirm-service/confirm-service.js +35 -51
  106. package/components/content-layout/content-layout.d.ts +26 -0
  107. package/components/content-layout/content-layout.js +33 -52
  108. package/components/content-layout/sidebar.d.ts +31 -0
  109. package/components/content-layout/sidebar.js +62 -91
  110. package/components/contenteditable/contenteditable.d.ts +47 -0
  111. package/components/contenteditable/contenteditable.js +36 -55
  112. package/components/data-list/data-list.d.ts +89 -0
  113. package/components/data-list/data-list.js +95 -146
  114. package/components/data-list/data-list.mock.d.ts +16 -0
  115. package/components/data-list/data-list.mock.js +166 -207
  116. package/components/data-list/item.d.ts +50 -0
  117. package/components/data-list/item.js +87 -187
  118. package/components/data-list/selection.d.ts +16 -0
  119. package/components/data-list/selection.js +75 -90
  120. package/components/data-list/title.d.ts +26 -0
  121. package/components/data-list/title.js +48 -79
  122. package/components/data-list-ng/data-list-ng.examples.js +3 -3
  123. package/components/date-picker/consts.d.ts +99 -0
  124. package/components/date-picker/consts.js +26 -53
  125. package/components/date-picker/date-input.d.ts +57 -0
  126. package/components/date-picker/date-input.js +88 -122
  127. package/components/date-picker/date-picker.css +2 -1
  128. package/components/date-picker/date-picker.d.ts +70 -0
  129. package/components/date-picker/date-picker.js +180 -260
  130. package/components/date-picker/date-popup.d.ts +56 -0
  131. package/components/date-picker/date-popup.js +308 -405
  132. package/components/date-picker/day.d.ts +30 -0
  133. package/components/date-picker/day.js +71 -104
  134. package/components/date-picker/formats.d.ts +2 -0
  135. package/components/date-picker/month-names.d.ts +13 -0
  136. package/components/date-picker/month-names.js +44 -86
  137. package/components/date-picker/month-slider.d.ts +29 -0
  138. package/components/date-picker/month-slider.js +44 -71
  139. package/components/date-picker/month.d.ts +14 -0
  140. package/components/date-picker/month.js +18 -33
  141. package/components/date-picker/months.d.ts +11 -0
  142. package/components/date-picker/months.js +52 -79
  143. package/components/date-picker/weekdays.d.ts +13 -0
  144. package/components/date-picker/weekdays.js +12 -28
  145. package/components/date-picker/years.d.ts +21 -0
  146. package/components/date-picker/years.js +55 -91
  147. package/components/dialog/dialog.css +10 -3
  148. package/components/dialog/dialog.d.ts +73 -0
  149. package/components/dialog/dialog.js +100 -158
  150. package/components/dialog/dialog__body-scroll-preventer.d.ts +9 -0
  151. package/components/dialog/dialog__body-scroll-preventer.js +35 -51
  152. package/components/dialog-ng/dialog-ng.examples.js +5 -5
  153. package/components/dialog-ng/dialog-ng__template.js +1 -0
  154. package/components/docked-panel-ng/docked-panel-ng.examples.js +3 -3
  155. package/components/dropdown/anchor.d.ts +11 -0
  156. package/components/dropdown/anchor.js +6 -22
  157. package/components/dropdown/dropdown.d.ts +77 -0
  158. package/components/dropdown/dropdown.js +131 -168
  159. package/components/dropdown-menu/dropdown-menu.d.ts +26 -0
  160. package/components/dropdown-menu/dropdown-menu.js +43 -104
  161. package/components/error-bubble/error-bubble-legacy.css +1 -1
  162. package/components/error-bubble/error-bubble.css +1 -1
  163. package/components/error-bubble/error-bubble.d.ts +18 -0
  164. package/components/error-bubble/error-bubble.js +17 -39
  165. package/components/error-message/error-message.d.ts +25 -0
  166. package/components/error-message/error-message.js +19 -38
  167. package/components/error-message-ng/error-message-ng.examples.js +1 -1
  168. package/components/error-page-ng/error-page-ng.examples.js +2 -2
  169. package/components/footer/footer.d.ts +28 -0
  170. package/components/footer/footer.js +61 -103
  171. package/components/footer-ng/footer-ng.examples.js +2 -2
  172. package/components/form/form.examples.js +4 -4
  173. package/components/form-ng/form-ng.examples.js +6 -6
  174. package/components/global/compose.d.ts +7 -0
  175. package/components/global/compose.js +3 -3
  176. package/components/global/composeRefs.d.ts +3 -0
  177. package/components/global/composeRefs.js +7 -6
  178. package/components/global/controls-height.d.ts +7 -0
  179. package/components/global/controls-height.js +8 -0
  180. package/components/global/create-stateful-context.d.ts +27 -0
  181. package/components/global/create-stateful-context.js +32 -40
  182. package/components/global/data-tests.d.ts +3 -0
  183. package/components/global/data-tests.js +12 -12
  184. package/components/global/dom.d.ts +37 -0
  185. package/components/global/dom.js +51 -73
  186. package/components/global/focus-sensor-hoc.d.ts +18 -0
  187. package/components/global/focus-sensor-hoc.js +94 -105
  188. package/components/global/fuzzy-highlight.d.ts +5 -0
  189. package/components/global/fuzzy-highlight.js +38 -40
  190. package/components/global/get-event-key.d.ts +2 -0
  191. package/components/global/get-event-key.js +88 -100
  192. package/components/global/get-uid.d.ts +1 -0
  193. package/components/global/get-uid.js +8 -12
  194. package/components/global/inject-styles.d.ts +3 -0
  195. package/components/global/inject-styles.js +7 -9
  196. package/components/global/linear-function.d.ts +6 -0
  197. package/components/global/linear-function.js +9 -12
  198. package/components/global/listeners.d.ts +8 -0
  199. package/components/global/listeners.js +22 -33
  200. package/components/global/memoize.d.ts +1 -0
  201. package/components/global/memoize.js +13 -12
  202. package/components/global/normalize-indent.d.ts +1 -0
  203. package/components/global/normalize-indent.js +26 -30
  204. package/components/global/promise-with-timeout.d.ts +4 -0
  205. package/components/global/promise-with-timeout.js +5 -7
  206. package/components/global/prop-types.d.ts +4 -0
  207. package/components/global/prop-types.js +4 -0
  208. package/components/global/react-dom-renderer.d.ts +16 -0
  209. package/components/global/react-dom-renderer.js +21 -30
  210. package/components/global/rerender-hoc.d.ts +45 -0
  211. package/components/global/rerender-hoc.js +18 -27
  212. package/components/global/schedule-raf.d.ts +1 -0
  213. package/components/global/schedule-raf.js +24 -24
  214. package/components/global/sniffer.d.ts +3 -0
  215. package/components/global/sniffer.js +0 -2
  216. package/components/global/theme.d.ts +13 -0
  217. package/components/global/theme.js +31 -49
  218. package/components/global/trivial-template-tag.d.ts +1 -0
  219. package/components/global/trivial-template-tag.js +6 -8
  220. package/components/global/typescript-utils.d.ts +2 -0
  221. package/components/global/typescript-utils.js +2 -0
  222. package/components/global/url.d.ts +57 -0
  223. package/components/global/url.js +58 -84
  224. package/components/global/variables.css +30 -25
  225. package/components/global/variables.d.ts +90 -0
  226. package/components/global/variables.js +1 -0
  227. package/components/global/variables_dark.css +68 -0
  228. package/components/grid/col.d.ts +31 -0
  229. package/components/grid/col.js +33 -42
  230. package/components/grid/grid.d.ts +14 -0
  231. package/components/grid/grid.js +13 -24
  232. package/components/grid/row.d.ts +40 -0
  233. package/components/grid/row.js +35 -44
  234. package/components/group/group.d.ts +12 -0
  235. package/components/group/group.js +11 -21
  236. package/components/group-ng/group.examples.js +2 -2
  237. package/components/header/header.css +19 -10
  238. package/components/header/header.d.ts +34 -0
  239. package/components/header/header.js +30 -44
  240. package/components/header/logo.d.ts +14 -0
  241. package/components/header/logo.js +16 -25
  242. package/components/header/profile.d.ts +73 -0
  243. package/components/header/profile.js +102 -168
  244. package/components/header/services-link.d.ts +25 -0
  245. package/components/header/services-link.js +20 -37
  246. package/components/header/services.css +3 -3
  247. package/components/header/services.d.ts +33 -0
  248. package/components/header/services.js +49 -102
  249. package/components/header/smart-profile.d.ts +36 -0
  250. package/components/header/smart-profile.js +76 -111
  251. package/components/header/smart-services.d.ts +25 -0
  252. package/components/header/smart-services.js +42 -66
  253. package/components/header/tray-icon.d.ts +32 -0
  254. package/components/header/tray-icon.js +14 -27
  255. package/components/header/tray.d.ts +9 -0
  256. package/components/header/tray.js +12 -24
  257. package/components/heading/heading.css +4 -1
  258. package/components/heading/heading.d.ts +25 -0
  259. package/components/heading/heading.js +33 -63
  260. package/components/http/http.d.ts +49 -0
  261. package/components/http/http.js +144 -174
  262. package/components/http/http.mock.d.ts +20 -0
  263. package/components/http/http.mock.js +46 -56
  264. package/components/hub-source/hub-source.d.ts +42 -0
  265. package/components/hub-source/hub-source.js +89 -105
  266. package/components/hub-source/hub-source__user.d.ts +4 -0
  267. package/components/hub-source/hub-source__user.js +14 -21
  268. package/components/hub-source/hub-source__users-groups.d.ts +24 -0
  269. package/components/hub-source/hub-source__users-groups.js +46 -53
  270. package/components/icon/icon.css +1 -1
  271. package/components/icon/icon.d.ts +43 -0
  272. package/components/icon/icon.js +55 -83
  273. package/components/icon/icon__constants.d.ts +30 -0
  274. package/components/icon/icon__constants.js +25 -24
  275. package/components/icon/icon__svg.d.ts +15 -0
  276. package/components/icon/icon__svg.js +39 -58
  277. package/components/icon/index.d.ts +2 -0
  278. package/components/icon/index.js +1 -1
  279. package/components/icon-ng/icon-ng.examples.js +1 -1
  280. package/components/input/input.css +87 -149
  281. package/components/input/input.d.ts +69 -0
  282. package/components/input/input.js +136 -203
  283. package/components/input-ng/input-ng.examples.js +2 -2
  284. package/components/input-ng/input-ng.js +45 -49
  285. package/components/input-size/input-size.examples.js +5 -5
  286. package/components/island/adaptive-island-hoc.d.ts +65 -0
  287. package/components/island/adaptive-island-hoc.js +21 -31
  288. package/components/island/content.d.ts +12 -0
  289. package/components/island/content.js +81 -123
  290. package/components/island/header.d.ts +8 -0
  291. package/components/island/header.js +60 -84
  292. package/components/island/island.css +8 -5
  293. package/components/island/island.d.ts +82 -0
  294. package/components/island/island.js +19 -41
  295. package/components/island-legacy/content-legacy.d.ts +10 -0
  296. package/components/island-legacy/content-legacy.js +11 -20
  297. package/components/island-legacy/header-legacy.d.ts +10 -0
  298. package/components/island-legacy/header-legacy.js +11 -20
  299. package/components/island-legacy/island-legacy.css +1 -1
  300. package/components/island-legacy/island-legacy.d.ts +12 -0
  301. package/components/island-legacy/island-legacy.js +13 -23
  302. package/components/island-ng/island-ng.examples.js +1 -1
  303. package/components/link/clickableLink.d.ts +20 -0
  304. package/components/link/clickableLink.js +27 -42
  305. package/components/link/link.css +0 -2
  306. package/components/link/link.d.ts +157 -0
  307. package/components/link/link.js +56 -101
  308. package/components/link-ng/link-ng.examples.js +1 -1
  309. package/components/list/consts.d.ts +74 -0
  310. package/components/list/consts.js +22 -22
  311. package/components/list/list.d.ts +191 -0
  312. package/components/list/list.js +505 -691
  313. package/components/list/list__custom.d.ts +6 -0
  314. package/components/list/list__custom.js +37 -75
  315. package/components/list/list__hint.d.ts +15 -0
  316. package/components/list/list__hint.js +7 -15
  317. package/components/list/list__item.d.ts +8 -0
  318. package/components/list/list__item.js +81 -185
  319. package/components/list/list__link.d.ts +9 -0
  320. package/components/list/list__link.js +25 -54
  321. package/components/list/list__separator.d.ts +5 -0
  322. package/components/list/list__separator.js +13 -22
  323. package/components/list/list__title.d.ts +5 -0
  324. package/components/list/list__title.js +18 -34
  325. package/components/list/list__users-groups-source.d.ts +27 -0
  326. package/components/list/list__users-groups-source.js +63 -78
  327. package/components/loader/loader.d.ts +28 -0
  328. package/components/loader/loader.js +31 -51
  329. package/components/loader/loader__core.d.ts +75 -0
  330. package/components/loader/loader__core.js +208 -240
  331. package/components/loader-inline/loader-inline.css +14 -0
  332. package/components/loader-inline/loader-inline.d.ts +18 -0
  333. package/components/loader-inline/loader-inline.js +16 -46
  334. package/components/loader-inline-ng/loader-inline-ng.examples.js +1 -1
  335. package/components/loader-inline-ng/loader-inline-ng.js +1 -17
  336. package/components/loader-inline-ng/loader-inline-ng.test.js +0 -11
  337. package/components/loader-ng/loader-ng.examples.js +1 -1
  338. package/components/loader-screen/loader-screen.d.ts +17 -0
  339. package/components/loader-screen/loader-screen.js +16 -29
  340. package/components/loader-screen-ng/loader-screen-ng.examples.js +1 -1
  341. package/components/login-dialog/login-dialog.d.ts +47 -0
  342. package/components/login-dialog/login-dialog.js +63 -104
  343. package/components/login-dialog/service.d.ts +2 -0
  344. package/components/login-dialog/service.js +11 -15
  345. package/components/markdown/code.d.ts +9 -0
  346. package/components/markdown/code.js +4 -14
  347. package/components/markdown/heading.d.ts +11 -0
  348. package/components/markdown/heading.js +3 -7
  349. package/components/markdown/link.d.ts +12 -0
  350. package/components/markdown/link.js +4 -8
  351. package/components/markdown/markdown.d.ts +14 -0
  352. package/components/markdown/markdown.js +26 -40
  353. package/components/message/message.css +7 -3
  354. package/components/message/message.d.ts +59 -0
  355. package/components/message/message.js +84 -127
  356. package/components/old-browsers-message/old-browsers-message.d.ts +2 -0
  357. package/components/old-browsers-message/old-browsers-message.js +57 -73
  358. package/components/old-browsers-message/old-browsers-message__stop.d.ts +1 -0
  359. package/components/old-browsers-message/old-browsers-message__stop.js +1 -1
  360. package/components/old-browsers-message/white-list.d.ts +2 -0
  361. package/components/old-browsers-message/white-list.js +9 -16
  362. package/components/pager/pager.d.ts +83 -0
  363. package/components/pager/pager.js +184 -291
  364. package/components/pager-ng/pager-ng.examples.js +1 -1
  365. package/components/palette/palette.examples.js +1 -1
  366. package/components/panel/panel.d.ts +12 -0
  367. package/components/panel/panel.js +11 -19
  368. package/components/permissions/permissions.d.ts +111 -0
  369. package/components/permissions/permissions.js +144 -160
  370. package/components/permissions/permissions__cache.d.ts +93 -0
  371. package/components/permissions/permissions__cache.js +200 -231
  372. package/components/permissions-ng/permissions-ng.examples.js +2 -2
  373. package/components/place-under-ng/place-under-ng.examples.js +2 -2
  374. package/components/popup/popup.consts.d.ts +37 -0
  375. package/components/popup/popup.consts.js +36 -36
  376. package/components/popup/popup.css +1 -1
  377. package/components/popup/popup.d.ts +141 -0
  378. package/components/popup/popup.js +262 -346
  379. package/components/popup/popup.target.d.ts +7 -0
  380. package/components/popup/popup.target.js +12 -24
  381. package/components/popup/position.d.ts +30 -0
  382. package/components/popup/position.js +172 -225
  383. package/components/popup-menu/popup-menu.d.ts +59 -0
  384. package/components/popup-menu/popup-menu.js +30 -47
  385. package/components/progress-bar/progress-bar.css +8 -12
  386. package/components/progress-bar/progress-bar.d.ts +58 -0
  387. package/components/progress-bar/progress-bar.js +60 -93
  388. package/components/progress-bar-ng/progress-bar-ng.examples.js +4 -3
  389. package/components/promised-click-ng/promised-click-ng.examples.js +2 -2
  390. package/components/query-assist/query-assist.css +48 -64
  391. package/components/query-assist/query-assist.d.ts +327 -0
  392. package/components/query-assist/query-assist.js +706 -905
  393. package/components/query-assist/query-assist__suggestions.d.ts +29 -0
  394. package/components/query-assist/query-assist__suggestions.js +51 -91
  395. package/components/query-assist-ng/query-assist-ng.examples.js +2 -2
  396. package/components/radio/radio.css +10 -4
  397. package/components/radio/radio.d.ts +18 -0
  398. package/components/radio/radio.js +19 -29
  399. package/components/radio/radio__item.d.ts +28 -0
  400. package/components/radio/radio__item.js +28 -56
  401. package/components/radio-ng/radio-ng.examples.js +1 -1
  402. package/components/save-field-ng/save-field-ng.examples.js +2 -2
  403. package/components/select/select-popup.css +5 -1
  404. package/components/select/select.css +19 -37
  405. package/components/select/select.d.ts +289 -0
  406. package/components/select/select.js +806 -1191
  407. package/components/select/select__filter.d.ts +20 -0
  408. package/components/select/select__filter.js +37 -59
  409. package/components/select/select__popup.d.ts +123 -0
  410. package/components/select/select__popup.js +324 -498
  411. package/components/select-ng/select-ng.examples.js +4 -3
  412. package/components/select-ng/select-ng.js +3 -1
  413. package/components/select-ng/select-ng.test.js +1 -1
  414. package/components/select-ng/select-ng__lazy.js +3 -3
  415. package/components/shortcuts/core.d.ts +74 -0
  416. package/components/shortcuts/core.js +185 -226
  417. package/components/shortcuts/shortcut-title.d.ts +1 -0
  418. package/components/shortcuts/shortcut-title.js +43 -49
  419. package/components/shortcuts/shortcuts-hoc.d.ts +69 -0
  420. package/components/shortcuts/shortcuts-hoc.js +12 -26
  421. package/components/shortcuts/shortcuts.d.ts +28 -0
  422. package/components/shortcuts/shortcuts.js +39 -48
  423. package/components/shortcuts-hint-ng/shortcuts-hint-ng.css +1 -1
  424. package/components/shortcuts-hint-ng/shortcuts-hint-ng.examples.js +2 -2
  425. package/components/sidebar-ng/sidebar-ng.examples.js +3 -3
  426. package/components/storage/storage.d.ts +18 -0
  427. package/components/storage/storage.js +6 -9
  428. package/components/storage/storage__fallback.d.ts +79 -0
  429. package/components/storage/storage__fallback.js +160 -178
  430. package/components/storage/storage__local.d.ts +38 -0
  431. package/components/storage/storage__local.js +108 -104
  432. package/components/tab-trap/tab-trap.d.ts +43 -0
  433. package/components/tab-trap/tab-trap.js +113 -163
  434. package/components/table/cell.d.ts +13 -0
  435. package/components/table/cell.js +10 -20
  436. package/components/table/disable-hover-hoc.d.ts +68 -0
  437. package/components/table/disable-hover-hoc.js +29 -41
  438. package/components/table/header-cell.d.ts +43 -0
  439. package/components/table/header-cell.js +40 -61
  440. package/components/table/header.d.ts +60 -0
  441. package/components/table/header.js +89 -156
  442. package/components/table/multitable.d.ts +25 -0
  443. package/components/table/multitable.js +76 -94
  444. package/components/table/row-with-focus-sensor.d.ts +18 -0
  445. package/components/table/row-with-focus-sensor.js +21 -35
  446. package/components/table/row.d.ts +56 -0
  447. package/components/table/row.js +110 -199
  448. package/components/table/selection-adapter.d.ts +5 -0
  449. package/components/table/selection-adapter.js +8 -8
  450. package/components/table/selection-shortcuts-hoc.d.ts +17 -0
  451. package/components/table/selection-shortcuts-hoc.js +140 -171
  452. package/components/table/selection.d.ts +47 -0
  453. package/components/table/selection.js +148 -183
  454. package/components/table/smart-table.d.ts +60 -0
  455. package/components/table/smart-table.js +29 -48
  456. package/components/table/table.d.ts +160 -0
  457. package/components/table/table.js +170 -256
  458. package/components/table-legacy-ng/table-legacy-ng.examples.js +4 -4
  459. package/components/table-ng/table-ng.examples.js +4 -4
  460. package/components/tabs/collapsible-more.d.ts +29 -0
  461. package/components/tabs/collapsible-more.js +72 -158
  462. package/components/tabs/collapsible-tab.d.ts +16 -0
  463. package/components/tabs/collapsible-tab.js +24 -80
  464. package/components/tabs/collapsible-tabs.d.ts +43 -0
  465. package/components/tabs/collapsible-tabs.js +176 -294
  466. package/components/tabs/custom-item.d.ts +9 -0
  467. package/components/tabs/custom-item.js +2 -3
  468. package/components/tabs/dumb-tabs.d.ts +33 -0
  469. package/components/tabs/dumb-tabs.js +42 -94
  470. package/components/tabs/smart-tabs.d.ts +20 -0
  471. package/components/tabs/smart-tabs.js +14 -27
  472. package/components/tabs/tab-link.d.ts +18 -0
  473. package/components/tabs/tab-link.js +12 -22
  474. package/components/tabs/tab.d.ts +27 -0
  475. package/components/tabs/tab.js +13 -19
  476. package/components/tabs/tabs.css +17 -28
  477. package/components/tabs/tabs.d.ts +7 -0
  478. package/components/tabs/tabs.js +4 -5
  479. package/components/tabs-ng/tabs-ng.examples.js +12 -4
  480. package/components/tabs-ng/tabs-ng.js +1 -4
  481. package/components/tabs-ng/tabs-ng__template.js +1 -1
  482. package/components/tag/tag.css +31 -8
  483. package/components/tag/tag.d.ts +64 -0
  484. package/components/tag/tag.js +103 -155
  485. package/components/tags-input/tags-input.css +10 -4
  486. package/components/tags-input/tags-input.d.ts +154 -0
  487. package/components/tags-input/tags-input.js +233 -315
  488. package/components/tags-input-ng/tags-input-ng.examples.js +1 -1
  489. package/components/tags-list/tags-list.d.ts +46 -0
  490. package/components/tags-list/tags-list.js +35 -83
  491. package/components/template-ng/template-ng.examples.js +1 -1
  492. package/components/text/text.d.ts +17 -0
  493. package/components/text/text.js +13 -21
  494. package/components/title-ng/title-ng.examples.js +1 -1
  495. package/components/toggle/toggle.css +61 -35
  496. package/components/toggle/toggle.d.ts +39 -0
  497. package/components/toggle/toggle.js +31 -62
  498. package/components/toggle-ng/toggle-ng.examples.js +1 -1
  499. package/components/tooltip/tooltip.css +7 -0
  500. package/components/tooltip/tooltip.d.ts +65 -0
  501. package/components/tooltip/tooltip.js +109 -151
  502. package/components/tooltip-ng/tooltip-ng.examples.js +2 -2
  503. package/components/user-agreement/service.d.ts +161 -0
  504. package/components/user-agreement/service.js +216 -270
  505. package/components/user-agreement/toolbox.eula.d.ts +2 -0
  506. package/components/user-agreement/user-agreement.d.ts +69 -0
  507. package/components/user-agreement/user-agreement.js +55 -98
  508. package/components/user-card/card.d.ts +52 -0
  509. package/components/user-card/card.js +42 -78
  510. package/components/user-card/smart-user-card-tooltip.d.ts +20 -0
  511. package/components/user-card/smart-user-card-tooltip.js +39 -58
  512. package/components/user-card/tooltip.d.ts +31 -0
  513. package/components/user-card/tooltip.js +25 -46
  514. package/components/user-card/user-card.d.ts +11 -0
  515. package/components/user-card/user-card.js +3 -5
  516. package/components/user-card-ng/user-card-ng.examples.js +4 -4
  517. package/dist/_helpers/anchor.js +2 -2
  518. package/dist/_helpers/badge.js +1 -1
  519. package/dist/_helpers/button-group.js +1 -1
  520. package/dist/_helpers/button-set.js +1 -1
  521. package/dist/_helpers/button-toolbar.js +1 -1
  522. package/dist/_helpers/button__classes.js +5 -8
  523. package/dist/_helpers/card.js +1 -1
  524. package/dist/_helpers/checkbox.js +1 -1
  525. package/dist/_helpers/date-picker.js +1 -1
  526. package/dist/_helpers/dialog__body-scroll-preventer.js +2 -2
  527. package/dist/_helpers/error-message.js +1 -1
  528. package/dist/_helpers/footer.js +3 -3
  529. package/dist/_helpers/grid.js +1 -1
  530. package/dist/_helpers/group.js +1 -1
  531. package/dist/_helpers/header.js +1 -1
  532. package/dist/_helpers/icon.js +1 -1
  533. package/dist/_helpers/input.js +1 -1
  534. package/dist/_helpers/island.js +1 -1
  535. package/dist/_helpers/link.js +1 -1
  536. package/dist/_helpers/list.js +1 -1
  537. package/dist/_helpers/loader-inline.js +3 -0
  538. package/dist/_helpers/loader-screen.js +1 -1
  539. package/dist/_helpers/panel.js +1 -1
  540. package/dist/_helpers/query-assist__suggestions.js +3 -3
  541. package/dist/_helpers/radio.js +1 -1
  542. package/dist/_helpers/select__filter.js +13 -9
  543. package/dist/_helpers/services-link.js +1 -1
  544. package/dist/_helpers/sidebar.js +7 -4
  545. package/dist/_helpers/table.js +1 -1
  546. package/dist/_helpers/tabs.js +1 -1
  547. package/dist/_helpers/theme.js +50 -0
  548. package/dist/_helpers/title.js +14 -14
  549. package/dist/alert/alert.d.ts +113 -0
  550. package/dist/alert/alert.js +56 -50
  551. package/dist/alert/container.d.ts +15 -0
  552. package/dist/alert/container.js +6 -8
  553. package/dist/alert-service/alert-service.d.ts +34 -0
  554. package/dist/alert-service/alert-service.js +9 -7
  555. package/dist/analytics/analytics.d.ts +24 -0
  556. package/dist/analytics/analytics.js +10 -15
  557. package/dist/analytics/analytics__custom-plugin.d.ts +39 -0
  558. package/dist/analytics/analytics__custom-plugin.js +30 -9
  559. package/dist/analytics/analytics__fus-plugin.d.ts +62 -0
  560. package/dist/analytics/analytics__fus-plugin.js +23 -6
  561. package/dist/analytics/analytics__ga-plugin.d.ts +17 -0
  562. package/dist/analytics/analytics__ga-plugin.js +12 -6
  563. package/dist/analytics/analytics__plugin-utils.d.ts +15 -0
  564. package/dist/analytics/analytics__plugin-utils.js +58 -59
  565. package/dist/analytics-ng/analytics-ng.js +1 -0
  566. package/dist/auth/auth.d.ts +3 -0
  567. package/dist/auth/auth.js +9 -9
  568. package/dist/auth/auth__core.d.ts +235 -0
  569. package/dist/auth/auth__core.js +219 -125
  570. package/dist/auth/background-flow.d.ts +31 -0
  571. package/dist/auth/background-flow.js +9 -1
  572. package/dist/auth/down-notification.d.ts +15 -0
  573. package/dist/auth/down-notification.js +8 -8
  574. package/dist/auth/iframe-flow.d.ts +20 -0
  575. package/dist/auth/iframe-flow.js +20 -6
  576. package/dist/auth/landing-entry.d.ts +3 -0
  577. package/dist/auth/landing.d.ts +2 -0
  578. package/dist/auth/landing.js +22 -16
  579. package/dist/auth/request-builder.d.ts +47 -0
  580. package/dist/auth/request-builder.js +7 -1
  581. package/dist/auth/response-parser.d.ts +70 -0
  582. package/dist/auth/response-parser.js +25 -13
  583. package/dist/auth/storage.d.ts +112 -0
  584. package/dist/auth/storage.js +50 -17
  585. package/dist/auth/token-validator.d.ts +93 -0
  586. package/dist/auth/token-validator.js +32 -12
  587. package/dist/auth/window-flow.d.ts +26 -0
  588. package/dist/auth/window-flow.js +24 -11
  589. package/dist/auth-dialog/auth-dialog.d.ts +60 -0
  590. package/dist/auth-dialog/auth-dialog.js +5 -8
  591. package/dist/auth-dialog-service/auth-dialog-service.d.ts +5 -0
  592. package/dist/auth-dialog-service/auth-dialog-service.js +1 -1
  593. package/dist/auth-ng/auth-ng.js +9 -9
  594. package/dist/autofocus-ng/autofocus-ng.js +1 -1
  595. package/dist/avatar/avatar-example-datauri.d.ts +1 -0
  596. package/dist/avatar/avatar.d.ts +51 -0
  597. package/dist/avatar/avatar.js +14 -11
  598. package/dist/avatar/fallback-avatar.d.ts +17 -0
  599. package/dist/avatar-editor-ng/avatar-editor-ng.js +9 -7
  600. package/dist/badge/badge.d.ts +24 -0
  601. package/dist/breadcrumb-ng/breadcrumb-ng.js +1 -1
  602. package/dist/button/button.d.ts +67 -0
  603. package/dist/button/button.js +17 -18
  604. package/dist/button/button__classes.d.ts +2 -0
  605. package/dist/button/button__classes.js +0 -3
  606. package/dist/button-group/button-group.d.ts +17 -0
  607. package/dist/button-group/button-group.js +5 -3
  608. package/dist/button-group/caption.d.ts +8 -0
  609. package/dist/button-group-ng/button-group-ng.js +1 -1
  610. package/dist/button-ng/button-ng.js +6 -31
  611. package/dist/button-set/button-set.d.ts +12 -0
  612. package/dist/button-toolbar/button-toolbar.d.ts +12 -0
  613. package/dist/caret/caret.d.ts +66 -0
  614. package/dist/caret/caret.js +35 -19
  615. package/dist/checkbox/checkbox.d.ts +41 -0
  616. package/dist/checkbox/checkbox.js +6 -0
  617. package/dist/code/code.d.ts +43 -0
  618. package/dist/code/code.js +13 -9
  619. package/dist/confirm/confirm.d.ts +48 -0
  620. package/dist/confirm/confirm.js +4 -4
  621. package/dist/confirm-ng/confirm-ng.js +1 -1
  622. package/dist/confirm-service/confirm-service.d.ts +15 -0
  623. package/dist/confirm-service/confirm-service.js +1 -1
  624. package/dist/content-layout/content-layout.d.ts +26 -0
  625. package/dist/content-layout/content-layout.js +4 -2
  626. package/dist/content-layout/sidebar.d.ts +31 -0
  627. package/dist/contenteditable/contenteditable.d.ts +47 -0
  628. package/dist/contenteditable/contenteditable.js +6 -4
  629. package/dist/data-list/data-list.d.ts +89 -0
  630. package/dist/data-list/data-list.js +54 -30
  631. package/dist/data-list/data-list.mock.d.ts +16 -0
  632. package/dist/data-list/data-list.mock.js +2 -2
  633. package/dist/data-list/item.d.ts +50 -0
  634. package/dist/data-list/item.js +33 -32
  635. package/dist/data-list/selection.d.ts +16 -0
  636. package/dist/data-list/selection.js +13 -0
  637. package/dist/data-list/title.d.ts +26 -0
  638. package/dist/data-list/title.js +1 -0
  639. package/dist/data-list-ng/data-list-ng.js +6 -9
  640. package/dist/date-picker/consts.d.ts +99 -0
  641. package/dist/date-picker/consts.js +2 -21
  642. package/dist/date-picker/date-input.d.ts +57 -0
  643. package/dist/date-picker/date-input.js +8 -3
  644. package/dist/date-picker/date-picker.d.ts +70 -0
  645. package/dist/date-picker/date-picker.js +39 -39
  646. package/dist/date-picker/date-popup.d.ts +56 -0
  647. package/dist/date-picker/date-popup.js +44 -27
  648. package/dist/date-picker/day.d.ts +30 -0
  649. package/dist/date-picker/day.js +8 -4
  650. package/dist/date-picker/formats.d.ts +2 -0
  651. package/dist/date-picker/month-names.d.ts +13 -0
  652. package/dist/date-picker/month-names.js +6 -5
  653. package/dist/date-picker/month-slider.d.ts +29 -0
  654. package/dist/date-picker/month-slider.js +2 -2
  655. package/dist/date-picker/month.d.ts +14 -0
  656. package/dist/date-picker/months.d.ts +11 -0
  657. package/dist/date-picker/months.js +3 -3
  658. package/dist/date-picker/weekdays.d.ts +13 -0
  659. package/dist/date-picker/weekdays.js +1 -1
  660. package/dist/date-picker/years.d.ts +21 -0
  661. package/dist/date-picker/years.js +8 -6
  662. package/dist/dialog/dialog.d.ts +73 -0
  663. package/dist/dialog/dialog.js +4 -2
  664. package/dist/dialog/dialog__body-scroll-preventer.d.ts +9 -0
  665. package/dist/dialog-ng/dialog-ng.js +3 -3
  666. package/dist/dialog-ng/dialog-ng__template.js +1 -0
  667. package/dist/docked-panel-ng/docked-panel-ng.js +1 -1
  668. package/dist/dropdown/anchor.d.ts +11 -0
  669. package/dist/dropdown/anchor.js +1 -1
  670. package/dist/dropdown/dropdown.d.ts +77 -0
  671. package/dist/dropdown/dropdown.js +14 -7
  672. package/dist/dropdown-menu/dropdown-menu.d.ts +26 -0
  673. package/dist/dropdown-menu/dropdown-menu.js +9 -6
  674. package/dist/error-bubble/error-bubble.d.ts +18 -0
  675. package/dist/error-bubble/error-bubble.js +4 -2
  676. package/dist/error-message/error-message.d.ts +25 -0
  677. package/dist/footer/footer.d.ts +28 -0
  678. package/dist/global/compose.d.ts +7 -0
  679. package/dist/global/compose.js +2 -2
  680. package/dist/global/composeRefs.d.ts +3 -0
  681. package/dist/global/controls-height.d.ts +7 -0
  682. package/dist/global/controls-height.js +13 -0
  683. package/dist/global/create-stateful-context.d.ts +27 -0
  684. package/dist/global/data-tests.d.ts +3 -0
  685. package/dist/global/data-tests.js +5 -1
  686. package/dist/global/dom.d.ts +37 -0
  687. package/dist/global/dom.js +4 -4
  688. package/dist/global/focus-sensor-hoc.d.ts +18 -0
  689. package/dist/global/focus-sensor-hoc.js +58 -20
  690. package/dist/global/fuzzy-highlight.d.ts +5 -0
  691. package/dist/global/get-event-key.d.ts +2 -0
  692. package/dist/global/get-event-key.js +0 -1
  693. package/dist/global/get-uid.d.ts +1 -0
  694. package/dist/global/inject-styles.d.ts +3 -0
  695. package/dist/global/linear-function.d.ts +6 -0
  696. package/dist/global/listeners.d.ts +8 -0
  697. package/dist/global/listeners.js +10 -2
  698. package/dist/global/memoize.d.ts +1 -0
  699. package/dist/global/memoize.js +7 -6
  700. package/dist/global/normalize-indent.d.ts +1 -0
  701. package/dist/global/normalize-indent.js +5 -1
  702. package/dist/global/promise-with-timeout.d.ts +4 -0
  703. package/dist/global/prop-types.d.ts +4 -0
  704. package/dist/global/prop-types.js +7 -0
  705. package/dist/global/react-dom-renderer.d.ts +16 -0
  706. package/dist/global/react-dom-renderer.js +2 -0
  707. package/dist/global/rerender-hoc.d.ts +45 -0
  708. package/dist/global/rerender-hoc.js +5 -14
  709. package/dist/global/schedule-raf.d.ts +1 -0
  710. package/dist/global/schedule-raf.js +3 -1
  711. package/dist/global/sniffer.d.ts +3 -0
  712. package/dist/global/theme.d.ts +13 -0
  713. package/dist/global/theme.js +7 -54
  714. package/dist/global/trivial-template-tag.d.ts +1 -0
  715. package/dist/global/typescript-utils.d.ts +2 -0
  716. package/dist/global/typescript-utils.js +4 -0
  717. package/dist/global/url.d.ts +57 -0
  718. package/dist/global/url.js +1 -1
  719. package/dist/global/variables.d.ts +90 -0
  720. package/dist/global/variables.js +1 -0
  721. package/dist/grid/col.d.ts +31 -0
  722. package/dist/grid/col.js +7 -1
  723. package/dist/grid/grid.d.ts +14 -0
  724. package/dist/grid/row.d.ts +40 -0
  725. package/dist/grid/row.js +1 -4
  726. package/dist/group/group.d.ts +12 -0
  727. package/dist/header/header.d.ts +34 -0
  728. package/dist/header/header.js +14 -19
  729. package/dist/header/logo.d.ts +14 -0
  730. package/dist/header/profile.d.ts +73 -0
  731. package/dist/header/profile.js +4 -4
  732. package/dist/header/services-link.d.ts +25 -0
  733. package/dist/header/services.d.ts +33 -0
  734. package/dist/header/services.js +12 -3
  735. package/dist/header/smart-profile.d.ts +36 -0
  736. package/dist/header/smart-profile.js +11 -14
  737. package/dist/header/smart-services.d.ts +25 -0
  738. package/dist/header/smart-services.js +21 -16
  739. package/dist/header/tray-icon.d.ts +32 -0
  740. package/dist/header/tray-icon.js +2 -5
  741. package/dist/header/tray.d.ts +9 -0
  742. package/dist/heading/heading.d.ts +25 -0
  743. package/dist/heading/heading.js +15 -14
  744. package/dist/http/http.d.ts +49 -0
  745. package/dist/http/http.js +47 -12
  746. package/dist/http/http.mock.d.ts +20 -0
  747. package/dist/http/http.mock.js +12 -5
  748. package/dist/hub-source/hub-source.d.ts +42 -0
  749. package/dist/hub-source/hub-source.js +14 -1
  750. package/dist/hub-source/hub-source__user.d.ts +4 -0
  751. package/dist/hub-source/hub-source__user.js +4 -2
  752. package/dist/hub-source/hub-source__users-groups.d.ts +24 -0
  753. package/dist/hub-source/hub-source__users-groups.js +9 -1
  754. package/dist/icon/icon.d.ts +43 -0
  755. package/dist/icon/icon.js +2 -2
  756. package/dist/icon/icon__constants.d.ts +30 -0
  757. package/dist/icon/icon__constants.js +28 -23
  758. package/dist/icon/icon__svg.d.ts +15 -0
  759. package/dist/icon/index.d.ts +2 -0
  760. package/dist/icon/index.js +1 -1
  761. package/dist/input/input.d.ts +69 -0
  762. package/dist/input/input.js +93 -87
  763. package/dist/input-ng/input-ng.js +46 -49
  764. package/dist/island/adaptive-island-hoc.d.ts +65 -0
  765. package/dist/island/adaptive-island-hoc.js +6 -4
  766. package/dist/island/content.d.ts +12 -0
  767. package/dist/island/content.js +8 -6
  768. package/dist/island/header.d.ts +8 -0
  769. package/dist/island/header.js +16 -8
  770. package/dist/island/island.d.ts +82 -0
  771. package/dist/island-legacy/content-legacy.d.ts +10 -0
  772. package/dist/island-legacy/header-legacy.d.ts +10 -0
  773. package/dist/island-legacy/island-legacy.d.ts +12 -0
  774. package/dist/link/clickableLink.d.ts +20 -0
  775. package/dist/link/link.d.ts +157 -0
  776. package/dist/link/link.js +9 -5
  777. package/dist/list/consts.d.ts +74 -0
  778. package/dist/list/consts.js +26 -20
  779. package/dist/list/list.d.ts +191 -0
  780. package/dist/list/list.js +32 -26
  781. package/dist/list/list__custom.d.ts +6 -0
  782. package/dist/list/list__custom.js +8 -13
  783. package/dist/list/list__hint.d.ts +15 -0
  784. package/dist/list/list__item.d.ts +8 -0
  785. package/dist/list/list__item.js +3 -4
  786. package/dist/list/list__link.d.ts +9 -0
  787. package/dist/list/list__link.js +5 -6
  788. package/dist/list/list__separator.d.ts +5 -0
  789. package/dist/list/list__separator.js +2 -4
  790. package/dist/list/list__title.d.ts +5 -0
  791. package/dist/list/list__title.js +2 -4
  792. package/dist/list/list__users-groups-source.d.ts +27 -0
  793. package/dist/list/list__users-groups-source.js +22 -12
  794. package/dist/loader/loader.d.ts +28 -0
  795. package/dist/loader/loader.js +5 -1
  796. package/dist/loader/loader__core.d.ts +75 -0
  797. package/dist/loader/loader__core.js +90 -48
  798. package/dist/loader-inline/loader-inline.d.ts +18 -0
  799. package/dist/loader-inline/loader-inline.js +3 -21
  800. package/dist/loader-inline-ng/loader-inline-ng.js +2 -30
  801. package/dist/loader-screen/loader-screen.d.ts +17 -0
  802. package/dist/login-dialog/login-dialog.d.ts +47 -0
  803. package/dist/login-dialog/login-dialog.js +5 -3
  804. package/dist/login-dialog/service.d.ts +2 -0
  805. package/dist/login-dialog/service.js +6 -2
  806. package/dist/markdown/code.d.ts +9 -0
  807. package/dist/markdown/code.js +3 -3
  808. package/dist/markdown/heading.d.ts +11 -0
  809. package/dist/markdown/heading.js +2 -2
  810. package/dist/markdown/link.d.ts +12 -0
  811. package/dist/markdown/link.js +3 -3
  812. package/dist/markdown/markdown.d.ts +14 -0
  813. package/dist/markdown/markdown.js +19 -21
  814. package/dist/message/message.d.ts +59 -0
  815. package/dist/message/message.js +36 -27
  816. package/dist/old-browsers-message/old-browsers-message.d.ts +2 -0
  817. package/dist/old-browsers-message/old-browsers-message.js +10 -6
  818. package/dist/old-browsers-message/old-browsers-message__stop.d.ts +1 -0
  819. package/dist/old-browsers-message/white-list.d.ts +2 -0
  820. package/dist/old-browsers-message/white-list.js +3 -3
  821. package/dist/pager/pager.d.ts +83 -0
  822. package/dist/pager/pager.js +44 -37
  823. package/dist/pager-ng/pager-ng.js +6 -7
  824. package/dist/panel/panel.d.ts +12 -0
  825. package/dist/permissions/permissions.d.ts +111 -0
  826. package/dist/permissions/permissions.js +23 -4
  827. package/dist/permissions/permissions__cache.d.ts +93 -0
  828. package/dist/permissions/permissions__cache.js +10 -3
  829. package/dist/permissions-ng/permissions-ng.js +9 -9
  830. package/dist/popup/popup.consts.d.ts +37 -0
  831. package/dist/popup/popup.consts.js +43 -29
  832. package/dist/popup/popup.d.ts +141 -0
  833. package/dist/popup/popup.js +84 -54
  834. package/dist/popup/popup.target.d.ts +7 -0
  835. package/dist/popup/popup.target.js +3 -4
  836. package/dist/popup/position.d.ts +30 -0
  837. package/dist/popup/position.js +11 -6
  838. package/dist/popup-menu/popup-menu.d.ts +59 -0
  839. package/dist/popup-menu/popup-menu.js +7 -6
  840. package/dist/progress-bar/progress-bar.d.ts +58 -0
  841. package/dist/progress-bar/progress-bar.js +6 -8
  842. package/dist/progress-bar-ng/progress-bar-ng.js +0 -1
  843. package/dist/promised-click-ng/promised-click-ng.js +2 -2
  844. package/dist/query-assist/query-assist.d.ts +327 -0
  845. package/dist/query-assist/query-assist.js +136 -88
  846. package/dist/query-assist/query-assist__suggestions.d.ts +29 -0
  847. package/dist/query-assist-ng/query-assist-ng.js +2 -7
  848. package/dist/radio/radio.d.ts +18 -0
  849. package/dist/radio/radio__item.d.ts +28 -0
  850. package/dist/radio/radio__item.js +5 -2
  851. package/dist/save-field-ng/save-field-ng.js +2 -9
  852. package/dist/select/select.d.ts +289 -0
  853. package/dist/select/select.js +191 -218
  854. package/dist/select/select__filter.d.ts +20 -0
  855. package/dist/select/select__filter.js +3 -1
  856. package/dist/select/select__popup.d.ts +123 -0
  857. package/dist/select/select__popup.js +96 -77
  858. package/dist/select-ng/select-ng.js +8 -9
  859. package/dist/select-ng/select-ng__lazy.js +11 -16
  860. package/dist/shortcuts/core.d.ts +74 -0
  861. package/dist/shortcuts/core.js +16 -10
  862. package/dist/shortcuts/shortcut-title.d.ts +1 -0
  863. package/dist/shortcuts/shortcuts-hoc.d.ts +69 -0
  864. package/dist/shortcuts/shortcuts.d.ts +28 -0
  865. package/dist/shortcuts-hint-ng/shortcuts-hint-ng.js +2 -2
  866. package/dist/sidebar-ng/sidebar-ng.js +2 -2
  867. package/dist/storage/storage.d.ts +18 -0
  868. package/dist/storage/storage.js +10 -8
  869. package/dist/storage/storage__fallback.d.ts +79 -0
  870. package/dist/storage/storage__fallback.js +31 -19
  871. package/dist/storage/storage__local.d.ts +38 -0
  872. package/dist/storage/storage__local.js +43 -26
  873. package/dist/style.css +1 -1
  874. package/dist/tab-trap/tab-trap.d.ts +43 -0
  875. package/dist/tab-trap/tab-trap.js +17 -5
  876. package/dist/table/cell.d.ts +13 -0
  877. package/dist/table/disable-hover-hoc.d.ts +68 -0
  878. package/dist/table/disable-hover-hoc.js +1 -1
  879. package/dist/table/header-cell.d.ts +43 -0
  880. package/dist/table/header-cell.js +4 -0
  881. package/dist/table/header.d.ts +60 -0
  882. package/dist/table/header.js +9 -5
  883. package/dist/table/multitable.d.ts +25 -0
  884. package/dist/table/multitable.js +21 -7
  885. package/dist/table/row-with-focus-sensor.d.ts +18 -0
  886. package/dist/table/row-with-focus-sensor.js +8 -5
  887. package/dist/table/row.d.ts +56 -0
  888. package/dist/table/row.js +27 -25
  889. package/dist/table/selection-adapter.d.ts +5 -0
  890. package/dist/table/selection-shortcuts-hoc.d.ts +17 -0
  891. package/dist/table/selection-shortcuts-hoc.js +44 -19
  892. package/dist/table/selection.d.ts +47 -0
  893. package/dist/table/selection.js +18 -1
  894. package/dist/table/smart-table.d.ts +60 -0
  895. package/dist/table/smart-table.js +6 -4
  896. package/dist/table/table.d.ts +160 -0
  897. package/dist/table/table.js +59 -39
  898. package/dist/table-legacy-ng/table-legacy-ng.js +6 -7
  899. package/dist/table-legacy-ng/table-legacy-ng__pager.js +6 -7
  900. package/dist/table-ng/smart-table-ng.js +2 -1
  901. package/dist/table-ng/table-ng.js +4 -3
  902. package/dist/tabs/collapsible-more.d.ts +29 -0
  903. package/dist/tabs/collapsible-more.js +2 -1
  904. package/dist/tabs/collapsible-tab.d.ts +16 -0
  905. package/dist/tabs/collapsible-tab.js +9 -10
  906. package/dist/tabs/collapsible-tabs.d.ts +43 -0
  907. package/dist/tabs/collapsible-tabs.js +58 -107
  908. package/dist/tabs/custom-item.d.ts +9 -0
  909. package/dist/tabs/dumb-tabs.d.ts +33 -0
  910. package/dist/tabs/dumb-tabs.js +7 -12
  911. package/dist/tabs/smart-tabs.d.ts +20 -0
  912. package/dist/tabs/smart-tabs.js +2 -1
  913. package/dist/tabs/tab-link.d.ts +18 -0
  914. package/dist/tabs/tab.d.ts +27 -0
  915. package/dist/tabs/tabs.d.ts +7 -0
  916. package/dist/tabs/tabs.js +2 -1
  917. package/dist/tabs-ng/tabs-ng.js +1 -6
  918. package/dist/tabs-ng/tabs-ng__template.js +1 -1
  919. package/dist/tag/tag.d.ts +64 -0
  920. package/dist/tag/tag.js +9 -4
  921. package/dist/tags-input/tags-input.d.ts +154 -0
  922. package/dist/tags-input/tags-input.js +68 -39
  923. package/dist/tags-input-ng/tags-input-ng.js +7 -8
  924. package/dist/tags-list/tags-list.d.ts +46 -0
  925. package/dist/tags-list/tags-list.js +2 -8
  926. package/dist/text/text.d.ts +17 -0
  927. package/dist/text/text.js +1 -1
  928. package/dist/toggle/toggle.d.ts +39 -0
  929. package/dist/toggle/toggle.js +7 -10
  930. package/dist/toggle-ng/toggle-ng.js +0 -1
  931. package/dist/tooltip/tooltip.d.ts +65 -0
  932. package/dist/tooltip/tooltip.js +19 -7
  933. package/dist/user-agreement/service.d.ts +161 -0
  934. package/dist/user-agreement/service.js +29 -26
  935. package/dist/user-agreement/toolbox.eula.d.ts +2 -0
  936. package/dist/user-agreement/user-agreement.d.ts +69 -0
  937. package/dist/user-agreement/user-agreement.js +4 -7
  938. package/dist/user-card/card.d.ts +52 -0
  939. package/dist/user-card/smart-user-card-tooltip.d.ts +20 -0
  940. package/dist/user-card/smart-user-card-tooltip.js +5 -9
  941. package/dist/user-card/tooltip.d.ts +31 -0
  942. package/dist/user-card/tooltip.js +6 -2
  943. package/dist/user-card/user-card.d.ts +11 -0
  944. package/dist/user-card/user-card.js +3 -7
  945. package/dist/user-card-ng/user-card-ng.js +5 -9
  946. package/package.json +77 -52
  947. package/typings.d.ts +97 -0
  948. package/webpack.config.js +4 -12
  949. package/components/alert/alert.examples.js +0 -143
  950. package/components/alert/alert.test.js +0 -61
  951. package/components/alert/container.test.js +0 -12
  952. package/components/alert-service/alert-service.examples.js +0 -91
  953. package/components/alert-service/alert-service.test.js +0 -88
  954. package/components/analytics/analytics.examples.js +0 -47
  955. package/components/analytics/analytics.test.js +0 -419
  956. package/components/auth/auth.examples.js +0 -122
  957. package/components/auth/auth.test.js +0 -772
  958. package/components/auth/request-builder.test.js +0 -64
  959. package/components/auth/response-parser.test.js +0 -89
  960. package/components/auth/storage.test.js +0 -178
  961. package/components/auth/token-validator.test.js +0 -199
  962. package/components/auth-dialog/auth-dialog.examples.js +0 -75
  963. package/components/auth-dialog/auth-dialog.test.js +0 -11
  964. package/components/auth-dialog-service/auth-dialog-service.examples.js +0 -66
  965. package/components/auth-dialog-service/auth-dialog-service.test.js +0 -75
  966. package/components/avatar/avatar.examples.js +0 -46
  967. package/components/avatar/avatar.test.js +0 -59
  968. package/components/badge/badge.examples.js +0 -26
  969. package/components/badge/badge.test.js +0 -34
  970. package/components/button/button.examples.js +0 -219
  971. package/components/button/button.test.js +0 -64
  972. package/components/button-group/button-group.examples.js +0 -58
  973. package/components/button-group/button-group.test.js +0 -10
  974. package/components/button-set/button-set.examples.js +0 -24
  975. package/components/button-set/button-set.test.js +0 -10
  976. package/components/button-toolbar/button-toolbar.examples.js +0 -31
  977. package/components/button-toolbar/button-toolbar.test.js +0 -21
  978. package/components/caret/caret.examples.js +0 -39
  979. package/components/caret/caret.test.js +0 -137
  980. package/components/checkbox/checkbox.examples.js +0 -67
  981. package/components/checkbox/checkbox.test.js +0 -78
  982. package/components/code/code.examples.js +0 -92
  983. package/components/code/code.test.js +0 -100
  984. package/components/confirm/confirm.examples.js +0 -93
  985. package/components/confirm/confirm.test.js +0 -28
  986. package/components/confirm-service/confirm-service.examples.js +0 -61
  987. package/components/confirm-service/confirm-service.test.js +0 -59
  988. package/components/content-layout/content-layout.examples.js +0 -188
  989. package/components/content-layout/content-layout.test.js +0 -41
  990. package/components/contenteditable/contenteditable.examples.js +0 -45
  991. package/components/contenteditable/contenteditable.test.js +0 -73
  992. package/components/data-list/data-list.examples.js +0 -116
  993. package/components/data-list/data-list.test.js +0 -40
  994. package/components/date-picker/date-picker.examples.js +0 -345
  995. package/components/date-picker/date-picker.test.js +0 -89
  996. package/components/dialog/dialog.examples.js +0 -209
  997. package/components/dialog/dialog.test.js +0 -62
  998. package/components/dropdown/dropdown.examples.js +0 -151
  999. package/components/dropdown/dropdown.test.js +0 -175
  1000. package/components/dropdown-menu/dropdown-menu.examples.js +0 -47
  1001. package/components/dropdown-menu/dropdown-menu.test.js +0 -76
  1002. package/components/error-bubble/error-bubble.examples.js +0 -96
  1003. package/components/error-bubble/error-bubble.test.js +0 -41
  1004. package/components/error-message/error-message.examples.js +0 -33
  1005. package/components/error-message/error-message.test.js +0 -21
  1006. package/components/footer/footer.examples.js +0 -56
  1007. package/components/footer/footer.test.js +0 -78
  1008. package/components/global/conic-gradient.js +0 -31
  1009. package/components/global/data-tests.test.js +0 -18
  1010. package/components/global/dom.examples.js +0 -39
  1011. package/components/global/dom.test.js +0 -99
  1012. package/components/global/fuzzy-highlight.test.js +0 -52
  1013. package/components/global/get-uid.test.js +0 -21
  1014. package/components/global/listeners.test.js +0 -78
  1015. package/components/global/radial-gradient-mask.js +0 -43
  1016. package/components/global/supports-css.js +0 -17
  1017. package/components/global/url.test.js +0 -138
  1018. package/components/global/variables.examples.js +0 -160
  1019. package/components/global/variables_dark.js +0 -55
  1020. package/components/grid/grid.examples.js +0 -291
  1021. package/components/grid/grid.test.js +0 -72
  1022. package/components/group/group.examples.js +0 -27
  1023. package/components/group/group.test.js +0 -21
  1024. package/components/header/header.examples.js +0 -118
  1025. package/components/header/header.test.js +0 -21
  1026. package/components/heading/heading.examples.js +0 -64
  1027. package/components/heading/heading.test.js +0 -29
  1028. package/components/http/http.examples.js +0 -34
  1029. package/components/http/http.test.js +0 -187
  1030. package/components/hub-source/hub-source.test.js +0 -200
  1031. package/components/hub-source/hub-source__users-groups.test.js +0 -91
  1032. package/components/icon/icon.examples.js +0 -146
  1033. package/components/icon/icon.test.js +0 -51
  1034. package/components/input/input.examples.js +0 -140
  1035. package/components/input/input.test.js +0 -40
  1036. package/components/island/island.examples.js +0 -74
  1037. package/components/island/island.test.js +0 -59
  1038. package/components/island-legacy/island-legacy.examples.js +0 -33
  1039. package/components/island-legacy/island-legacy.test.js +0 -21
  1040. package/components/link/link.examples.js +0 -86
  1041. package/components/link/link.test.js +0 -182
  1042. package/components/list/list.examples.js +0 -271
  1043. package/components/list/list.test.js +0 -428
  1044. package/components/list/list__item.test.js +0 -60
  1045. package/components/list/list__users-groups-source.test.js +0 -125
  1046. package/components/loader/loader.examples.js +0 -22
  1047. package/components/loader/loader__core.test.js +0 -232
  1048. package/components/loader-inline/inject-styles.js +0 -28
  1049. package/components/loader-inline/loader-inline.examples.js +0 -106
  1050. package/components/loader-inline/loader-inline.test.js +0 -21
  1051. package/components/loader-screen/loader-screen.examples.js +0 -40
  1052. package/components/markdown/markdown.examples.js +0 -110
  1053. package/components/markdown/markdown.test.js +0 -60
  1054. package/components/message/message.examples.js +0 -78
  1055. package/components/message/message.test.js +0 -26
  1056. package/components/old-browsers-message/old-browsers-message.examples.js +0 -37
  1057. package/components/pager/pager.examples.js +0 -291
  1058. package/components/pager/pager.test.js +0 -56
  1059. package/components/panel/panel.examples.js +0 -33
  1060. package/components/panel/panel.test.js +0 -20
  1061. package/components/permissions/permissions.test.js +0 -435
  1062. package/components/permissions/permissions__cache.test.js +0 -75
  1063. package/components/popup/popup.examples.js +0 -340
  1064. package/components/popup/popup.test.js +0 -242
  1065. package/components/popup/position.test.js +0 -192
  1066. package/components/popup-menu/popup-menu.examples.js +0 -38
  1067. package/components/popup-menu/popup-menu.test.js +0 -29
  1068. package/components/progress-bar/progress-bar.examples.js +0 -56
  1069. package/components/progress-bar/progress-bar.test.js +0 -114
  1070. package/components/query-assist/query-assist.examples.js +0 -305
  1071. package/components/query-assist/query-assist.test.js +0 -690
  1072. package/components/radio/radio.examples.js +0 -58
  1073. package/components/radio/radio.test.js +0 -90
  1074. package/components/radio/radio__item.test.js +0 -98
  1075. package/components/select/select.examples.js +0 -1023
  1076. package/components/select/select.test.js +0 -1201
  1077. package/components/select/select__popup.test.js +0 -156
  1078. package/components/shortcuts/core.test.js +0 -282
  1079. package/components/shortcuts/shortcuts-hoc.test.js +0 -53
  1080. package/components/shortcuts/shortcuts.test.js +0 -45
  1081. package/components/storage/storage.examples.js +0 -37
  1082. package/components/storage/storage.test.js +0 -248
  1083. package/components/tab-trap/tab-trap.examples.js +0 -49
  1084. package/components/table/table.examples.js +0 -346
  1085. package/components/tabs/tabs.examples.js +0 -275
  1086. package/components/tabs/tabs.test.js +0 -26
  1087. package/components/tag/tag.examples.js +0 -50
  1088. package/components/tag/tag.test.js +0 -21
  1089. package/components/tags-input/tag-input.examples.js +0 -133
  1090. package/components/tags-input/tags-input.test.js +0 -234
  1091. package/components/tags-list/tags-list.examples.js +0 -41
  1092. package/components/tags-list/tags-list.test.js +0 -43
  1093. package/components/text/text.examples.js +0 -25
  1094. package/components/text/text.test.js +0 -25
  1095. package/components/toggle/toggle.examples.js +0 -79
  1096. package/components/toggle/toggle.test.js +0 -34
  1097. package/components/tooltip/tooltip.examples.js +0 -118
  1098. package/components/tooltip/tooltip.test.js +0 -128
  1099. package/components/user-agreement/user-agreement.examples.js +0 -112
  1100. package/components/user-card/user-card.examples.js +0 -88
  1101. package/components/user-card/user-card.test.js +0 -102
  1102. package/components/welcome.examples.js +0 -25
  1103. package/dist/_helpers/inject-styles.js +0 -22
  1104. package/dist/global/conic-gradient.js +0 -35
  1105. package/dist/global/radial-gradient-mask.js +0 -49
  1106. package/dist/global/supports-css.js +0 -20
  1107. package/dist/global/variables_dark.js +0 -57
  1108. package/dist/loader-inline/inject-styles.js +0 -11
@@ -1,1201 +0,0 @@
1
- /* eslint-disable no-magic-numbers*/
2
- import React from 'react';
3
- import {Simulate} from 'react-dom/test-utils';
4
- import {shallow, mount} from 'enzyme';
5
-
6
- import List from '../list/list';
7
- import Input from '../input/input';
8
- import simulateCombo from '../../test-helpers/simulate-combo';
9
-
10
- import Select from './select';
11
- import styles from './select.css';
12
-
13
- function simulateInput(target, value) {
14
- target.value = value;
15
-
16
- Simulate.change(target, {target});
17
- }
18
-
19
- const selectedIconSelector = `.${styles.selectedIcon.split(/\s/)[0]}`;
20
-
21
- describe('Select', () => {
22
- const testData = [
23
- {key: 1, label: 'first1', type: List.ListProps.Type.ITEM},
24
- {key: 2, label: 'test2', type: List.ListProps.Type.ITEM},
25
- {key: 3, label: 'test3', type: List.ListProps.Type.ITEM},
26
- {key: 4, label: 'four4', selectedLabel: '', type: List.ListProps.Type.ITEM}
27
- ];
28
-
29
- const defaultProps = () => ({
30
- data: testData,
31
- selected: testData[0],
32
- onChange: sandbox.spy(),
33
- onFilter: sandbox.spy(),
34
- onFocus: sandbox.spy(),
35
- onBlur: sandbox.spy(),
36
- filter: true
37
- });
38
-
39
- let mountWrapper;
40
- const shallowSelect = props => shallow(<Select {...defaultProps()} {...props}/>);
41
- const mountSelect = props => {
42
- mountWrapper = mount(<Select {...defaultProps()} {...props}/>);
43
- return mountWrapper;
44
- };
45
-
46
- afterEach(() => {
47
- if (mountWrapper) {
48
- mountWrapper.unmount();
49
- mountWrapper = null;
50
- }
51
- });
52
-
53
- it('Should initialize', () => {
54
- shallowSelect().should.exist;
55
- });
56
-
57
- it('Should save selected item in state', () => {
58
- const wrapper = mountSelect();
59
- wrapper.should.have.state('selected', wrapper.prop('selected'));
60
- });
61
-
62
- it('Should provide select types', () => {
63
- Select.Type.should.exist;
64
- Select.Type.BUTTON.should.exist;
65
- Select.Type.INPUT.should.exist;
66
- Select.Type.CUSTOM.should.exist;
67
- Select.Type.MATERIAL.should.exist;
68
- Select.Type.INLINE.should.exist;
69
- });
70
-
71
- it('Should take provided className', () => {
72
- const wrapper = mountSelect({className: 'foo-bar'});
73
- wrapper.should.have.className('foo-bar');
74
- });
75
-
76
- it('Should compute selected index', () => {
77
- const instance = shallowSelect().instance();
78
- const selectedIndex = instance._getSelectedIndex(testData[2], testData);
79
- selectedIndex.should.equal(2);
80
- });
81
-
82
- it('should update rendered data if props change', () => {
83
- const wrapper = shallowSelect();
84
- wrapper.setProps({data: [testData[0]]});
85
- wrapper.state('shownData').should.deep.equal([testData[0]]);
86
- });
87
-
88
- it('Should use selectedLabel for select button title if provided', () => {
89
- const wrapper = shallowSelect({
90
- selected: {
91
- key: 1, label: 'test1', selectedLabel: 'testLabel'
92
- }
93
- });
94
- const instance = wrapper.instance();
95
- const selectedLabel = instance._getSelectedString();
96
- selectedLabel.should.equal('testLabel');
97
- });
98
-
99
- it('Should use label for select button title', () => {
100
- const instance = shallowSelect().instance();
101
- const selectedLabel = instance._getSelectedString();
102
- selectedLabel.should.equal('first1');
103
- });
104
-
105
- it('Should clear selected on clearing', () => {
106
- const wrapper = shallowSelect();
107
- const instance = wrapper.instance();
108
- instance.clear();
109
- wrapper.should.have.state('selected', null);
110
- });
111
-
112
- it('Should call onChange on clearing', () => {
113
- const wrapper = mountSelect();
114
- const instance = wrapper.instance();
115
- instance.clear();
116
- wrapper.prop('onChange').should.be.calledOnce;
117
- wrapper.prop('onChange').should.be.called.calledWith(null);
118
- });
119
-
120
- it('Should pass selected item and event to onChange', () => {
121
- const wrapper = mountSelect();
122
- const instance = wrapper.instance();
123
- instance._listSelectHandler({item: 'foo'}, {nativeEvent: 'foo'});
124
- wrapper.prop('onChange').should.be.called.calledWith({item: 'foo'}, {nativeEvent: 'foo'});
125
- });
126
-
127
- it('Should clear selected when rerendering with no selected item', () => {
128
- const wrapper = shallowSelect();
129
- wrapper.setProps({selected: null});
130
- wrapper.should.have.state('selected', null);
131
- });
132
-
133
- it('Should handle UP, DOWN and ENTER shortcuts', () => {
134
- const wrapper = shallowSelect();
135
- const instance = wrapper.instance();
136
- const shortcutsMap = instance.getShortcutsMap();
137
- shortcutsMap.enter.should.exist;
138
- shortcutsMap.up.should.exist;
139
- shortcutsMap.down.should.exist;
140
- });
141
-
142
- it('Should generate unique scope for shortcuts', () => {
143
- const firstTimeScope = shallowSelect().instance().shortcutsScope;
144
- const secondTimeScope = shallowSelect().instance().shortcutsScope;
145
- secondTimeScope.should.not.be.equal(firstTimeScope);
146
- });
147
-
148
- it('Should open popup on key handling if not opened', () => {
149
- const wrapper = mountSelect({type: Select.Type.INPUT});
150
- const instance = wrapper.instance();
151
- instance._showPopup = sandbox.spy();
152
- wrapper.setState({focused: true});
153
- instance._inputShortcutHandler();
154
- instance._showPopup.should.be.calledOnce;
155
- });
156
-
157
- it('Should not open popup if disabled', () => {
158
- const wrapper = mountSelect({disabled: true});
159
- const instance = wrapper.instance();
160
- instance._showPopup = sandbox.spy();
161
- instance._clickHandler();
162
- instance._showPopup.should.not.be.called;
163
- });
164
-
165
- it('Should close popup on click if it is already open', () => {
166
- const wrapper = mountSelect();
167
- const instance = wrapper.instance();
168
- instance._hidePopup = sandbox.spy();
169
- instance._showPopup();
170
- instance._clickHandler();
171
- instance._hidePopup.should.be.called;
172
- });
173
-
174
- it('Should call onAdd on adding', () => {
175
- const wrapper = mountSelect({onAdd: sandbox.spy()});
176
- const instance = wrapper.instance();
177
- instance.addHandler();
178
- wrapper.prop('onAdd').should.be.calledOnce;
179
- });
180
-
181
- it('Should call onFocus on input focus', () => {
182
- const wrapper = mountSelect({type: Select.Type.INPUT});
183
- const instance = wrapper.instance();
184
-
185
- Simulate.focus(instance.filter);
186
- wrapper.prop('onFocus').should.be.called;
187
- });
188
-
189
- it('Should call onBlur on input blur', () => {
190
- const wrapper = mountSelect({type: Select.Type.INPUT});
191
- const instance = wrapper.instance();
192
-
193
- Simulate.blur(instance.filter);
194
- wrapper.prop('onBlur').should.be.called;
195
- });
196
-
197
- it('Should close popup if input lost focus in INPUT mode', () => {
198
- sandbox.useFakeTimers({toFake: ['setTimeout']});
199
- const wrapper = mountSelect({type: Select.Type.INPUT});
200
- const instance = wrapper.instance();
201
- instance._showPopup();
202
-
203
- Simulate.blur(instance.filter);
204
- sandbox.clock.tick();
205
- instance._popup.props.hidden.should.be.true;
206
- });
207
-
208
- it('Should not close popup while clicking on popup in INPUT mode', () => {
209
- sandbox.useFakeTimers({toFake: ['setTimeout']});
210
- const wrapper = mountSelect({type: Select.Type.INPUT});
211
- const instance = wrapper.instance();
212
- instance._showPopup();
213
-
214
- Simulate.mouseDown(instance._popup.list.container);
215
- Simulate.blur(instance.filter);
216
- sandbox.clock.tick();
217
- instance._popup.props.hidden.should.be.false;
218
- });
219
-
220
- describe('Derived state', () => {
221
-
222
- let wrapper;
223
- beforeEach(() => {
224
- wrapper = shallowSelect();
225
- });
226
-
227
- it('Should update shown data', () => {
228
- const {shownData} = wrapper.state();
229
- wrapper.setProps({data: []});
230
-
231
- wrapper.state().shownData.should.deep.equal([]);
232
- wrapper.state().shownData.should.not.equal(shownData);
233
- });
234
-
235
- it('Should not update shown data if data is not passed', () => {
236
- const {shownData} = wrapper.state();
237
- wrapper.setProps({});
238
-
239
- wrapper.state().shownData.should.equal(shownData);
240
- });
241
-
242
- it('Should not update shown data if data the same as previous', () => {
243
- const {shownData} = wrapper.state();
244
- wrapper.setProps({data: testData});
245
-
246
- wrapper.state().shownData.should.equal(shownData);
247
- });
248
-
249
- it('Should reset selection when toggling multiple state', () => {
250
- wrapper.setProps({multiple: true});
251
- wrapper.state().selected.should.deep.equal([]);
252
-
253
- wrapper.setProps({multiple: false});
254
- should.equal(wrapper.state().selected, null);
255
- });
256
-
257
- it('Should not reset selection if mulitiple prop is the same as previous', () => {
258
- const {selected} = wrapper.state();
259
- wrapper.setProps({multiple: false});
260
-
261
- wrapper.state().selected.should.equal(selected);
262
- });
263
-
264
- it('Should update selected index for select', () => {
265
- const selectedItem = createItem();
266
-
267
- wrapper.setProps({
268
- selected: selectedItem,
269
- data: [createItem(), selectedItem]
270
- });
271
-
272
- wrapper.state().selectedIndex.should.equal(1);
273
- });
274
-
275
- it('Should update selected index for multiple select if selected is changed', () => {
276
- const selectedItem = createItem();
277
-
278
- wrapper.setProps({
279
- multiple: true,
280
- selected: [selectedItem],
281
- data: [createItem(), selectedItem]
282
- });
283
-
284
- wrapper.state().selectedIndex.should.equal(1);
285
- });
286
-
287
- it('Should update selected index for multiple select if selected is changed but count of element is the same', () => {
288
- const firstItem = createItem();
289
- const secondItem = createItem();
290
-
291
- wrapper.setProps({
292
- multiple: true,
293
- selected: [secondItem],
294
- data: [firstItem, secondItem]
295
- });
296
-
297
- wrapper.setProps({
298
- selected: [firstItem]
299
- });
300
-
301
- wrapper.state().selectedIndex.should.equal(0);
302
- });
303
-
304
- function createItem() {
305
- createItem.key = (createItem.key || 0) + 1;
306
- return {key: createItem.key};
307
- }
308
- });
309
-
310
- describe('DOM', () => {
311
- it('Should place select button inside container', () => {
312
- const wrapper = mountSelect();
313
- wrapper.should.have.className(styles.select);
314
- });
315
-
316
- it('Should disable select button if needed', () => {
317
- const wrapper = mountSelect({
318
- disabled: true
319
- });
320
- wrapper.should.have.className(styles.disabled);
321
- wrapper.instance().button.should.have.attr('disabled');
322
- });
323
-
324
- it('Should not disable select button if not needed', () => {
325
- const wrapper = mountSelect({
326
- disabled: false
327
- });
328
- wrapper.instance().button.should.not.have.attr('disabled');
329
- });
330
-
331
- it('Should place input inside in INPUT mode', () => {
332
- const wrapper = mountSelect({type: Select.Type.INPUT});
333
- wrapper.should.have.descendants(Input);
334
- });
335
-
336
- it('Should place icons inside', () => {
337
- const wrapper = mountSelect();
338
- wrapper.should.have.descendants(`.${styles.icons}`);
339
- });
340
-
341
- it('Should add selected item icon to button', () => {
342
- const wrapper = mountSelect({
343
- selected: {
344
- key: 1,
345
- label: 'test',
346
- icon: 'fakeImageUrl'
347
- }
348
- });
349
- wrapper.should.have.descendants(selectedIconSelector);
350
- });
351
-
352
- it('Should not display selected item icon if it is not provided', () => {
353
- const wrapper = shallowSelect({selected: {key: 1, label: 'test', icon: null}});
354
- wrapper.should.not.have.descendants(selectedIconSelector);
355
- });
356
-
357
- it('Should display selected item icon', () => {
358
- const wrapper = mountSelect({
359
- selected: {
360
- key: 1,
361
- label: 'test',
362
- icon: 'http://fake.image/'
363
- }
364
- });
365
- const icon = wrapper.find(selectedIconSelector).getDOMNode();
366
- icon.style.backgroundImage.should.contain('http://fake.image/');
367
- });
368
-
369
- it('Should place icons inside in INPUT mode', () => {
370
- const wrapper = mountSelect({type: Select.Type.INPUT});
371
- wrapper.should.have.descendants(`.${styles.icons}`);
372
- });
373
-
374
- it('Should open select dropdown on click', () => {
375
- const wrapper = mountSelect();
376
- const instance = wrapper.instance();
377
- sandbox.spy(instance, '_showPopup');
378
- wrapper.find('button').first().simulate('click');
379
-
380
- instance._showPopup.should.be.called;
381
- });
382
-
383
- describe('Bottom toolbar', () => {
384
- it('Should not add "Add" button if enabled but filter query is empty', () => {
385
- const wrapper = mountSelect({add: {}});
386
- const instance = wrapper.instance();
387
- instance.filterValue = sandbox.stub().returns('');
388
- instance._showPopup();
389
- instance._popup.popup.popup.should.not.contain('.ring-select__button');
390
- });
391
-
392
- it('Should add "Add" button if enabled and filter query not empty', () => {
393
- const wrapper = mountSelect({add: {}});
394
- const instance = wrapper.instance();
395
- instance.filterValue = sandbox.stub().returns('test');
396
- instance._showPopup();
397
- instance._popup.popup.popup.should.contain(`.${styles.button}`);
398
- });
399
-
400
- it('Should add "Add" button if alwaysVisible is set', () => {
401
- const wrapper = mountSelect({
402
- add: {
403
- alwaysVisible: true
404
- }
405
- });
406
- const instance = wrapper.instance();
407
- instance._showPopup();
408
- instance._popup.popup.popup.should.contain(`.${styles.button}`);
409
- });
410
-
411
- it('Should place label instead filterValue to "Add" button if alwaysVisible is set', () => {
412
- const wrapper = mountSelect({
413
- add: {
414
- alwaysVisible: true,
415
- label: 'Add Something'
416
- }
417
- });
418
- const instance = wrapper.instance();
419
- instance._showPopup();
420
- const addButton = instance._popup.popup.popup.querySelector(`.${styles.button}`);
421
-
422
- addButton.should.contain.text('Add Something');
423
- });
424
-
425
- it('Should process filterValue into a label at the "Add" button if "add.label" prop is a function', () => {
426
- const wrapper = mountSelect({
427
- add: {
428
- label: value => `--${value}--`
429
- }
430
- });
431
- const instance = wrapper.instance();
432
- instance.filterValue = sandbox.stub().returns('test');
433
- instance._showPopup();
434
- const addButton = instance._popup.popup.popup.querySelector(`.${styles.button}`);
435
-
436
- addButton.should.contain.text('--test--');
437
- });
438
-
439
- it('Should add hint if specified', () => {
440
- const wrapper = mountSelect({
441
- hint: 'blah blah'
442
- });
443
- const instance = wrapper.instance();
444
- instance._showPopup();
445
- instance._popup.popup.popup.should.contain('[data-test=ring-list-hint]');
446
- });
447
-
448
- it('Hint should be placed under "add" button', () => {
449
- const wrapper = mountSelect({
450
- add: {},
451
- hint: 'blah blah'
452
- });
453
- const instance = wrapper.instance();
454
- instance._showPopup();
455
- const hint = instance._popup.popup.popup.querySelectorAll('[data-test=ring-list-hint]');
456
-
457
- hint.should.exist;
458
- });
459
- });
460
- });
461
-
462
- describe('getListItems', () => {
463
- it('Should filter items by label', () => {
464
- const wrapper = shallowSelect();
465
- const instance = wrapper.instance();
466
- const filtered = instance.getListItems('test3');
467
- filtered.length.should.equal(1);
468
- filtered[0].label.should.equal('test3');
469
- });
470
-
471
- it('Should filter items by part of label', () => {
472
- const wrapper = shallowSelect();
473
- const instance = wrapper.instance();
474
- const filtered = instance.getListItems('test');
475
- filtered.length.should.equal(2);
476
- });
477
-
478
- it('Should not filter separators', () => {
479
- const separators = [{
480
- type: List.ListProps.Type.SEPARATOR,
481
- key: 1,
482
- description: 'test'
483
- }];
484
- const wrapper = shallowSelect({data: separators});
485
- const instance = wrapper.instance();
486
-
487
- const filtered = instance.getListItems('foo');
488
- filtered.should.deep.equal(separators);
489
- });
490
-
491
- it('Should not filter hints', () => {
492
- const hints = [{
493
- type: List.ListProps.Type.HINT,
494
- key: 1,
495
- description: 'test'
496
- }];
497
- const wrapper = shallowSelect({data: hints});
498
- const instance = wrapper.instance();
499
-
500
- const filtered = instance.getListItems('foo');
501
- filtered.should.deep.equal(hints);
502
- });
503
-
504
- it('Should filter custom items with label', () => {
505
- const customItems = [{
506
- type: List.ListProps.Type.CUSTOM,
507
- key: 1,
508
- label: 'bar',
509
- template: <div/>
510
- }];
511
- const wrapper = shallowSelect({data: customItems});
512
- const instance = wrapper.instance();
513
-
514
- const filtered = instance.getListItems('foo');
515
- filtered.should.deep.equal([]);
516
- });
517
-
518
- it('Should not filter items without label', () => {
519
- const items = [{
520
- key: 1,
521
- description: 'test'
522
- }];
523
- const wrapper = shallowSelect({data: items});
524
- const instance = wrapper.instance();
525
-
526
- const filtered = instance.getListItems('foo');
527
- filtered.should.deep.equal(items);
528
- });
529
-
530
- it('Should use custom filter.fn if provided', () => {
531
- const filterStub = sandbox.stub().returns(true);
532
-
533
- const wrapper = shallowSelect({
534
- filter: {fn: filterStub}
535
- });
536
- const instance = wrapper.instance();
537
-
538
- const filtered = instance.getListItems('test3');
539
-
540
- filtered.length.should.equal(testData.length);
541
- filterStub.should.have.callCount(4);
542
- });
543
-
544
- it('Should write filter query on add button if enabled', () => {
545
- const wrapper = shallowSelect({
546
- add: {
547
- prefix: 'Add some'
548
- }
549
- });
550
- const instance = wrapper.instance();
551
-
552
- instance.getListItems('foo');
553
-
554
- wrapper.state().addButton.label.should.equal('foo');
555
- });
556
- });
557
-
558
- describe('Filtering', () => {
559
- it('Should call onFilter on input changes', () => {
560
- const wrapper = mountSelect();
561
- const instance = wrapper.instance();
562
- wrapper.setState({
563
- focused: true,
564
- showPopup: true
565
- });
566
- simulateInput(instance._popup.filter, 'a');
567
- wrapper.prop('onFilter').should.be.called;
568
- });
569
-
570
- it('Should save input changes', () => {
571
- const wrapper = mountSelect();
572
- const instance = wrapper.instance();
573
- wrapper.setState({showPopup: true});
574
- simulateInput(instance._popup.filter, 'a');
575
- wrapper.should.have.state('filterValue', 'a');
576
- });
577
-
578
- it('Should open popup on input changes if in focus', () => {
579
- const wrapper = mountSelect({type: Select.Type.INPUT});
580
- const instance = wrapper.instance();
581
- instance._showPopup = sandbox.spy();
582
- wrapper.setState({focused: true});
583
- simulateInput(instance.filter, 'a');
584
- instance._showPopup.should.be.called;
585
- });
586
-
587
- it('should filter if not focused but not in input mode', () => {
588
- const wrapper = mountSelect({type: Select.Type.MATERIAL});
589
- const instance = wrapper.instance();
590
- wrapper.setState({showPopup: true});
591
- simulateInput(instance._popup.filter, 'a');
592
-
593
- wrapper.prop('onFilter').should.be.called;
594
- });
595
-
596
- it('Should not open popup on input changes if not in focus', () => {
597
- const wrapper = mountSelect({type: Select.Type.INPUT});
598
- const instance = wrapper.instance();
599
-
600
- instance._showPopup = sandbox.spy();
601
- simulateInput(instance.filter, 'a');
602
- instance._showPopup.should.not.be.called;
603
- });
604
-
605
- it('Should return empty string if not input mode and filter is disabled', () => {
606
- const wrapper = shallowSelect({filter: false, type: Select.Type.MATERIAL});
607
- const instance = wrapper.instance();
608
-
609
- instance.filterValue().should.equal('');
610
- });
611
-
612
- it('Should return input value if input mode enabled', () => {
613
- const wrapper = mountSelect({filter: false, type: Select.Type.INPUT});
614
- const instance = wrapper.instance();
615
- wrapper.setState({focused: true});
616
- simulateInput(instance.filter, 'test input');
617
- instance.filterValue().should.equal('test input');
618
- });
619
-
620
- it('Should set value to popup input if passed', () => {
621
- const wrapper = mountSelect();
622
- const instance = wrapper.instance();
623
- instance._showPopup();
624
- instance.filterValue('test');
625
- instance._popup.filter.value.should.equal('test');
626
- });
627
-
628
- it('Should set target input value in input mode', () => {
629
- const wrapper = mountSelect({filter: false, type: Select.Type.INPUT});
630
- const instance = wrapper.instance();
631
-
632
- wrapper.setState({focused: true});
633
- instance.filterValue('test');
634
- instance.filter.value.should.equal('test');
635
- });
636
-
637
- it('Should clear filter value when closing', () => {
638
- const wrapper = mountSelect();
639
- const instance = wrapper.instance();
640
- instance.filterValue('test');
641
- instance._showPopup();
642
- instance._hidePopup();
643
- instance._showPopup();
644
- instance._popup.filter.value.should.equal('');
645
- });
646
- });
647
-
648
- describe('Multiple', () => {
649
- const defaultPropsMultiple = () => ({
650
- data: testData,
651
- selected: testData.slice(0, 2),
652
- filter: true,
653
- multiple: true,
654
- onChange: sandbox.spy()
655
- });
656
-
657
- const shallowSelectMultiple = props => shallow(
658
- <Select {...defaultPropsMultiple()} {...props}/>
659
- );
660
- const mountSelectMultiple = props => {
661
- mountWrapper = mount(
662
- <Select {...defaultPropsMultiple()} {...props}/>
663
- );
664
- return mountWrapper;
665
- };
666
-
667
- it('Should fill multipleMap on initialization', () => {
668
- const wrapper = mountSelectMultiple();
669
- wrapper.state().multipleMap.should.deep.equal({1: true, 2: true});
670
- });
671
-
672
- it('Should fill multipleMap on selection change', () => {
673
- const wrapper = mountSelectMultiple();
674
- wrapper.setProps({selected: testData.slice(1, 2)});
675
- wrapper.state().multipleMap.should.deep.equal({2: true});
676
- });
677
-
678
- it('Should construct label from selected array', () => {
679
- const wrapper = shallowSelectMultiple();
680
- const instance = wrapper.instance();
681
- const selectedLabel = instance._getSelectedString();
682
- selectedLabel.should.equal('first1, test2');
683
- });
684
-
685
- it('Should skip empty labels', () => {
686
- const wrapper = shallowSelectMultiple({
687
- selected: testData.slice(2)
688
- });
689
- const instance = wrapper.instance();
690
- const selectedLabel = instance._getSelectedString();
691
- selectedLabel.should.equal('test3');
692
- });
693
-
694
- it('Should detect selection is empty according on not empty array', () => {
695
- const wrapper = shallowSelectMultiple();
696
- const instance = wrapper.instance();
697
- instance._selectionIsEmpty().should.be.false;
698
- });
699
-
700
- it('Should detect selection is empty according on empty array', () => {
701
- const wrapper = shallowSelectMultiple({selected: []});
702
- const instance = wrapper.instance();
703
- instance._selectionIsEmpty().should.be.true;
704
- });
705
-
706
- it('Should clear selected on clearing', () => {
707
- const wrapper = shallowSelectMultiple();
708
- const instance = wrapper.instance();
709
- instance.clear();
710
- wrapper.state('selected').length.should.equal(0);
711
- });
712
-
713
- it('Should not draw "clear" button if multiple and nothing selected', () => {
714
- const wrapper = shallowSelectMultiple();
715
- wrapper.setProps({clear: true, selected: []});
716
- wrapper.should.not.have.descendants('[data-test~="ring-clear-select"]');
717
- });
718
-
719
- it('Should call onChange on clearing', () => {
720
- const wrapper = mountSelectMultiple();
721
- const instance = wrapper.instance();
722
- instance.clear();
723
- wrapper.prop('onChange').should.be.calledOnce;
724
- wrapper.prop('onChange').should.be.called.calledWith([]);
725
- });
726
-
727
- it('Should clear selected when rerendering with no selected item in multiple mode', () => {
728
- const wrapper = shallowSelectMultiple();
729
- wrapper.setProps({selected: null});
730
- wrapper.state('selected').should.deep.equal([]);
731
- });
732
-
733
- it('Should update selected checkboxes on selected update', () => {
734
- const wrapper = shallowSelectMultiple();
735
- const instance = wrapper.instance();
736
- wrapper.setProps({selected: []});
737
- instance.getListItems(instance.filterValue())[0].checkbox.should.be.false;
738
- });
739
-
740
- describe('On selecting', () => {
741
- let wrapper;
742
- let instance;
743
- beforeEach(() => {
744
- wrapper = mountSelectMultiple();
745
- instance = wrapper.instance();
746
- });
747
-
748
- it('Should add item to multiple map on selecting item', () => {
749
- instance._listSelectHandler(testData[3]);
750
- wrapper.state().multipleMap['4'].should.be.true;
751
- });
752
-
753
- it('Should select just picked item on selecting by clicking item', () => {
754
- const lengthBefore = testData.slice(0, 2).length;
755
- instance._listSelectHandler(testData[3]);
756
- wrapper.state('selected').length.should.equal(lengthBefore + 1);
757
- });
758
-
759
- it('Should add item to selection on clicking by checkbox', () => {
760
- const lengthBefore = testData.slice(0, 2).length;
761
- instance._listSelectHandler(testData[3], {
762
- originalEvent: {
763
- target: {
764
- matches: () => true
765
- }
766
- }
767
- });
768
- wrapper.state('selected').length.should.equal(lengthBefore + 1);
769
- });
770
-
771
- it('Should close popup on selecting by item', () => {
772
- instance._hidePopup = sandbox.spy();
773
- instance._listSelectHandler(testData[3], {
774
- originalEvent: {
775
- target: {
776
- matches: () => false
777
- }
778
- }
779
- });
780
- instance._hidePopup.should.have.been.called;
781
- });
782
-
783
- it('Should not close popup on selecting by checkbox', () => {
784
- instance._hidePopup = sandbox.spy();
785
- instance._listSelectHandler(testData[3], {}, {tryKeepOpen: true});
786
- instance._hidePopup.should.not.be.called;
787
- });
788
- });
789
-
790
- describe('On deselecting', () => {
791
- it('Should remove item from selected on deselecting', () => {
792
- const wrapper = mountSelectMultiple();
793
- const instance = wrapper.instance();
794
- const lengthBefore = testData.slice(0, 2).length;
795
- instance._listSelectHandler(testData[0]);
796
- wrapper.state('selected').length.should.equal(lengthBefore - 1);
797
- });
798
-
799
- it('Should call onDeselect on deselecting item', () => {
800
- const wrapper = mountSelectMultiple({
801
- onDeselect: sandbox.spy()
802
- });
803
- const instance = wrapper.instance();
804
- instance._listSelectHandler(testData[0]);
805
- wrapper.prop('onDeselect').should.be.calledWith(testData[0]);
806
- });
807
- });
808
-
809
- });
810
-
811
- describe('On selecting', () => {
812
- it('Should not react on selecting disabled element', () => {
813
- const wrapper = shallowSelect();
814
- const instance = wrapper.instance();
815
- instance.setState = sandbox.spy();
816
-
817
- instance._listSelectHandler({
818
- key: 1,
819
- label: 'test',
820
- disabled: true
821
- });
822
-
823
- instance.setState.should.not.be.called;
824
- });
825
-
826
- it('Should not react on selecting separator', () => {
827
- const wrapper = shallowSelect();
828
- const instance = wrapper.instance();
829
- instance.setState = sandbox.spy();
830
-
831
- instance._listSelectHandler({
832
- key: 1,
833
- label: 'test',
834
- rgItemType: List.ListProps.Type.SEPARATOR
835
- });
836
-
837
- instance.setState.should.not.be.called;
838
- });
839
-
840
- it('Should react on selecting custom item', () => {
841
- const wrapper = shallowSelect();
842
- const instance = wrapper.instance();
843
- instance.setState = sandbox.spy();
844
-
845
- instance._listSelectHandler({
846
- key: 1,
847
- label: 'test',
848
- type: List.ListProps.Type.CUSTOM
849
- });
850
-
851
- instance.setState.should.be.called;
852
- });
853
-
854
- it('Should set selected on selecting', () => {
855
- const wrapper = shallowSelect();
856
- const instance = wrapper.instance();
857
- instance._listSelectHandler(testData[3]);
858
- wrapper.should.have.state('selected', testData[3]);
859
- });
860
-
861
- it('Should set call onSelect on selecting', () => {
862
- const wrapper = mountSelect({
863
- onSelect: sandbox.spy()
864
- });
865
- const instance = wrapper.instance();
866
- instance._listSelectHandler(testData[1]);
867
- wrapper.prop('onSelect').should.be.calledOnce;
868
- });
869
-
870
- it('Should set call onChange on selecting', () => {
871
- const wrapper = mountSelect({
872
- onChange: sandbox.spy()
873
- });
874
- const instance = wrapper.instance();
875
- instance._listSelectHandler(testData[1]);
876
- wrapper.prop('onChange').should.be.calledOnce;
877
- });
878
-
879
- it('Should hide popup on selecting', () => {
880
- const wrapper = mountSelect();
881
- const instance = wrapper.instance();
882
- instance._hidePopup = sandbox.spy();
883
- instance._listSelectHandler(testData[1]);
884
- instance._hidePopup.should.be.calledOnce;
885
- });
886
- });
887
-
888
- describe('On select all', () => {
889
- it('Should react on select all action', () => {
890
- const wrapper = shallowSelect();
891
- const instance = wrapper.instance();
892
- instance.setState = sandbox.spy();
893
-
894
- instance._listSelectAllHandler();
895
-
896
- instance.setState.should.be.called;
897
- });
898
-
899
- it('Should react on select all action with false flag', () => {
900
- const wrapper = shallowSelect();
901
- const instance = wrapper.instance();
902
- instance.setState = sandbox.spy();
903
-
904
- instance._listSelectAllHandler(false);
905
-
906
- instance.setState.should.be.called;
907
- });
908
-
909
- it('Should set selected on selecting all', () => {
910
- const wrapper = mountSelect({
911
- onSelect: sandbox.spy(),
912
- multiple: true,
913
- selected: [],
914
- data: testData
915
- });
916
- const instance = wrapper.instance();
917
- instance._listSelectAllHandler();
918
- wrapper.state().selected.should.be.eql(testData);
919
- });
920
-
921
- it('Should set call onSelect on selecting', () => {
922
- const wrapper = mountSelect({
923
- onSelect: sandbox.spy(),
924
- multiple: true,
925
- selected: [testData[0]],
926
- data: testData
927
- });
928
- const instance = wrapper.instance();
929
- instance._listSelectAllHandler();
930
- wrapper.prop('onSelect').should.be.calledThrice;
931
- });
932
-
933
- it('Should set call onDeselect on call handler with false flag', () => {
934
- const wrapper = mountSelect({
935
- onDeselect: sandbox.spy(),
936
- multiple: true,
937
- selected: [testData[0], testData[1], testData[2]],
938
- data: testData
939
- });
940
- const instance = wrapper.instance();
941
- instance._listSelectAllHandler(false);
942
- wrapper.prop('onDeselect').should.be.calledThrice;
943
- });
944
-
945
- it('Should set call onChange on selecting', () => {
946
- const wrapper = mountSelect({
947
- onChange: sandbox.spy(),
948
- multiple: true,
949
- selected: [testData[0]],
950
- data: testData
951
- });
952
- const instance = wrapper.instance();
953
- instance._listSelectAllHandler(testData[1]);
954
- wrapper.prop('onChange').should.be.calledOnce;
955
- });
956
- });
957
-
958
- describe('Popup', () => {
959
- let container;
960
- const mountSelectToContainer = props => {
961
- mountWrapper = mount(
962
- <Select {...props}/>,
963
- {
964
- attachTo: container
965
- }
966
- );
967
- };
968
- beforeEach(() => {
969
- container = document.createElement('div');
970
- document.body.appendChild(container);
971
- });
972
-
973
- afterEach(() => {
974
- document.body.removeChild(container);
975
- container = null;
976
- });
977
-
978
- it('Should pass loading message and indicator to popup if loading', () => {
979
- const wrapper = mountSelect({loading: true, loadingMessage: 'test message'});
980
- const instance = wrapper.instance();
981
- instance._popup.rerender = sandbox.stub();
982
- instance._showPopup();
983
- instance._popup.props.message.should.equal('test message');
984
- instance._popup.props.loading.should.be.true;
985
- });
986
-
987
- it('Should pass notFoundMessage message to popup if not loading and data is empty', () => {
988
- const wrapper = mountSelect({data: [], notFoundMessage: 'test not found'});
989
- const instance = wrapper.instance();
990
- instance._popup.rerender = sandbox.stub();
991
- instance._showPopup();
992
- instance._popup.props.message.should.equal('test not found');
993
- });
994
-
995
- describe('filter focusing', () => {
996
- const SHOW_TIMEOUT = 300;
997
-
998
- beforeEach(() => {
999
- mountSelectToContainer({filter: true});
1000
- });
1001
-
1002
- it('Should focus the filter on opening', done => {
1003
- const instance = mountWrapper.instance();
1004
- instance._showPopup();
1005
- // Can't use fake timers here, as Popup redraws by requestAnimationFrame.
1006
- // Stabbing it isn't possible either, as it hangs IE11
1007
- setTimeout(() => {
1008
- instance._popup.filter.should.equal(document.activeElement);
1009
- done();
1010
- }, SHOW_TIMEOUT);
1011
- });
1012
-
1013
- it('Should focus the filter on second opening', done => {
1014
- const instance = mountWrapper.instance();
1015
- instance._showPopup();
1016
- instance._hidePopup();
1017
- instance._showPopup();
1018
- setTimeout(() => {
1019
- instance._popup.filter.should.equal(document.activeElement);
1020
- done();
1021
- }, SHOW_TIMEOUT);
1022
- });
1023
- });
1024
-
1025
- it('Should restore focus on select in button mode after closing popup', () => {
1026
- mountSelectToContainer({
1027
- data: testData,
1028
- filter: true
1029
- });
1030
- const instance = mountWrapper.instance();
1031
-
1032
- instance._showPopup();
1033
- instance._hidePopup(true);
1034
- document.activeElement.should.equal(instance.button);
1035
- });
1036
-
1037
- describe('Focus after close', () => {
1038
- let instance;
1039
- let targetInput;
1040
- beforeEach(() => {
1041
- targetInput = document.createElement('input');
1042
- document.body.appendChild(targetInput);
1043
-
1044
- mountSelectToContainer({
1045
- data: testData,
1046
- filter: true,
1047
- targetElement: targetInput
1048
- });
1049
- instance = mountWrapper.instance();
1050
-
1051
- instance._showPopup();
1052
- });
1053
-
1054
- afterEach(() => {
1055
- document.body.removeChild(targetInput);
1056
- targetInput = null;
1057
- });
1058
-
1059
- it('Should restore focus on provided target element after closing popup', () => {
1060
- instance._hidePopup(true);
1061
-
1062
- targetInput.should.equal(document.activeElement);
1063
- });
1064
-
1065
- it('Should restore focus on provided target element after closing popup with keyboard', () => {
1066
- simulateCombo('esc');
1067
- targetInput.should.equal(document.activeElement);
1068
- });
1069
-
1070
- it('Should not restore focus on provided target element after closing popup with not keyboard event', () => {
1071
- Simulate.click(document.body);
1072
-
1073
- targetInput.should.not.equal(document.activeElement);
1074
- });
1075
-
1076
- it('Should not restore focus on provided target element after closing popup', () => {
1077
- instance._hidePopup();
1078
-
1079
- targetInput.should.not.equal(document.activeElement);
1080
- });
1081
- });
1082
-
1083
- });
1084
-
1085
- describe('_getResetOption', () => {
1086
- let instance;
1087
-
1088
- it('should create tags reset option', () => {
1089
- const labelMock = 'label';
1090
- const tagsMock = {
1091
- reset: {
1092
- key: labelMock,
1093
- template: labelMock,
1094
- glyph: 'glyph',
1095
- rgItemType: List.ListProps.Type.CUSTOM,
1096
- className: 'cssClass',
1097
- onClick: () => {}
1098
- }
1099
- };
1100
- instance = shallowSelect({
1101
- selected: [{}, {}],
1102
- tags: tagsMock
1103
- }).instance();
1104
-
1105
- const resetOption = instance._getResetOption();
1106
-
1107
- resetOption.rgItemType.should.be.equal(List.ListProps.Type.CUSTOM);
1108
- resetOption.glyph.should.be.equal(tagsMock.reset.glyph);
1109
- resetOption.onClick.should.be.an.instanceof(Function);
1110
- });
1111
-
1112
- it('should not create tags reset option if it is not provided', () => {
1113
- instance = shallowSelect({
1114
- select: [{}, {}]
1115
- }).instance();
1116
-
1117
- should.not.exist(instance._getResetOption());
1118
- });
1119
-
1120
- it('should not create tags reset option without selected elements', () => {
1121
- instance = shallowSelect({
1122
- tags: {reset: {}}
1123
- }).instance();
1124
-
1125
- should.not.exist(instance._getResetOption());
1126
- });
1127
- });
1128
-
1129
-
1130
- describe('_prependResetOption', () => {
1131
- let instance;
1132
-
1133
- it('should prepend reset option', () => {
1134
- instance = getInstance();
1135
- const newShownData = instance._prependResetOption([{}]);
1136
-
1137
- newShownData.length.should.be.equal(4);
1138
- });
1139
-
1140
- it('should prepend reset option with separator', () => {
1141
- instance = getInstance(true);
1142
-
1143
- const newShownData = instance._prependResetOption([{}]);
1144
-
1145
- newShownData.length.should.be.equal(5);
1146
- });
1147
-
1148
- it('should not prepend reset option', () => {
1149
- instance = getInstance(true, []);
1150
-
1151
- const newShownData = instance._prependResetOption([]);
1152
-
1153
- newShownData.length.should.be.equal(0);
1154
- });
1155
-
1156
- function getInstance(resetWithSeparator, selected) {
1157
- const resetMock = {
1158
- reset: {}
1159
- };
1160
- if (resetWithSeparator) {
1161
- resetMock.reset.separator = true;
1162
- }
1163
-
1164
- return shallowSelect({
1165
- selected: selected || [{}, {}],
1166
- tags: resetMock
1167
- }).instance();
1168
- }
1169
- });
1170
-
1171
-
1172
- describe('_redrawPopup', () => {
1173
- let clock;
1174
-
1175
- beforeEach(() => {
1176
- clock = sandbox.useFakeTimers({toFake: ['setTimeout']});
1177
- });
1178
-
1179
- it('should not redraw a popup in default mode', () => {
1180
- const instance = shallowSelect().instance();
1181
- sandbox.stub(instance, '_showPopup');
1182
- instance._redrawPopup();
1183
-
1184
- clock.tick();
1185
- instance._showPopup.should.not.have.been.called;
1186
- });
1187
-
1188
- it('should redraw a popup in multiselect mode', () => {
1189
- const instance = shallowSelect({
1190
- multiple: true,
1191
- selected: testData.slice(1)
1192
- }).instance();
1193
-
1194
- sandbox.stub(instance, '_showPopup');
1195
- instance._redrawPopup();
1196
-
1197
- clock.tick();
1198
- instance._showPopup.should.have.been.called;
1199
- });
1200
- });
1201
- });