@jetbrains/ring-ui 4.1.3 → 5.0.0-beta.0

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 (1134) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/babel.config.js +1 -0
  3. package/components/alert/alert.examples.tsx +149 -0
  4. package/components/alert/alert.test.tsx +63 -0
  5. package/components/alert/alert.tsx +267 -0
  6. package/components/alert/{container.test.js → container.test.tsx} +0 -0
  7. package/components/alert/container.tsx +53 -0
  8. package/components/alert-service/alert-service.examples.tsx +94 -0
  9. package/components/alert-service/alert-service.test.ts +90 -0
  10. package/components/alert-service/alert-service.tsx +152 -0
  11. package/components/analytics/analytics.examples.tsx +50 -0
  12. package/components/analytics/analytics.test.ts +421 -0
  13. package/components/analytics/analytics.ts +130 -0
  14. package/components/analytics/analytics__custom-plugin.ts +151 -0
  15. package/components/analytics/analytics__fus-plugin.ts +144 -0
  16. package/components/analytics/analytics__ga-plugin.ts +61 -0
  17. package/components/analytics/analytics__plugin-utils.ts +79 -0
  18. package/components/analytics-ng/analytics-ng.examples.js +2 -2
  19. package/components/auth/auth.examples.ts +141 -0
  20. package/components/auth/auth.test.ts +801 -0
  21. package/components/auth/{auth.js → auth.ts} +0 -0
  22. package/components/auth/auth__core.ts +1030 -0
  23. package/components/auth/background-flow.ts +120 -0
  24. package/components/auth/down-notification.tsx +87 -0
  25. package/components/auth/iframe-flow.tsx +112 -0
  26. package/components/auth/{landing-entry.js → landing-entry.ts} +0 -0
  27. package/components/auth/landing.html +1 -1
  28. package/components/auth/landing.ts +34 -0
  29. package/components/auth/{request-builder.test.js → request-builder.test.ts} +0 -0
  30. package/components/auth/request-builder.ts +87 -0
  31. package/components/auth/response-parser.test.ts +94 -0
  32. package/components/auth/response-parser.ts +129 -0
  33. package/components/auth/storage.test.ts +182 -0
  34. package/components/auth/storage.ts +291 -0
  35. package/components/auth/token-validator.test.ts +206 -0
  36. package/components/auth/token-validator.ts +207 -0
  37. package/components/auth/window-flow.ts +131 -0
  38. package/components/auth-dialog/auth-dialog.examples.tsx +86 -0
  39. package/components/auth-dialog/auth-dialog.test.tsx +11 -0
  40. package/components/auth-dialog/auth-dialog.tsx +131 -0
  41. package/components/auth-dialog-service/auth-dialog-service.examples.tsx +68 -0
  42. package/components/auth-dialog-service/auth-dialog-service.test.ts +91 -0
  43. package/components/auth-dialog-service/auth-dialog-service.tsx +30 -0
  44. package/components/auth-ng/auth-ng.examples.js +1 -1
  45. package/components/autofocus-ng/autofocus-ng.examples.js +3 -3
  46. package/components/avatar/{avatar-example-datauri.js → avatar-example-datauri.tsx} +0 -0
  47. package/components/avatar/avatar.examples.tsx +48 -0
  48. package/components/avatar/avatar.test.tsx +63 -0
  49. package/components/avatar/avatar.tsx +180 -0
  50. package/components/avatar/fallback-avatar.tsx +158 -0
  51. package/components/avatar-editor-ng/avatar-editor-ng.examples.js +1 -1
  52. package/components/avatar-ng/avatar-ng.examples.js +3 -3
  53. package/components/badge/badge.examples.tsx +26 -0
  54. package/components/badge/{badge.test.js → badge.test.tsx} +0 -0
  55. package/components/badge/badge.tsx +67 -0
  56. package/components/badge-ng/badge-ng.examples.js +2 -2
  57. package/components/breadcrumb-ng/breadcrumb-ng.examples.js +1 -1
  58. package/components/button/button.examples.tsx +219 -0
  59. package/components/button/button.test.tsx +64 -0
  60. package/components/button/button.tsx +166 -0
  61. package/components/button/button__classes.ts +54 -0
  62. package/components/button-group/button-group.examples.tsx +58 -0
  63. package/components/button-group/{button-group.test.js → button-group.test.tsx} +0 -0
  64. package/components/button-group/button-group.tsx +30 -0
  65. package/components/button-group/caption.tsx +23 -0
  66. package/components/button-group-ng/button-group-ng.examples.js +2 -2
  67. package/components/button-ng/button-ng.examples.js +5 -5
  68. package/components/button-set/button-set.examples.tsx +24 -0
  69. package/components/button-set/{button-set.test.js → button-set.test.tsx} +0 -0
  70. package/components/button-set/button-set.tsx +27 -0
  71. package/components/button-set-ng/button-set-ng.examples.js +2 -2
  72. package/components/button-toolbar/button-toolbar.examples.tsx +31 -0
  73. package/components/button-toolbar/button-toolbar.test.tsx +23 -0
  74. package/components/button-toolbar/button-toolbar.tsx +29 -0
  75. package/components/button-toolbar-ng/button-toolbar-ng.examples.js +3 -3
  76. package/components/caret/caret.examples.ts +40 -0
  77. package/components/caret/caret.test.ts +142 -0
  78. package/components/caret/caret.ts +239 -0
  79. package/components/checkbox/checkbox.examples.tsx +67 -0
  80. package/components/checkbox/checkbox.test.tsx +85 -0
  81. package/components/checkbox/checkbox.tsx +114 -0
  82. package/components/checkbox-ng/checkbox-ng.examples.js +2 -2
  83. package/components/code/code.examples.tsx +92 -0
  84. package/components/code/code.test.tsx +104 -0
  85. package/components/code/code.tsx +128 -0
  86. package/components/compiler-ng/compiler-ng.examples.js +1 -1
  87. package/components/confirm/confirm.examples.tsx +109 -0
  88. package/components/confirm/confirm.test.tsx +30 -0
  89. package/components/confirm/confirm.tsx +116 -0
  90. package/components/confirm-ng/confirm-ng.examples.js +2 -2
  91. package/components/confirm-service/confirm-service.examples.tsx +65 -0
  92. package/components/confirm-service/confirm-service.test.ts +73 -0
  93. package/components/confirm-service/confirm-service.tsx +74 -0
  94. package/components/content-layout/content-layout.examples.tsx +188 -0
  95. package/components/content-layout/content-layout.test.tsx +46 -0
  96. package/components/content-layout/content-layout.tsx +74 -0
  97. package/components/content-layout/sidebar.tsx +115 -0
  98. package/components/contenteditable/contenteditable.examples.tsx +45 -0
  99. package/components/contenteditable/contenteditable.test.tsx +74 -0
  100. package/components/contenteditable/contenteditable.tsx +80 -0
  101. package/components/data-list/data-list.examples.tsx +120 -0
  102. package/components/data-list/data-list.mock.tsx +257 -0
  103. package/components/data-list/data-list.test.tsx +41 -0
  104. package/components/data-list/data-list.tsx +224 -0
  105. package/components/data-list/item.tsx +247 -0
  106. package/components/data-list/selection.ts +107 -0
  107. package/components/data-list/title.tsx +112 -0
  108. package/components/data-list-ng/data-list-ng.examples.js +3 -3
  109. package/components/date-picker/consts.ts +136 -0
  110. package/components/date-picker/date-input.tsx +150 -0
  111. package/components/date-picker/date-picker.examples.tsx +346 -0
  112. package/components/date-picker/date-picker.test.tsx +91 -0
  113. package/components/date-picker/date-picker.tsx +315 -0
  114. package/components/date-picker/date-popup.tsx +466 -0
  115. package/components/date-picker/day.tsx +129 -0
  116. package/components/date-picker/{formats.js → formats.ts} +0 -0
  117. package/components/date-picker/month-names.tsx +111 -0
  118. package/components/date-picker/month-slider.tsx +91 -0
  119. package/components/date-picker/month.tsx +52 -0
  120. package/components/date-picker/months.tsx +113 -0
  121. package/components/date-picker/weekdays.tsx +45 -0
  122. package/components/date-picker/years.tsx +116 -0
  123. package/components/dialog/dialog.examples.tsx +214 -0
  124. package/components/dialog/dialog.test.tsx +67 -0
  125. package/components/dialog/dialog.tsx +201 -0
  126. package/components/dialog/dialog__body-scroll-preventer.ts +59 -0
  127. package/components/dialog-ng/dialog-ng.examples.js +5 -5
  128. package/components/docked-panel-ng/docked-panel-ng.examples.js +3 -3
  129. package/components/dropdown/anchor.tsx +32 -0
  130. package/components/dropdown/dropdown.examples.tsx +152 -0
  131. package/components/dropdown/dropdown.test.tsx +189 -0
  132. package/components/dropdown/dropdown.tsx +224 -0
  133. package/components/dropdown-menu/dropdown-menu.examples.tsx +47 -0
  134. package/components/dropdown-menu/dropdown-menu.test.tsx +80 -0
  135. package/components/dropdown-menu/dropdown-menu.tsx +156 -0
  136. package/components/error-bubble/error-bubble.examples.tsx +96 -0
  137. package/components/error-bubble/error-bubble.test.tsx +42 -0
  138. package/components/error-bubble/error-bubble.tsx +57 -0
  139. package/components/error-message/error-message.examples.tsx +33 -0
  140. package/components/error-message/error-message.test.tsx +21 -0
  141. package/components/error-message/error-message.tsx +62 -0
  142. package/components/error-message-ng/error-message-ng.examples.js +1 -1
  143. package/components/error-page-ng/error-page-ng.examples.js +2 -2
  144. package/components/footer/footer.examples.tsx +56 -0
  145. package/components/footer/footer.test.tsx +78 -0
  146. package/components/footer/footer.tsx +175 -0
  147. package/components/footer-ng/footer-ng.examples.js +2 -2
  148. package/components/form/form.examples.js +4 -4
  149. package/components/form-ng/form-ng.examples.js +6 -6
  150. package/components/global/compose.ts +41 -0
  151. package/components/global/composeRefs.ts +9 -0
  152. package/components/global/conic-gradient.ts +43 -0
  153. package/components/global/create-stateful-context.tsx +55 -0
  154. package/components/global/{data-tests.test.js → data-tests.test.ts} +0 -0
  155. package/components/global/data-tests.ts +23 -0
  156. package/components/global/dom.examples.ts +43 -0
  157. package/components/global/dom.test.ts +99 -0
  158. package/components/global/dom.ts +145 -0
  159. package/components/global/focus-sensor-hoc.tsx +157 -0
  160. package/components/global/{fuzzy-highlight.test.js → fuzzy-highlight.test.ts} +0 -0
  161. package/components/global/fuzzy-highlight.ts +46 -0
  162. package/components/global/get-event-key.ts +113 -0
  163. package/components/global/get-uid.test.ts +22 -0
  164. package/components/global/get-uid.ts +15 -0
  165. package/components/global/inject-styles.ts +16 -0
  166. package/components/global/linear-function.ts +21 -0
  167. package/components/global/listeners.test.ts +80 -0
  168. package/components/global/listeners.ts +44 -0
  169. package/components/global/memoize.ts +23 -0
  170. package/components/global/normalize-indent.ts +34 -0
  171. package/components/global/promise-with-timeout.ts +18 -0
  172. package/components/global/prop-types.ts +5 -0
  173. package/components/global/radial-gradient-mask.ts +52 -0
  174. package/components/global/react-dom-renderer.tsx +40 -0
  175. package/components/global/rerender-hoc.ts +42 -0
  176. package/components/global/schedule-raf.ts +27 -0
  177. package/components/global/{sniffer.js → sniffer.ts} +0 -0
  178. package/components/global/supports-css.ts +20 -0
  179. package/components/global/theme.tsx +86 -0
  180. package/components/global/trivial-template-tag.ts +11 -0
  181. package/components/global/typescript-utils.ts +3 -0
  182. package/components/global/url.test.ts +138 -0
  183. package/components/global/url.ts +162 -0
  184. package/components/global/variables.examples.tsx +160 -0
  185. package/components/global/variables.ts +112 -0
  186. package/components/global/variables_dark.ts +59 -0
  187. package/components/grid/col.tsx +72 -0
  188. package/components/grid/grid.examples.tsx +291 -0
  189. package/components/grid/grid.test.tsx +74 -0
  190. package/components/grid/grid.tsx +33 -0
  191. package/components/grid/row.tsx +79 -0
  192. package/components/group/group.examples.tsx +27 -0
  193. package/components/group/group.test.tsx +21 -0
  194. package/components/group/group.tsx +30 -0
  195. package/components/group-ng/group.examples.js +2 -2
  196. package/components/header/header.examples.tsx +124 -0
  197. package/components/header/header.test.tsx +21 -0
  198. package/components/header/header.tsx +57 -0
  199. package/components/header/logo.tsx +31 -0
  200. package/components/header/profile.tsx +226 -0
  201. package/components/header/services-link.tsx +57 -0
  202. package/components/header/services.tsx +122 -0
  203. package/components/header/smart-profile.tsx +136 -0
  204. package/components/header/smart-services.tsx +79 -0
  205. package/components/header/tray-icon.tsx +35 -0
  206. package/components/header/tray.tsx +30 -0
  207. package/components/heading/heading.examples.tsx +64 -0
  208. package/components/heading/heading.test.tsx +24 -0
  209. package/components/heading/heading.tsx +90 -0
  210. package/components/http/http.examples.ts +37 -0
  211. package/components/http/http.mock.ts +69 -0
  212. package/components/http/http.test.ts +191 -0
  213. package/components/http/http.ts +237 -0
  214. package/components/hub-source/hub-source.test.ts +200 -0
  215. package/components/hub-source/hub-source.ts +148 -0
  216. package/components/hub-source/hub-source__user.ts +33 -0
  217. package/components/hub-source/hub-source__users-groups.test.ts +91 -0
  218. package/components/hub-source/hub-source__users-groups.ts +78 -0
  219. package/components/icon/icon.examples.tsx +146 -0
  220. package/components/icon/icon.test.tsx +51 -0
  221. package/components/icon/icon.tsx +111 -0
  222. package/components/icon/icon__constants.ts +31 -0
  223. package/components/icon/icon__svg.tsx +81 -0
  224. package/components/icon/{index.js → index.ts} +0 -0
  225. package/components/icon-ng/icon-ng.examples.js +1 -1
  226. package/components/input/input.css +1 -0
  227. package/components/input/input.examples.tsx +140 -0
  228. package/components/input/input.test.tsx +42 -0
  229. package/components/input/input.tsx +311 -0
  230. package/components/input-ng/input-ng.examples.js +1 -1
  231. package/components/input-size/input-size.examples.js +5 -5
  232. package/components/island/adaptive-island-hoc.tsx +40 -0
  233. package/components/island/content.tsx +156 -0
  234. package/components/island/header.tsx +112 -0
  235. package/components/island/island.examples.tsx +74 -0
  236. package/components/island/island.test.tsx +59 -0
  237. package/components/island/island.tsx +59 -0
  238. package/components/island-legacy/content-legacy.tsx +26 -0
  239. package/components/island-legacy/header-legacy.tsx +28 -0
  240. package/components/island-legacy/island-legacy.examples.ts +33 -0
  241. package/components/island-legacy/island-legacy.test.tsx +21 -0
  242. package/components/island-legacy/island-legacy.tsx +29 -0
  243. package/components/island-ng/island-ng.examples.js +1 -1
  244. package/components/link/clickableLink.tsx +58 -0
  245. package/components/link/link.examples.tsx +93 -0
  246. package/components/link/link.test.tsx +185 -0
  247. package/components/link/link.tsx +149 -0
  248. package/components/link-ng/link-ng.examples.js +1 -1
  249. package/components/list/consts.ts +89 -0
  250. package/components/list/list.examples.tsx +278 -0
  251. package/components/list/list.test.tsx +432 -0
  252. package/components/list/list.tsx +841 -0
  253. package/components/list/list__custom.tsx +89 -0
  254. package/components/list/list__hint.tsx +28 -0
  255. package/components/list/list__item.test.tsx +64 -0
  256. package/components/list/list__item.tsx +236 -0
  257. package/components/list/list__link.tsx +74 -0
  258. package/components/list/list__separator.tsx +31 -0
  259. package/components/list/list__title.tsx +45 -0
  260. package/components/list/list__users-groups-source.test.ts +129 -0
  261. package/components/list/list__users-groups-source.ts +101 -0
  262. package/components/loader/loader.examples.tsx +24 -0
  263. package/components/loader/loader.tsx +69 -0
  264. package/components/loader/loader__core.test.ts +228 -0
  265. package/components/loader/loader__core.ts +296 -0
  266. package/components/loader-inline/inject-styles.ts +28 -0
  267. package/components/loader-inline/loader-inline.examples.tsx +106 -0
  268. package/components/loader-inline/loader-inline.test.tsx +21 -0
  269. package/components/loader-inline/loader-inline.tsx +63 -0
  270. package/components/loader-inline-ng/loader-inline-ng.examples.js +1 -1
  271. package/components/loader-ng/loader-ng.examples.js +1 -1
  272. package/components/loader-screen/loader-screen.examples.tsx +40 -0
  273. package/components/loader-screen/loader-screen.tsx +42 -0
  274. package/components/loader-screen-ng/loader-screen-ng.examples.js +1 -1
  275. package/components/login-dialog/login-dialog.tsx +139 -0
  276. package/components/login-dialog/service.tsx +25 -0
  277. package/components/markdown/code.tsx +26 -0
  278. package/components/markdown/heading.tsx +19 -0
  279. package/components/markdown/link.tsx +21 -0
  280. package/components/markdown/markdown.examples.tsx +110 -0
  281. package/components/markdown/markdown.test.tsx +60 -0
  282. package/components/markdown/markdown.tsx +65 -0
  283. package/components/message/message.examples.tsx +80 -0
  284. package/components/message/message.test.tsx +26 -0
  285. package/components/message/message.tsx +184 -0
  286. package/components/old-browsers-message/old-browsers-message.examples.ts +38 -0
  287. package/components/old-browsers-message/old-browsers-message.ts +103 -0
  288. package/components/old-browsers-message/{old-browsers-message__stop.js → old-browsers-message__stop.ts} +0 -0
  289. package/components/old-browsers-message/white-list.ts +33 -0
  290. package/components/pager/pager.examples.tsx +299 -0
  291. package/components/pager/pager.test.tsx +57 -0
  292. package/components/pager/pager.tsx +372 -0
  293. package/components/pager-ng/pager-ng.examples.js +1 -1
  294. package/components/palette/palette.examples.js +1 -1
  295. package/components/panel/panel.examples.tsx +33 -0
  296. package/components/panel/{panel.test.js → panel.test.tsx} +0 -0
  297. package/components/panel/panel.tsx +28 -0
  298. package/components/permissions/permissions.test.ts +440 -0
  299. package/components/permissions/permissions.ts +229 -0
  300. package/components/permissions/permissions__cache.test.ts +79 -0
  301. package/components/permissions/permissions__cache.ts +290 -0
  302. package/components/permissions-ng/permissions-ng.examples.js +2 -2
  303. package/components/place-under-ng/place-under-ng.examples.js +2 -2
  304. package/components/popup/popup.consts.ts +45 -0
  305. package/components/popup/popup.examples.tsx +346 -0
  306. package/components/popup/popup.target.tsx +29 -0
  307. package/components/popup/popup.test.tsx +257 -0
  308. package/components/popup/popup.tsx +477 -0
  309. package/components/popup/position.test.ts +203 -0
  310. package/components/popup/position.ts +315 -0
  311. package/components/popup-menu/popup-menu.examples.tsx +38 -0
  312. package/components/popup-menu/popup-menu.test.tsx +37 -0
  313. package/components/popup-menu/popup-menu.tsx +69 -0
  314. package/components/progress-bar/progress-bar.examples.tsx +60 -0
  315. package/components/progress-bar/progress-bar.test.tsx +115 -0
  316. package/components/progress-bar/progress-bar.tsx +115 -0
  317. package/components/progress-bar-ng/progress-bar-ng.examples.js +1 -1
  318. package/components/promised-click-ng/promised-click-ng.examples.js +2 -2
  319. package/components/query-assist/query-assist.examples.tsx +312 -0
  320. package/components/query-assist/query-assist.test.tsx +688 -0
  321. package/components/query-assist/query-assist.tsx +1121 -0
  322. package/components/query-assist/query-assist__suggestions.tsx +124 -0
  323. package/components/query-assist-ng/query-assist-ng.examples.js +2 -2
  324. package/components/radio/radio.examples.tsx +58 -0
  325. package/components/radio/radio.test.tsx +102 -0
  326. package/components/radio/radio.tsx +37 -0
  327. package/components/radio/radio__item.test.tsx +100 -0
  328. package/components/radio/radio__item.tsx +85 -0
  329. package/components/radio-ng/radio-ng.examples.js +1 -1
  330. package/components/save-field-ng/save-field-ng.examples.js +2 -2
  331. package/components/select/select.examples.tsx +1061 -0
  332. package/components/select/select.test.tsx +1200 -0
  333. package/components/select/select.tsx +1488 -0
  334. package/components/select/select__filter.tsx +76 -0
  335. package/components/select/select__popup.test.tsx +159 -0
  336. package/components/select/select__popup.tsx +654 -0
  337. package/components/select-ng/select-ng.examples.js +3 -3
  338. package/components/shortcuts/core.test.ts +297 -0
  339. package/components/shortcuts/core.ts +260 -0
  340. package/components/shortcuts/shortcut-title.ts +56 -0
  341. package/components/shortcuts/shortcuts-hoc.test.tsx +61 -0
  342. package/components/shortcuts/shortcuts-hoc.tsx +43 -0
  343. package/components/shortcuts/shortcuts.test.tsx +48 -0
  344. package/components/shortcuts/shortcuts.ts +64 -0
  345. package/components/shortcuts-hint-ng/shortcuts-hint-ng.examples.js +1 -1
  346. package/components/sidebar-ng/sidebar-ng.examples.js +3 -3
  347. package/components/storage/storage.examples.ts +37 -0
  348. package/components/storage/storage.test.ts +254 -0
  349. package/components/storage/storage.ts +44 -0
  350. package/components/storage/storage__fallback.ts +211 -0
  351. package/components/storage/storage__local.ts +132 -0
  352. package/components/tab-trap/tab-trap.examples.tsx +49 -0
  353. package/components/tab-trap/tab-trap.tsx +189 -0
  354. package/components/table/cell.tsx +30 -0
  355. package/components/table/disable-hover-hoc.tsx +52 -0
  356. package/components/table/header-cell.tsx +104 -0
  357. package/components/table/header.tsx +196 -0
  358. package/components/table/multitable.tsx +106 -0
  359. package/components/table/row-with-focus-sensor.tsx +56 -0
  360. package/components/table/row.tsx +276 -0
  361. package/components/table/selection-adapter.ts +12 -0
  362. package/components/table/selection-shortcuts-hoc.tsx +210 -0
  363. package/components/table/selection.ts +212 -0
  364. package/components/table/smart-table.tsx +59 -0
  365. package/components/table/table.examples.tsx +367 -0
  366. package/components/table/table.tsx +379 -0
  367. package/components/table-legacy-ng/table-legacy-ng.examples.js +4 -4
  368. package/components/table-ng/table-ng.examples.js +4 -4
  369. package/components/tabs/collapsible-more.tsx +199 -0
  370. package/components/tabs/collapsible-tab.tsx +102 -0
  371. package/components/tabs/collapsible-tabs.tsx +295 -0
  372. package/components/tabs/custom-item.tsx +10 -0
  373. package/components/tabs/dumb-tabs.tsx +119 -0
  374. package/components/tabs/smart-tabs.tsx +38 -0
  375. package/components/tabs/tab-link.tsx +39 -0
  376. package/components/tabs/tab.tsx +38 -0
  377. package/components/tabs/tabs.examples.tsx +275 -0
  378. package/components/tabs/tabs.test.tsx +27 -0
  379. package/components/tabs/{tabs.js → tabs.ts} +0 -0
  380. package/components/tabs-ng/tabs-ng.examples.js +1 -1
  381. package/components/tag/tag.examples.tsx +50 -0
  382. package/components/tag/tag.test.tsx +21 -0
  383. package/components/tag/tag.tsx +213 -0
  384. package/components/tags-input/tag-input.examples.tsx +133 -0
  385. package/components/tags-input/tags-input.test.tsx +234 -0
  386. package/components/tags-input/tags-input.tsx +394 -0
  387. package/components/tags-input-ng/tags-input-ng.examples.js +1 -1
  388. package/components/tags-list/tags-list.examples.tsx +41 -0
  389. package/components/tags-list/tags-list.test.tsx +45 -0
  390. package/components/tags-list/tags-list.tsx +107 -0
  391. package/components/template-ng/template-ng.examples.js +1 -1
  392. package/components/text/text.examples.tsx +25 -0
  393. package/components/text/text.test.tsx +25 -0
  394. package/components/text/text.tsx +34 -0
  395. package/components/title-ng/title-ng.examples.js +1 -1
  396. package/components/toggle/toggle.examples.tsx +79 -0
  397. package/components/toggle/toggle.test.tsx +34 -0
  398. package/components/toggle/toggle.tsx +87 -0
  399. package/components/toggle-ng/toggle-ng.examples.js +1 -1
  400. package/components/tooltip/tooltip.examples.tsx +118 -0
  401. package/components/tooltip/tooltip.test.tsx +130 -0
  402. package/components/tooltip/tooltip.tsx +187 -0
  403. package/components/tooltip-ng/tooltip-ng.examples.js +2 -2
  404. package/components/user-agreement/service.tsx +340 -0
  405. package/components/user-agreement/{toolbox.eula.js → toolbox.eula.ts} +0 -0
  406. package/components/user-agreement/user-agreement.examples.tsx +130 -0
  407. package/components/user-agreement/user-agreement.tsx +146 -0
  408. package/components/user-card/card.tsx +119 -0
  409. package/components/user-card/smart-user-card-tooltip.tsx +70 -0
  410. package/components/user-card/tooltip.tsx +68 -0
  411. package/components/user-card/user-card.examples.tsx +91 -0
  412. package/components/user-card/user-card.test.tsx +106 -0
  413. package/components/user-card/{user-card.js → user-card.ts} +0 -0
  414. package/components/user-card-ng/user-card-ng.examples.js +4 -4
  415. package/components/welcome.examples.tsx +25 -0
  416. package/dist/_helpers/anchor.js +3 -2
  417. package/dist/_helpers/dialog__body-scroll-preventer.js +1 -1
  418. package/dist/_helpers/footer.js +2 -2
  419. package/dist/_helpers/inject-styles.js +1 -1
  420. package/dist/_helpers/input.js +1 -1
  421. package/dist/_helpers/query-assist__suggestions.js +2 -2
  422. package/dist/_helpers/select__filter.js +11 -9
  423. package/dist/_helpers/sidebar.js +6 -3
  424. package/dist/_helpers/title.js +13 -13
  425. package/dist/alert/alert.d.ts +110 -0
  426. package/dist/alert/alert.js +40 -36
  427. package/dist/alert/container.d.ts +15 -0
  428. package/dist/alert/container.js +5 -7
  429. package/dist/alert-service/alert-service.d.ts +34 -0
  430. package/dist/analytics/analytics.d.ts +24 -0
  431. package/dist/analytics/analytics.js +10 -15
  432. package/dist/analytics/analytics__custom-plugin.d.ts +39 -0
  433. package/dist/analytics/analytics__custom-plugin.js +30 -9
  434. package/dist/analytics/analytics__fus-plugin.d.ts +62 -0
  435. package/dist/analytics/analytics__fus-plugin.js +23 -6
  436. package/dist/analytics/analytics__ga-plugin.d.ts +17 -0
  437. package/dist/analytics/analytics__ga-plugin.js +12 -6
  438. package/dist/analytics/analytics__plugin-utils.d.ts +15 -0
  439. package/dist/analytics/analytics__plugin-utils.js +58 -59
  440. package/dist/analytics-ng/analytics-ng.js +1 -0
  441. package/dist/auth/auth.d.ts +3 -0
  442. package/dist/auth/auth__core.d.ts +233 -0
  443. package/dist/auth/auth__core.js +205 -116
  444. package/dist/auth/background-flow.d.ts +31 -0
  445. package/dist/auth/background-flow.js +9 -1
  446. package/dist/auth/down-notification.d.ts +15 -0
  447. package/dist/auth/iframe-flow.d.ts +20 -0
  448. package/dist/auth/iframe-flow.js +19 -5
  449. package/dist/auth/landing-entry.d.ts +3 -0
  450. package/dist/auth/landing.d.ts +2 -0
  451. package/dist/auth/landing.js +13 -7
  452. package/dist/auth/request-builder.d.ts +47 -0
  453. package/dist/auth/request-builder.js +7 -1
  454. package/dist/auth/response-parser.d.ts +70 -0
  455. package/dist/auth/response-parser.js +25 -13
  456. package/dist/auth/storage.d.ts +112 -0
  457. package/dist/auth/storage.js +41 -10
  458. package/dist/auth/token-validator.d.ts +93 -0
  459. package/dist/auth/token-validator.js +32 -12
  460. package/dist/auth/window-flow.d.ts +26 -0
  461. package/dist/auth/window-flow.js +24 -11
  462. package/dist/auth-dialog/auth-dialog.d.ts +49 -0
  463. package/dist/auth-dialog/auth-dialog.js +4 -8
  464. package/dist/auth-dialog-service/auth-dialog-service.d.ts +5 -0
  465. package/dist/avatar/avatar-example-datauri.d.ts +1 -0
  466. package/dist/avatar/avatar.d.ts +51 -0
  467. package/dist/avatar/avatar.js +13 -10
  468. package/dist/avatar/fallback-avatar.d.ts +17 -0
  469. package/dist/badge/badge.d.ts +24 -0
  470. package/dist/button/button.d.ts +255 -0
  471. package/dist/button/button.js +13 -12
  472. package/dist/button/button__classes.d.ts +2 -0
  473. package/dist/button-group/button-group.d.ts +14 -0
  474. package/dist/button-group/caption.d.ts +8 -0
  475. package/dist/button-set/button-set.d.ts +12 -0
  476. package/dist/button-toolbar/button-toolbar.d.ts +12 -0
  477. package/dist/caret/caret.d.ts +66 -0
  478. package/dist/caret/caret.js +35 -19
  479. package/dist/checkbox/checkbox.d.ts +41 -0
  480. package/dist/checkbox/checkbox.js +6 -0
  481. package/dist/code/code.d.ts +43 -0
  482. package/dist/code/code.js +12 -8
  483. package/dist/confirm/confirm.d.ts +48 -0
  484. package/dist/confirm/confirm.js +4 -4
  485. package/dist/confirm-service/confirm-service.d.ts +15 -0
  486. package/dist/content-layout/content-layout.d.ts +26 -0
  487. package/dist/content-layout/content-layout.js +4 -2
  488. package/dist/content-layout/sidebar.d.ts +31 -0
  489. package/dist/contenteditable/contenteditable.d.ts +47 -0
  490. package/dist/contenteditable/contenteditable.js +6 -4
  491. package/dist/data-list/data-list.d.ts +89 -0
  492. package/dist/data-list/data-list.js +52 -23
  493. package/dist/data-list/data-list.mock.d.ts +16 -0
  494. package/dist/data-list/data-list.mock.js +2 -2
  495. package/dist/data-list/item.d.ts +50 -0
  496. package/dist/data-list/item.js +34 -28
  497. package/dist/data-list/selection.d.ts +16 -0
  498. package/dist/data-list/selection.js +13 -0
  499. package/dist/data-list/title.d.ts +26 -0
  500. package/dist/data-list/title.js +1 -0
  501. package/dist/data-list-ng/data-list-ng.js +4 -2
  502. package/dist/date-picker/consts.d.ts +99 -0
  503. package/dist/date-picker/consts.js +2 -21
  504. package/dist/date-picker/date-input.d.ts +57 -0
  505. package/dist/date-picker/date-input.js +7 -3
  506. package/dist/date-picker/date-picker.d.ts +70 -0
  507. package/dist/date-picker/date-picker.js +38 -38
  508. package/dist/date-picker/date-popup.d.ts +56 -0
  509. package/dist/date-picker/date-popup.js +43 -26
  510. package/dist/date-picker/day.d.ts +30 -0
  511. package/dist/date-picker/day.js +8 -4
  512. package/dist/date-picker/formats.d.ts +2 -0
  513. package/dist/date-picker/month-names.d.ts +13 -0
  514. package/dist/date-picker/month-names.js +6 -5
  515. package/dist/date-picker/month-slider.d.ts +29 -0
  516. package/dist/date-picker/month-slider.js +2 -2
  517. package/dist/date-picker/month.d.ts +14 -0
  518. package/dist/date-picker/months.d.ts +11 -0
  519. package/dist/date-picker/months.js +3 -3
  520. package/dist/date-picker/weekdays.d.ts +13 -0
  521. package/dist/date-picker/weekdays.js +1 -1
  522. package/dist/date-picker/years.d.ts +21 -0
  523. package/dist/date-picker/years.js +8 -6
  524. package/dist/dialog/dialog.d.ts +73 -0
  525. package/dist/dialog/dialog.js +4 -2
  526. package/dist/dialog/dialog__body-scroll-preventer.d.ts +9 -0
  527. package/dist/dropdown/anchor.d.ts +90 -0
  528. package/dist/dropdown/dropdown.d.ts +77 -0
  529. package/dist/dropdown/dropdown.js +13 -6
  530. package/dist/dropdown-menu/dropdown-menu.d.ts +26 -0
  531. package/dist/dropdown-menu/dropdown-menu.js +8 -5
  532. package/dist/error-bubble/error-bubble.d.ts +18 -0
  533. package/dist/error-bubble/error-bubble.js +3 -1
  534. package/dist/error-message/error-message.d.ts +25 -0
  535. package/dist/footer/footer.d.ts +28 -0
  536. package/dist/global/compose.d.ts +7 -0
  537. package/dist/global/compose.js +2 -2
  538. package/dist/global/composeRefs.d.ts +3 -0
  539. package/dist/global/conic-gradient.d.ts +796 -0
  540. package/dist/global/conic-gradient.js +1 -1
  541. package/dist/global/create-stateful-context.d.ts +27 -0
  542. package/dist/global/data-tests.d.ts +3 -0
  543. package/dist/global/data-tests.js +5 -1
  544. package/dist/global/dom.d.ts +37 -0
  545. package/dist/global/dom.js +4 -4
  546. package/dist/global/focus-sensor-hoc.d.ts +18 -0
  547. package/dist/global/focus-sensor-hoc.js +58 -20
  548. package/dist/global/fuzzy-highlight.d.ts +5 -0
  549. package/dist/global/get-event-key.d.ts +2 -0
  550. package/dist/global/get-event-key.js +0 -1
  551. package/dist/global/get-uid.d.ts +1 -0
  552. package/dist/global/inject-styles.d.ts +3 -0
  553. package/dist/global/linear-function.d.ts +6 -0
  554. package/dist/global/listeners.d.ts +8 -0
  555. package/dist/global/listeners.js +10 -2
  556. package/dist/global/memoize.d.ts +1 -0
  557. package/dist/global/memoize.js +7 -6
  558. package/dist/global/normalize-indent.d.ts +1 -0
  559. package/dist/global/normalize-indent.js +5 -1
  560. package/dist/global/promise-with-timeout.d.ts +4 -0
  561. package/dist/global/prop-types.d.ts +4 -0
  562. package/dist/global/prop-types.js +7 -0
  563. package/dist/global/radial-gradient-mask.d.ts +9 -0
  564. package/dist/global/react-dom-renderer.d.ts +16 -0
  565. package/dist/global/react-dom-renderer.js +2 -0
  566. package/dist/global/rerender-hoc.d.ts +45 -0
  567. package/dist/global/rerender-hoc.js +5 -14
  568. package/dist/global/schedule-raf.d.ts +1 -0
  569. package/dist/global/schedule-raf.js +3 -1
  570. package/dist/global/sniffer.d.ts +3 -0
  571. package/dist/global/supports-css.d.ts +2 -0
  572. package/dist/global/theme.d.ts +26 -0
  573. package/dist/global/theme.js +22 -14
  574. package/dist/global/trivial-template-tag.d.ts +1 -0
  575. package/dist/global/typescript-utils.d.ts +2 -0
  576. package/dist/global/typescript-utils.js +4 -0
  577. package/dist/global/url.d.ts +57 -0
  578. package/dist/global/url.js +1 -1
  579. package/dist/global/variables.d.ts +88 -0
  580. package/dist/global/variables.js +1 -0
  581. package/dist/global/variables_dark.d.ts +3 -0
  582. package/dist/global/variables_dark.js +2 -2
  583. package/dist/grid/col.d.ts +31 -0
  584. package/dist/grid/col.js +7 -1
  585. package/dist/grid/grid.d.ts +14 -0
  586. package/dist/grid/row.d.ts +40 -0
  587. package/dist/grid/row.js +1 -4
  588. package/dist/group/group.d.ts +12 -0
  589. package/dist/header/header.d.ts +96 -0
  590. package/dist/header/header.js +3 -4
  591. package/dist/header/logo.d.ts +14 -0
  592. package/dist/header/profile.d.ts +73 -0
  593. package/dist/header/profile.js +4 -4
  594. package/dist/header/services-link.d.ts +25 -0
  595. package/dist/header/services.d.ts +28 -0
  596. package/dist/header/services.js +1 -0
  597. package/dist/header/smart-profile.d.ts +36 -0
  598. package/dist/header/smart-profile.js +1 -0
  599. package/dist/header/smart-services.d.ts +25 -0
  600. package/dist/header/smart-services.js +12 -3
  601. package/dist/header/tray-icon.d.ts +33 -0
  602. package/dist/header/tray-icon.js +3 -6
  603. package/dist/header/tray.d.ts +9 -0
  604. package/dist/heading/heading.d.ts +25 -0
  605. package/dist/heading/heading.js +14 -13
  606. package/dist/http/http.d.ts +49 -0
  607. package/dist/http/http.js +47 -12
  608. package/dist/http/http.mock.d.ts +20 -0
  609. package/dist/http/http.mock.js +12 -5
  610. package/dist/hub-source/hub-source.d.ts +42 -0
  611. package/dist/hub-source/hub-source.js +14 -1
  612. package/dist/hub-source/hub-source__user.d.ts +4 -0
  613. package/dist/hub-source/hub-source__user.js +4 -2
  614. package/dist/hub-source/hub-source__users-groups.d.ts +24 -0
  615. package/dist/hub-source/hub-source__users-groups.js +9 -1
  616. package/dist/icon/icon.d.ts +43 -0
  617. package/dist/icon/icon.js +2 -2
  618. package/dist/icon/icon__constants.d.ts +30 -0
  619. package/dist/icon/icon__constants.js +28 -23
  620. package/dist/icon/icon__svg.d.ts +15 -0
  621. package/dist/icon/index.d.ts +2 -0
  622. package/dist/icon/index.js +1 -1
  623. package/dist/input/input.d.ts +73 -0
  624. package/dist/input/input.js +75 -60
  625. package/dist/island/adaptive-island-hoc.d.ts +65 -0
  626. package/dist/island/adaptive-island-hoc.js +2 -2
  627. package/dist/island/content.d.ts +12 -0
  628. package/dist/island/content.js +11 -2
  629. package/dist/island/header.d.ts +8 -0
  630. package/dist/island/header.js +11 -6
  631. package/dist/island/island.d.ts +82 -0
  632. package/dist/island-legacy/content-legacy.d.ts +10 -0
  633. package/dist/island-legacy/header-legacy.d.ts +10 -0
  634. package/dist/island-legacy/island-legacy.d.ts +12 -0
  635. package/dist/link/clickableLink.d.ts +20 -0
  636. package/dist/link/link.d.ts +157 -0
  637. package/dist/link/link.js +9 -5
  638. package/dist/list/consts.d.ts +74 -0
  639. package/dist/list/consts.js +26 -20
  640. package/dist/list/list.d.ts +191 -0
  641. package/dist/list/list.js +32 -26
  642. package/dist/list/list__custom.d.ts +6 -0
  643. package/dist/list/list__custom.js +8 -13
  644. package/dist/list/list__hint.d.ts +15 -0
  645. package/dist/list/list__item.d.ts +8 -0
  646. package/dist/list/list__item.js +3 -4
  647. package/dist/list/list__link.d.ts +9 -0
  648. package/dist/list/list__link.js +5 -6
  649. package/dist/list/list__separator.d.ts +5 -0
  650. package/dist/list/list__separator.js +2 -4
  651. package/dist/list/list__title.d.ts +5 -0
  652. package/dist/list/list__title.js +2 -4
  653. package/dist/list/list__users-groups-source.d.ts +27 -0
  654. package/dist/list/list__users-groups-source.js +22 -12
  655. package/dist/loader/loader.d.ts +28 -0
  656. package/dist/loader/loader.js +5 -1
  657. package/dist/loader/loader__core.d.ts +75 -0
  658. package/dist/loader/loader__core.js +89 -47
  659. package/dist/loader-inline/inject-styles.d.ts +2 -0
  660. package/dist/loader-inline/loader-inline.d.ts +55 -0
  661. package/dist/loader-inline/loader-inline.js +2 -2
  662. package/dist/loader-screen/loader-screen.d.ts +17 -0
  663. package/dist/login-dialog/login-dialog.d.ts +47 -0
  664. package/dist/login-dialog/login-dialog.js +3 -1
  665. package/dist/login-dialog/service.d.ts +2 -0
  666. package/dist/login-dialog/service.js +5 -1
  667. package/dist/markdown/code.d.ts +16 -0
  668. package/dist/markdown/heading.d.ts +15 -0
  669. package/dist/markdown/link.d.ts +16 -0
  670. package/dist/markdown/link.js +2 -2
  671. package/dist/markdown/markdown.d.ts +23 -0
  672. package/dist/message/message.d.ts +72 -0
  673. package/dist/message/message.js +9 -8
  674. package/dist/old-browsers-message/old-browsers-message.d.ts +2 -0
  675. package/dist/old-browsers-message/old-browsers-message.js +10 -6
  676. package/dist/old-browsers-message/old-browsers-message__stop.d.ts +1 -0
  677. package/dist/old-browsers-message/white-list.d.ts +2 -0
  678. package/dist/old-browsers-message/white-list.js +3 -3
  679. package/dist/pager/pager.d.ts +102 -0
  680. package/dist/pager/pager.js +20 -9
  681. package/dist/pager-ng/pager-ng.js +3 -0
  682. package/dist/panel/panel.d.ts +12 -0
  683. package/dist/permissions/permissions.d.ts +111 -0
  684. package/dist/permissions/permissions.js +23 -4
  685. package/dist/permissions/permissions__cache.d.ts +93 -0
  686. package/dist/permissions/permissions__cache.js +10 -3
  687. package/dist/popup/popup.consts.d.ts +37 -0
  688. package/dist/popup/popup.consts.js +43 -29
  689. package/dist/popup/popup.d.ts +141 -0
  690. package/dist/popup/popup.js +83 -53
  691. package/dist/popup/popup.target.d.ts +6 -0
  692. package/dist/popup/popup.target.js +3 -4
  693. package/dist/popup/position.d.ts +30 -0
  694. package/dist/popup/position.js +11 -6
  695. package/dist/popup-menu/popup-menu.d.ts +59 -0
  696. package/dist/popup-menu/popup-menu.js +7 -6
  697. package/dist/progress-bar/progress-bar.d.ts +62 -0
  698. package/dist/progress-bar/progress-bar.js +5 -1
  699. package/dist/query-assist/query-assist.d.ts +332 -0
  700. package/dist/query-assist/query-assist.js +134 -70
  701. package/dist/query-assist/query-assist__suggestions.d.ts +29 -0
  702. package/dist/radio/radio.d.ts +18 -0
  703. package/dist/radio/radio__item.d.ts +28 -0
  704. package/dist/radio/radio__item.js +5 -2
  705. package/dist/select/select.d.ts +289 -0
  706. package/dist/select/select.js +179 -175
  707. package/dist/select/select__filter.d.ts +20 -0
  708. package/dist/select/select__filter.js +2 -0
  709. package/dist/select/select__popup.d.ts +123 -0
  710. package/dist/select/select__popup.js +97 -72
  711. package/dist/select-ng/select-ng.js +3 -0
  712. package/dist/select-ng/select-ng__lazy.js +3 -0
  713. package/dist/shortcuts/core.d.ts +74 -0
  714. package/dist/shortcuts/core.js +16 -10
  715. package/dist/shortcuts/shortcut-title.d.ts +1 -0
  716. package/dist/shortcuts/shortcuts-hoc.d.ts +69 -0
  717. package/dist/shortcuts/shortcuts.d.ts +28 -0
  718. package/dist/storage/storage.d.ts +18 -0
  719. package/dist/storage/storage.js +1 -1
  720. package/dist/storage/storage__fallback.d.ts +79 -0
  721. package/dist/storage/storage__fallback.js +31 -19
  722. package/dist/storage/storage__local.d.ts +38 -0
  723. package/dist/storage/storage__local.js +34 -19
  724. package/dist/style.css +1 -1
  725. package/dist/tab-trap/tab-trap.d.ts +43 -0
  726. package/dist/tab-trap/tab-trap.js +16 -4
  727. package/dist/table/cell.d.ts +13 -0
  728. package/dist/table/disable-hover-hoc.d.ts +68 -0
  729. package/dist/table/disable-hover-hoc.js +1 -1
  730. package/dist/table/header-cell.d.ts +43 -0
  731. package/dist/table/header-cell.js +4 -0
  732. package/dist/table/header.d.ts +60 -0
  733. package/dist/table/header.js +9 -5
  734. package/dist/table/multitable.d.ts +25 -0
  735. package/dist/table/multitable.js +21 -7
  736. package/dist/table/row-with-focus-sensor.d.ts +18 -0
  737. package/dist/table/row-with-focus-sensor.js +7 -4
  738. package/dist/table/row.d.ts +56 -0
  739. package/dist/table/row.js +29 -27
  740. package/dist/table/selection-adapter.d.ts +5 -0
  741. package/dist/table/selection-shortcuts-hoc.d.ts +17 -0
  742. package/dist/table/selection-shortcuts-hoc.js +44 -19
  743. package/dist/table/selection.d.ts +47 -0
  744. package/dist/table/selection.js +18 -1
  745. package/dist/table/smart-table.d.ts +60 -0
  746. package/dist/table/smart-table.js +5 -3
  747. package/dist/table/table.d.ts +160 -0
  748. package/dist/table/table.js +58 -38
  749. package/dist/table-legacy-ng/table-legacy-ng.js +3 -0
  750. package/dist/table-legacy-ng/table-legacy-ng__pager.js +3 -0
  751. package/dist/table-ng/smart-table-ng.js +1 -0
  752. package/dist/table-ng/table-ng.js +3 -2
  753. package/dist/tabs/collapsible-more.d.ts +29 -0
  754. package/dist/tabs/collapsible-more.js +1 -0
  755. package/dist/tabs/collapsible-tab.d.ts +16 -0
  756. package/dist/tabs/collapsible-tab.js +6 -8
  757. package/dist/tabs/collapsible-tabs.d.ts +43 -0
  758. package/dist/tabs/collapsible-tabs.js +57 -106
  759. package/dist/tabs/custom-item.d.ts +11 -0
  760. package/dist/tabs/dumb-tabs.d.ts +134 -0
  761. package/dist/tabs/dumb-tabs.js +3 -2
  762. package/dist/tabs/smart-tabs.d.ts +20 -0
  763. package/dist/tabs/smart-tabs.js +3 -2
  764. package/dist/tabs/tab-link.d.ts +18 -0
  765. package/dist/tabs/tab.d.ts +25 -0
  766. package/dist/tabs/tabs.d.ts +7 -0
  767. package/dist/tabs/tabs.js +1 -0
  768. package/dist/tag/tag.d.ts +63 -0
  769. package/dist/tag/tag.js +7 -3
  770. package/dist/tags-input/tags-input.d.ts +154 -0
  771. package/dist/tags-input/tags-input.js +63 -30
  772. package/dist/tags-input-ng/tags-input-ng.js +3 -0
  773. package/dist/tags-list/tags-list.d.ts +46 -0
  774. package/dist/tags-list/tags-list.js +1 -7
  775. package/dist/text/text.d.ts +17 -0
  776. package/dist/toggle/toggle.d.ts +119 -0
  777. package/dist/toggle/toggle.js +3 -5
  778. package/dist/toggle-ng/toggle-ng.js +2 -2
  779. package/dist/tooltip/tooltip.d.ts +64 -0
  780. package/dist/tooltip/tooltip.js +13 -4
  781. package/dist/user-agreement/service.d.ts +161 -0
  782. package/dist/user-agreement/service.js +20 -13
  783. package/dist/user-agreement/toolbox.eula.d.ts +2 -0
  784. package/dist/user-agreement/user-agreement.d.ts +69 -0
  785. package/dist/user-agreement/user-agreement.js +6 -7
  786. package/dist/user-card/card.d.ts +52 -0
  787. package/dist/user-card/smart-user-card-tooltip.d.ts +20 -0
  788. package/dist/user-card/smart-user-card-tooltip.js +3 -2
  789. package/dist/user-card/tooltip.d.ts +31 -0
  790. package/dist/user-card/tooltip.js +5 -1
  791. package/dist/user-card/user-card.d.ts +11 -0
  792. package/dist/user-card/user-card.js +1 -0
  793. package/dist/user-card-ng/user-card-ng.js +1 -0
  794. package/package.json +55 -32
  795. package/typings.d.ts +97 -0
  796. package/webpack.config.js +4 -1
  797. package/components/alert/alert.examples.js +0 -143
  798. package/components/alert/alert.js +0 -242
  799. package/components/alert/alert.test.js +0 -61
  800. package/components/alert/container.js +0 -47
  801. package/components/alert-service/alert-service.examples.js +0 -91
  802. package/components/alert-service/alert-service.js +0 -137
  803. package/components/alert-service/alert-service.test.js +0 -88
  804. package/components/analytics/analytics.examples.js +0 -47
  805. package/components/analytics/analytics.js +0 -101
  806. package/components/analytics/analytics.test.js +0 -419
  807. package/components/analytics/analytics__custom-plugin.js +0 -122
  808. package/components/analytics/analytics__fus-plugin.js +0 -93
  809. package/components/analytics/analytics__ga-plugin.js +0 -53
  810. package/components/analytics/analytics__plugin-utils.js +0 -74
  811. package/components/auth/auth.examples.js +0 -122
  812. package/components/auth/auth.test.js +0 -774
  813. package/components/auth/auth__core.js +0 -879
  814. package/components/auth/background-flow.js +0 -114
  815. package/components/auth/down-notification.js +0 -72
  816. package/components/auth/iframe-flow.js +0 -99
  817. package/components/auth/landing.js +0 -30
  818. package/components/auth/request-builder.js +0 -71
  819. package/components/auth/response-parser.js +0 -109
  820. package/components/auth/response-parser.test.js +0 -89
  821. package/components/auth/storage.js +0 -239
  822. package/components/auth/storage.test.js +0 -178
  823. package/components/auth/token-validator.js +0 -181
  824. package/components/auth/token-validator.test.js +0 -199
  825. package/components/auth/window-flow.js +0 -123
  826. package/components/auth-dialog/auth-dialog.examples.js +0 -76
  827. package/components/auth-dialog/auth-dialog.js +0 -115
  828. package/components/auth-dialog/auth-dialog.test.js +0 -11
  829. package/components/auth-dialog-service/auth-dialog-service.examples.js +0 -66
  830. package/components/auth-dialog-service/auth-dialog-service.js +0 -28
  831. package/components/auth-dialog-service/auth-dialog-service.test.js +0 -75
  832. package/components/avatar/avatar.examples.js +0 -46
  833. package/components/avatar/avatar.js +0 -169
  834. package/components/avatar/avatar.test.js +0 -59
  835. package/components/avatar/fallback-avatar.js +0 -136
  836. package/components/badge/badge.examples.js +0 -26
  837. package/components/badge/badge.js +0 -59
  838. package/components/button/button.examples.js +0 -219
  839. package/components/button/button.js +0 -122
  840. package/components/button/button.test.js +0 -64
  841. package/components/button/button__classes.js +0 -40
  842. package/components/button-group/button-group.examples.js +0 -58
  843. package/components/button-group/button-group.js +0 -30
  844. package/components/button-group/caption.js +0 -23
  845. package/components/button-set/button-set.examples.js +0 -24
  846. package/components/button-set/button-set.js +0 -27
  847. package/components/button-toolbar/button-toolbar.examples.js +0 -31
  848. package/components/button-toolbar/button-toolbar.js +0 -29
  849. package/components/button-toolbar/button-toolbar.test.js +0 -21
  850. package/components/caret/caret.examples.js +0 -39
  851. package/components/caret/caret.js +0 -225
  852. package/components/caret/caret.test.js +0 -137
  853. package/components/checkbox/checkbox.examples.js +0 -67
  854. package/components/checkbox/checkbox.js +0 -100
  855. package/components/checkbox/checkbox.test.js +0 -78
  856. package/components/code/code.examples.js +0 -92
  857. package/components/code/code.js +0 -118
  858. package/components/code/code.test.js +0 -100
  859. package/components/confirm/confirm.examples.js +0 -93
  860. package/components/confirm/confirm.js +0 -101
  861. package/components/confirm/confirm.test.js +0 -28
  862. package/components/confirm-service/confirm-service.examples.js +0 -61
  863. package/components/confirm-service/confirm-service.js +0 -65
  864. package/components/confirm-service/confirm-service.test.js +0 -59
  865. package/components/content-layout/content-layout.examples.js +0 -188
  866. package/components/content-layout/content-layout.js +0 -64
  867. package/components/content-layout/content-layout.test.js +0 -41
  868. package/components/content-layout/sidebar.js +0 -105
  869. package/components/contenteditable/contenteditable.examples.js +0 -45
  870. package/components/contenteditable/contenteditable.js +0 -66
  871. package/components/contenteditable/contenteditable.test.js +0 -73
  872. package/components/data-list/data-list.examples.js +0 -116
  873. package/components/data-list/data-list.js +0 -170
  874. package/components/data-list/data-list.mock.js +0 -248
  875. package/components/data-list/data-list.test.js +0 -40
  876. package/components/data-list/item.js +0 -214
  877. package/components/data-list/selection.js +0 -96
  878. package/components/data-list/title.js +0 -96
  879. package/components/date-picker/consts.js +0 -71
  880. package/components/date-picker/date-input.js +0 -132
  881. package/components/date-picker/date-picker.examples.js +0 -345
  882. package/components/date-picker/date-picker.js +0 -285
  883. package/components/date-picker/date-picker.test.js +0 -89
  884. package/components/date-picker/date-popup.js +0 -441
  885. package/components/date-picker/day.js +0 -121
  886. package/components/date-picker/month-names.js +0 -104
  887. package/components/date-picker/month-slider.js +0 -83
  888. package/components/date-picker/month.js +0 -48
  889. package/components/date-picker/months.js +0 -113
  890. package/components/date-picker/weekdays.js +0 -40
  891. package/components/date-picker/years.js +0 -111
  892. package/components/dialog/dialog.examples.js +0 -209
  893. package/components/dialog/dialog.js +0 -183
  894. package/components/dialog/dialog.test.js +0 -62
  895. package/components/dialog/dialog__body-scroll-preventer.js +0 -59
  896. package/components/dropdown/anchor.js +0 -31
  897. package/components/dropdown/dropdown.examples.js +0 -151
  898. package/components/dropdown/dropdown.js +0 -185
  899. package/components/dropdown/dropdown.test.js +0 -175
  900. package/components/dropdown-menu/dropdown-menu.examples.js +0 -47
  901. package/components/dropdown-menu/dropdown-menu.js +0 -117
  902. package/components/dropdown-menu/dropdown-menu.test.js +0 -76
  903. package/components/error-bubble/error-bubble.examples.js +0 -96
  904. package/components/error-bubble/error-bubble.js +0 -50
  905. package/components/error-bubble/error-bubble.test.js +0 -41
  906. package/components/error-message/error-message.examples.js +0 -33
  907. package/components/error-message/error-message.js +0 -54
  908. package/components/error-message/error-message.test.js +0 -21
  909. package/components/footer/footer.examples.js +0 -56
  910. package/components/footer/footer.js +0 -138
  911. package/components/footer/footer.test.js +0 -78
  912. package/components/global/compose.js +0 -4
  913. package/components/global/composeRefs.js +0 -7
  914. package/components/global/conic-gradient.js +0 -31
  915. package/components/global/create-stateful-context.js +0 -46
  916. package/components/global/data-tests.js +0 -17
  917. package/components/global/dom.examples.js +0 -39
  918. package/components/global/dom.js +0 -105
  919. package/components/global/dom.test.js +0 -99
  920. package/components/global/focus-sensor-hoc.js +0 -112
  921. package/components/global/fuzzy-highlight.js +0 -46
  922. package/components/global/get-event-key.js +0 -112
  923. package/components/global/get-uid.js +0 -15
  924. package/components/global/get-uid.test.js +0 -21
  925. package/components/global/inject-styles.js +0 -14
  926. package/components/global/linear-function.js +0 -16
  927. package/components/global/listeners.js +0 -38
  928. package/components/global/listeners.test.js +0 -78
  929. package/components/global/memoize.js +0 -14
  930. package/components/global/normalize-indent.js +0 -34
  931. package/components/global/promise-with-timeout.js +0 -10
  932. package/components/global/radial-gradient-mask.js +0 -43
  933. package/components/global/react-dom-renderer.js +0 -34
  934. package/components/global/rerender-hoc.js +0 -35
  935. package/components/global/schedule-raf.js +0 -27
  936. package/components/global/supports-css.js +0 -17
  937. package/components/global/theme.js +0 -51
  938. package/components/global/trivial-template-tag.js +0 -11
  939. package/components/global/url.js +0 -162
  940. package/components/global/url.test.js +0 -138
  941. package/components/global/variables.examples.js +0 -160
  942. package/components/global/variables_dark.js +0 -55
  943. package/components/grid/col.js +0 -58
  944. package/components/grid/grid.examples.js +0 -291
  945. package/components/grid/grid.js +0 -33
  946. package/components/grid/grid.test.js +0 -72
  947. package/components/grid/row.js +0 -60
  948. package/components/group/group.examples.js +0 -27
  949. package/components/group/group.js +0 -30
  950. package/components/group/group.test.js +0 -21
  951. package/components/header/header.examples.js +0 -118
  952. package/components/header/header.js +0 -55
  953. package/components/header/header.test.js +0 -21
  954. package/components/header/logo.js +0 -31
  955. package/components/header/profile.js +0 -181
  956. package/components/header/services-link.js +0 -45
  957. package/components/header/services.js +0 -115
  958. package/components/header/smart-profile.js +0 -121
  959. package/components/header/smart-services.js +0 -73
  960. package/components/header/tray-icon.js +0 -33
  961. package/components/header/tray.js +0 -30
  962. package/components/heading/heading.examples.js +0 -64
  963. package/components/heading/heading.js +0 -82
  964. package/components/heading/heading.test.js +0 -29
  965. package/components/http/http.examples.js +0 -34
  966. package/components/http/http.js +0 -196
  967. package/components/http/http.mock.js +0 -62
  968. package/components/http/http.test.js +0 -187
  969. package/components/hub-source/hub-source.js +0 -123
  970. package/components/hub-source/hub-source.test.js +0 -200
  971. package/components/hub-source/hub-source__user.js +0 -27
  972. package/components/hub-source/hub-source__users-groups.js +0 -60
  973. package/components/hub-source/hub-source__users-groups.test.js +0 -91
  974. package/components/icon/icon.examples.js +0 -146
  975. package/components/icon/icon.js +0 -97
  976. package/components/icon/icon.test.js +0 -51
  977. package/components/icon/icon__constants.js +0 -31
  978. package/components/icon/icon__svg.js +0 -77
  979. package/components/input/input.examples.js +0 -140
  980. package/components/input/input.js +0 -228
  981. package/components/input/input.test.js +0 -40
  982. package/components/island/adaptive-island-hoc.js +0 -38
  983. package/components/island/content.js +0 -141
  984. package/components/island/header.js +0 -102
  985. package/components/island/island.examples.js +0 -74
  986. package/components/island/island.js +0 -53
  987. package/components/island/island.test.js +0 -59
  988. package/components/island-legacy/content-legacy.js +0 -26
  989. package/components/island-legacy/header-legacy.js +0 -28
  990. package/components/island-legacy/island-legacy.examples.js +0 -33
  991. package/components/island-legacy/island-legacy.js +0 -29
  992. package/components/island-legacy/island-legacy.test.js +0 -21
  993. package/components/link/clickableLink.js +0 -48
  994. package/components/link/link.examples.js +0 -86
  995. package/components/link/link.js +0 -119
  996. package/components/link/link.test.js +0 -182
  997. package/components/list/consts.js +0 -26
  998. package/components/list/list.examples.js +0 -271
  999. package/components/list/list.js +0 -765
  1000. package/components/list/list.test.js +0 -428
  1001. package/components/list/list__custom.js +0 -90
  1002. package/components/list/list__hint.js +0 -24
  1003. package/components/list/list__item.js +0 -233
  1004. package/components/list/list__item.test.js +0 -60
  1005. package/components/list/list__link.js +0 -72
  1006. package/components/list/list__separator.js +0 -30
  1007. package/components/list/list__title.js +0 -44
  1008. package/components/list/list__users-groups-source.js +0 -89
  1009. package/components/list/list__users-groups-source.test.js +0 -125
  1010. package/components/loader/loader.examples.js +0 -22
  1011. package/components/loader/loader.js +0 -64
  1012. package/components/loader/loader__core.js +0 -251
  1013. package/components/loader/loader__core.test.js +0 -232
  1014. package/components/loader-inline/inject-styles.js +0 -28
  1015. package/components/loader-inline/loader-inline.examples.js +0 -106
  1016. package/components/loader-inline/loader-inline.js +0 -57
  1017. package/components/loader-inline/loader-inline.test.js +0 -21
  1018. package/components/loader-screen/loader-screen.examples.js +0 -40
  1019. package/components/loader-screen/loader-screen.js +0 -38
  1020. package/components/login-dialog/login-dialog.js +0 -125
  1021. package/components/login-dialog/service.js +0 -24
  1022. package/components/markdown/code.js +0 -20
  1023. package/components/markdown/heading.js +0 -13
  1024. package/components/markdown/link.js +0 -14
  1025. package/components/markdown/markdown.examples.js +0 -110
  1026. package/components/markdown/markdown.js +0 -58
  1027. package/components/markdown/markdown.test.js +0 -60
  1028. package/components/message/message.examples.js +0 -78
  1029. package/components/message/message.js +0 -156
  1030. package/components/message/message.test.js +0 -26
  1031. package/components/old-browsers-message/old-browsers-message.examples.js +0 -37
  1032. package/components/old-browsers-message/old-browsers-message.js +0 -99
  1033. package/components/old-browsers-message/white-list.js +0 -32
  1034. package/components/pager/pager.examples.js +0 -291
  1035. package/components/pager/pager.js +0 -337
  1036. package/components/pager/pager.test.js +0 -56
  1037. package/components/panel/panel.examples.js +0 -33
  1038. package/components/panel/panel.js +0 -28
  1039. package/components/permissions/permissions.js +0 -193
  1040. package/components/permissions/permissions.test.js +0 -435
  1041. package/components/permissions/permissions__cache.js +0 -259
  1042. package/components/permissions/permissions__cache.test.js +0 -75
  1043. package/components/popup/popup.consts.js +0 -45
  1044. package/components/popup/popup.examples.js +0 -340
  1045. package/components/popup/popup.js +0 -395
  1046. package/components/popup/popup.target.js +0 -27
  1047. package/components/popup/popup.test.js +0 -242
  1048. package/components/popup/position.js +0 -252
  1049. package/components/popup/position.test.js +0 -192
  1050. package/components/popup-menu/popup-menu.examples.js +0 -38
  1051. package/components/popup-menu/popup-menu.js +0 -58
  1052. package/components/popup-menu/popup-menu.test.js +0 -29
  1053. package/components/progress-bar/progress-bar.examples.js +0 -56
  1054. package/components/progress-bar/progress-bar.js +0 -103
  1055. package/components/progress-bar/progress-bar.test.js +0 -114
  1056. package/components/query-assist/query-assist.examples.js +0 -305
  1057. package/components/query-assist/query-assist.js +0 -992
  1058. package/components/query-assist/query-assist.test.js +0 -690
  1059. package/components/query-assist/query-assist__suggestions.js +0 -100
  1060. package/components/radio/radio.examples.js +0 -58
  1061. package/components/radio/radio.js +0 -37
  1062. package/components/radio/radio.test.js +0 -90
  1063. package/components/radio/radio__item.js +0 -69
  1064. package/components/radio/radio__item.test.js +0 -98
  1065. package/components/select/select.examples.js +0 -1023
  1066. package/components/select/select.js +0 -1284
  1067. package/components/select/select.test.js +0 -1201
  1068. package/components/select/select__filter.js +0 -70
  1069. package/components/select/select__popup.js +0 -556
  1070. package/components/select/select__popup.test.js +0 -156
  1071. package/components/shortcuts/core.js +0 -232
  1072. package/components/shortcuts/core.test.js +0 -282
  1073. package/components/shortcuts/shortcut-title.js +0 -56
  1074. package/components/shortcuts/shortcuts-hoc.js +0 -33
  1075. package/components/shortcuts/shortcuts-hoc.test.js +0 -53
  1076. package/components/shortcuts/shortcuts.js +0 -56
  1077. package/components/shortcuts/shortcuts.test.js +0 -45
  1078. package/components/storage/storage.examples.js +0 -37
  1079. package/components/storage/storage.js +0 -25
  1080. package/components/storage/storage.test.js +0 -248
  1081. package/components/storage/storage__fallback.js +0 -199
  1082. package/components/storage/storage__local.js +0 -115
  1083. package/components/tab-trap/tab-trap.examples.js +0 -49
  1084. package/components/tab-trap/tab-trap.js +0 -175
  1085. package/components/table/cell.js +0 -26
  1086. package/components/table/disable-hover-hoc.js +0 -44
  1087. package/components/table/header-cell.js +0 -77
  1088. package/components/table/header.js +0 -178
  1089. package/components/table/multitable.js +0 -99
  1090. package/components/table/row-with-focus-sensor.js +0 -39
  1091. package/components/table/row.js +0 -242
  1092. package/components/table/selection-adapter.js +0 -10
  1093. package/components/table/selection-shortcuts-hoc.js +0 -177
  1094. package/components/table/selection.js +0 -185
  1095. package/components/table/smart-table.js +0 -55
  1096. package/components/table/table.examples.js +0 -346
  1097. package/components/table/table.js +0 -315
  1098. package/components/tabs/collapsible-more.js +0 -183
  1099. package/components/tabs/collapsible-tab.js +0 -90
  1100. package/components/tabs/collapsible-tabs.js +0 -314
  1101. package/components/tabs/custom-item.js +0 -6
  1102. package/components/tabs/dumb-tabs.js +0 -107
  1103. package/components/tabs/smart-tabs.js +0 -32
  1104. package/components/tabs/tab-link.js +0 -34
  1105. package/components/tabs/tab.js +0 -25
  1106. package/components/tabs/tabs.examples.js +0 -275
  1107. package/components/tabs/tabs.test.js +0 -26
  1108. package/components/tag/tag.examples.js +0 -50
  1109. package/components/tag/tag.js +0 -182
  1110. package/components/tag/tag.test.js +0 -21
  1111. package/components/tags-input/tag-input.examples.js +0 -133
  1112. package/components/tags-input/tags-input.js +0 -347
  1113. package/components/tags-input/tags-input.test.js +0 -234
  1114. package/components/tags-list/tags-list.examples.js +0 -41
  1115. package/components/tags-list/tags-list.js +0 -93
  1116. package/components/tags-list/tags-list.test.js +0 -43
  1117. package/components/text/text.examples.js +0 -25
  1118. package/components/text/text.js +0 -29
  1119. package/components/text/text.test.js +0 -25
  1120. package/components/toggle/toggle.examples.js +0 -79
  1121. package/components/toggle/toggle.js +0 -77
  1122. package/components/toggle/toggle.test.js +0 -34
  1123. package/components/tooltip/tooltip.examples.js +0 -118
  1124. package/components/tooltip/tooltip.js +0 -168
  1125. package/components/tooltip/tooltip.test.js +0 -128
  1126. package/components/user-agreement/service.js +0 -292
  1127. package/components/user-agreement/user-agreement.examples.js +0 -112
  1128. package/components/user-agreement/user-agreement.js +0 -124
  1129. package/components/user-card/card.js +0 -98
  1130. package/components/user-card/smart-user-card-tooltip.js +0 -66
  1131. package/components/user-card/tooltip.js +0 -58
  1132. package/components/user-card/user-card.examples.js +0 -88
  1133. package/components/user-card/user-card.test.js +0 -102
  1134. package/components/welcome.examples.js +0 -25
@@ -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
- });