@jetbrains/ring-ui 6.0.6-beta.0 → 6.0.6

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 (510) hide show
  1. package/README.md +1 -1
  2. package/components/alert/alert.css +146 -0
  3. package/components/alert/alert.d.ts +113 -0
  4. package/components/alert/alert.js +186 -0
  5. package/components/alert/container.css +26 -0
  6. package/components/alert/container.d.ts +15 -0
  7. package/components/alert/container.js +30 -0
  8. package/components/alert-service/alert-service.d.ts +36 -0
  9. package/components/alert-service/alert-service.js +108 -0
  10. package/components/alert-service/alert-service.stories.css +17 -0
  11. package/components/analytics/analytics.d.ts +18 -0
  12. package/components/analytics/analytics.js +18 -0
  13. package/components/analytics/analytics__custom-plugin.d.ts +28 -0
  14. package/components/analytics/analytics__custom-plugin.js +58 -0
  15. package/components/auth/auth.d.ts +3 -0
  16. package/components/auth/auth.js +42 -0
  17. package/components/auth/auth__core.d.ts +236 -0
  18. package/components/auth/auth__core.js +834 -0
  19. package/components/auth/background-flow.d.ts +31 -0
  20. package/components/auth/background-flow.js +97 -0
  21. package/components/auth/down-notification.css +15 -0
  22. package/components/auth/down-notification.d.ts +15 -0
  23. package/components/auth/down-notification.js +52 -0
  24. package/components/auth/iframe-flow.d.ts +20 -0
  25. package/components/auth/iframe-flow.js +81 -0
  26. package/components/auth/request-builder.d.ts +48 -0
  27. package/components/auth/request-builder.js +64 -0
  28. package/components/auth/response-parser.d.ts +70 -0
  29. package/components/auth/response-parser.js +99 -0
  30. package/components/auth/storage.d.ts +112 -0
  31. package/components/auth/storage.js +224 -0
  32. package/components/auth/token-validator.d.ts +93 -0
  33. package/components/auth/token-validator.js +169 -0
  34. package/components/auth/window-flow.d.ts +26 -0
  35. package/components/auth/window-flow.js +102 -0
  36. package/components/auth-dialog/auth-dialog.css +54 -0
  37. package/components/auth-dialog/auth-dialog.d.ts +60 -0
  38. package/components/auth-dialog/auth-dialog.js +93 -0
  39. package/components/auth-dialog-service/auth-dialog-service.d.ts +6 -0
  40. package/components/auth-dialog-service/auth-dialog-service.js +26 -0
  41. package/components/avatar/avatar-example-datauri.d.ts +1 -0
  42. package/components/avatar/avatar-example-datauri.js +24 -0
  43. package/components/avatar/avatar.css +27 -0
  44. package/components/avatar/avatar.d.ts +52 -0
  45. package/components/avatar/avatar.js +98 -0
  46. package/components/avatar/fallback-avatar.d.ts +17 -0
  47. package/components/avatar/fallback-avatar.js +113 -0
  48. package/components/badge/badge.css +42 -0
  49. package/components/badge/badge.d.ts +24 -0
  50. package/components/badge/badge.js +35 -0
  51. package/components/button/button.css +397 -0
  52. package/components/button/button.d.ts +67 -0
  53. package/components/button/button.js +70 -0
  54. package/components/button/button__classes.d.ts +2 -0
  55. package/components/button/button__classes.js +18 -0
  56. package/components/button-group/button-group.css +236 -0
  57. package/components/button-group/button-group.d.ts +18 -0
  58. package/components/button-group/button-group.js +21 -0
  59. package/components/button-group/caption.d.ts +8 -0
  60. package/components/button-group/caption.js +14 -0
  61. package/components/button-set/button-set.css +21 -0
  62. package/components/button-set/button-set.d.ts +16 -0
  63. package/components/button-set/button-set.js +22 -0
  64. package/components/button-toolbar/button-toolbar.css +25 -0
  65. package/components/button-toolbar/button-toolbar.d.ts +16 -0
  66. package/components/button-toolbar/button-toolbar.js +20 -0
  67. package/components/caret/caret.d.ts +66 -0
  68. package/components/caret/caret.js +216 -0
  69. package/components/checkbox/checkbox.css +146 -0
  70. package/components/checkbox/checkbox.d.ts +45 -0
  71. package/components/checkbox/checkbox.js +72 -0
  72. package/components/clipboard/clipboard-fallback.d.ts +2 -0
  73. package/components/clipboard/clipboard-fallback.js +44 -0
  74. package/components/clipboard/clipboard.d.ts +5 -0
  75. package/components/clipboard/clipboard.js +41 -0
  76. package/components/code/code.css +29 -0
  77. package/components/code/code.d.ts +44 -0
  78. package/components/code/code.js +94 -0
  79. package/components/code/highlight.css +112 -0
  80. package/components/collapse/collapse-content.d.ts +11 -0
  81. package/components/collapse/collapse-content.js +72 -0
  82. package/components/collapse/collapse-context.d.ts +10 -0
  83. package/components/collapse/collapse-context.js +10 -0
  84. package/components/collapse/collapse-control.d.ts +11 -0
  85. package/components/collapse/collapse-control.js +22 -0
  86. package/components/collapse/collapse.css +40 -0
  87. package/components/collapse/collapse.d.ts +12 -0
  88. package/components/collapse/collapse.js +26 -0
  89. package/components/collapse/collapse.stories.css +25 -0
  90. package/components/collapse/consts.d.ts +4 -0
  91. package/components/collapse/consts.js +4 -0
  92. package/components/collapse/utils.d.ts +1 -0
  93. package/components/collapse/utils.js +1 -0
  94. package/components/confirm/confirm.css +7 -0
  95. package/components/confirm/confirm.d.ts +48 -0
  96. package/components/confirm/confirm.js +59 -0
  97. package/components/confirm-service/confirm-service.d.ts +21 -0
  98. package/components/confirm-service/confirm-service.js +52 -0
  99. package/components/content-layout/content-layout.css +108 -0
  100. package/components/content-layout/content-layout.d.ts +26 -0
  101. package/components/content-layout/content-layout.js +45 -0
  102. package/components/content-layout/sidebar.d.ts +31 -0
  103. package/components/content-layout/sidebar.js +76 -0
  104. package/components/contenteditable/contenteditable.d.ts +47 -0
  105. package/components/contenteditable/contenteditable.js +47 -0
  106. package/components/control-label/control-label.css +23 -0
  107. package/components/control-label/control-label.d.ts +11 -0
  108. package/components/control-label/control-label.js +22 -0
  109. package/components/data-list/data-list.css +97 -0
  110. package/components/data-list/data-list.d.ts +85 -0
  111. package/components/data-list/data-list.js +119 -0
  112. package/components/data-list/data-list.mock.d.ts +16 -0
  113. package/components/data-list/data-list.mock.js +207 -0
  114. package/components/data-list/item.d.ts +50 -0
  115. package/components/data-list/item.js +114 -0
  116. package/components/data-list/selection.d.ts +16 -0
  117. package/components/data-list/selection.js +81 -0
  118. package/components/data-list/title.d.ts +26 -0
  119. package/components/data-list/title.js +65 -0
  120. package/components/date-picker/consts.d.ts +98 -0
  121. package/components/date-picker/consts.js +44 -0
  122. package/components/date-picker/date-input.d.ts +47 -0
  123. package/components/date-picker/date-input.js +91 -0
  124. package/components/date-picker/date-picker.css +602 -0
  125. package/components/date-picker/date-picker.d.ts +77 -0
  126. package/components/date-picker/date-picker.js +218 -0
  127. package/components/date-picker/date-popup.d.ts +55 -0
  128. package/components/date-picker/date-popup.js +347 -0
  129. package/components/date-picker/day.d.ts +30 -0
  130. package/components/date-picker/day.js +88 -0
  131. package/components/date-picker/formats.d.ts +2 -0
  132. package/components/date-picker/formats.js +1 -0
  133. package/components/date-picker/month-names.d.ts +13 -0
  134. package/components/date-picker/month-names.js +62 -0
  135. package/components/date-picker/month-slider.d.ts +29 -0
  136. package/components/date-picker/month-slider.js +56 -0
  137. package/components/date-picker/month.d.ts +14 -0
  138. package/components/date-picker/month.js +33 -0
  139. package/components/date-picker/months.d.ts +11 -0
  140. package/components/date-picker/months.js +101 -0
  141. package/components/date-picker/weekdays.d.ts +13 -0
  142. package/components/date-picker/weekdays.js +24 -0
  143. package/components/date-picker/years.d.ts +25 -0
  144. package/components/date-picker/years.js +87 -0
  145. package/components/dialog/dialog.css +137 -0
  146. package/components/dialog/dialog.d.ts +64 -0
  147. package/components/dialog/dialog.js +128 -0
  148. package/components/dialog/dialog__body-scroll-preventer.d.ts +9 -0
  149. package/components/dialog/dialog__body-scroll-preventer.js +43 -0
  150. package/components/dropdown/anchor.d.ts +11 -0
  151. package/components/dropdown/anchor.js +16 -0
  152. package/components/dropdown/dropdown.css +18 -0
  153. package/components/dropdown/dropdown.d.ts +87 -0
  154. package/components/dropdown/dropdown.js +159 -0
  155. package/components/dropdown-menu/dropdown-menu.d.ts +36 -0
  156. package/components/dropdown-menu/dropdown-menu.js +56 -0
  157. package/components/editable-heading/editable-heading.css +198 -0
  158. package/components/editable-heading/editable-heading.d.ts +32 -0
  159. package/components/editable-heading/editable-heading.js +141 -0
  160. package/components/error-bubble/error-bubble-legacy.css +77 -0
  161. package/components/error-bubble/error-bubble.css +54 -0
  162. package/components/error-bubble/error-bubble.d.ts +18 -0
  163. package/components/error-bubble/error-bubble.js +28 -0
  164. package/components/error-message/error-message.css +37 -0
  165. package/components/error-message/error-message.d.ts +27 -0
  166. package/components/error-message/error-message.js +37 -0
  167. package/components/error-page/error-page.css +24 -0
  168. package/components/error-page/error-page.gif +0 -0
  169. package/components/footer/footer.css +83 -0
  170. package/components/footer/footer.d.ts +28 -0
  171. package/components/footer/footer.js +97 -0
  172. package/components/form/form.css +266 -0
  173. package/components/form/form.stories.js +138 -0
  174. package/components/global/compose.d.ts +7 -0
  175. package/components/global/compose.js +4 -0
  176. package/components/global/composeRefs.d.ts +3 -0
  177. package/components/global/composeRefs.js +8 -0
  178. package/components/global/controls-height.d.ts +9 -0
  179. package/components/global/controls-height.js +16 -0
  180. package/components/global/create-stateful-context.d.ts +27 -0
  181. package/components/global/create-stateful-context.js +38 -0
  182. package/components/global/data-tests.d.ts +3 -0
  183. package/components/global/data-tests.js +17 -0
  184. package/components/global/dom.d.ts +37 -0
  185. package/components/global/dom.js +83 -0
  186. package/components/global/focus-sensor-hoc.d.ts +19 -0
  187. package/components/global/focus-sensor-hoc.js +102 -0
  188. package/components/global/fuzzy-highlight.d.ts +11 -0
  189. package/components/global/fuzzy-highlight.js +58 -0
  190. package/components/global/get-event-key.d.ts +2 -0
  191. package/components/global/get-event-key.js +100 -0
  192. package/components/global/get-uid.d.ts +1 -0
  193. package/components/global/get-uid.js +16 -0
  194. package/components/global/global.css +101 -0
  195. package/components/global/inject-styles.d.ts +3 -0
  196. package/components/global/inject-styles.js +12 -0
  197. package/components/global/linear-function.d.ts +6 -0
  198. package/components/global/linear-function.js +13 -0
  199. package/components/global/listeners.d.ts +8 -0
  200. package/components/global/listeners.js +27 -0
  201. package/components/global/memoize.d.ts +1 -0
  202. package/components/global/memoize.js +15 -0
  203. package/components/global/normalize-indent.d.ts +1 -0
  204. package/components/global/normalize-indent.js +30 -0
  205. package/components/global/promise-with-timeout.d.ts +5 -0
  206. package/components/global/promise-with-timeout.js +11 -0
  207. package/components/global/prop-types.d.ts +4 -0
  208. package/components/global/prop-types.js +4 -0
  209. package/components/global/react-dom-renderer.d.ts +16 -0
  210. package/components/global/react-dom-renderer.js +25 -0
  211. package/components/global/react-render-adapter.d.ts +1 -0
  212. package/components/global/react-render-adapter.js +3 -0
  213. package/components/global/rerender-hoc.d.ts +10 -0
  214. package/components/global/rerender-hoc.js +14 -0
  215. package/components/global/schedule-raf.d.ts +1 -0
  216. package/components/global/schedule-raf.js +27 -0
  217. package/components/global/sniffer.d.ts +3 -0
  218. package/components/global/sniffer.js +4 -0
  219. package/components/global/theme.d.ts +21 -0
  220. package/components/global/theme.js +70 -0
  221. package/components/global/trivial-template-tag.d.ts +1 -0
  222. package/components/global/trivial-template-tag.js +9 -0
  223. package/components/global/typescript-utils.d.ts +2 -0
  224. package/components/global/typescript-utils.js +2 -0
  225. package/components/global/url.d.ts +57 -0
  226. package/components/global/url.js +136 -0
  227. package/components/global/use-event-callback.d.ts +1 -0
  228. package/components/global/use-event-callback.js +14 -0
  229. package/components/global/variables.css +179 -0
  230. package/components/global/variables.d.ts +89 -0
  231. package/components/global/variables.js +1 -0
  232. package/components/global/variables_dark.css +132 -0
  233. package/components/grid/col.d.ts +31 -0
  234. package/components/grid/col.js +49 -0
  235. package/components/grid/grid.css +915 -0
  236. package/components/grid/grid.d.ts +14 -0
  237. package/components/grid/grid.js +22 -0
  238. package/components/grid/row.d.ts +40 -0
  239. package/components/grid/row.js +51 -0
  240. package/components/group/group.css +7 -0
  241. package/components/group/group.d.ts +12 -0
  242. package/components/group/group.js +20 -0
  243. package/components/header/header.css +169 -0
  244. package/components/header/header.d.ts +34 -0
  245. package/components/header/header.js +46 -0
  246. package/components/header/logo.d.ts +14 -0
  247. package/components/header/logo.js +22 -0
  248. package/components/header/profile.d.ts +75 -0
  249. package/components/header/profile.js +119 -0
  250. package/components/header/services-link.d.ts +25 -0
  251. package/components/header/services-link.js +26 -0
  252. package/components/header/services.css +97 -0
  253. package/components/header/services.d.ts +33 -0
  254. package/components/header/services.js +62 -0
  255. package/components/header/smart-profile.d.ts +36 -0
  256. package/components/header/smart-profile.js +86 -0
  257. package/components/header/smart-services.d.ts +26 -0
  258. package/components/header/smart-services.js +49 -0
  259. package/components/header/tray-icon.d.ts +32 -0
  260. package/components/header/tray-icon.js +20 -0
  261. package/components/header/tray.d.ts +9 -0
  262. package/components/header/tray.js +18 -0
  263. package/components/heading/heading.css +68 -0
  264. package/components/heading/heading.d.ts +25 -0
  265. package/components/heading/heading.js +52 -0
  266. package/components/http/http.d.ts +61 -0
  267. package/components/http/http.js +192 -0
  268. package/components/http/http.mock.d.ts +20 -0
  269. package/components/http/http.mock.js +52 -0
  270. package/components/hub-source/hub-source.d.ts +44 -0
  271. package/components/hub-source/hub-source.js +107 -0
  272. package/components/hub-source/hub-source__user.d.ts +4 -0
  273. package/components/hub-source/hub-source__user.js +20 -0
  274. package/components/hub-source/hub-source__users-groups.d.ts +24 -0
  275. package/components/hub-source/hub-source__users-groups.js +53 -0
  276. package/components/i18n/README.md +46 -0
  277. package/components/i18n/i18n-context.d.ts +13 -0
  278. package/components/i18n/i18n-context.js +14 -0
  279. package/components/i18n/i18n.d.ts +59 -0
  280. package/components/i18n/i18n.js +26 -0
  281. package/components/i18n/messages.json +53 -0
  282. package/components/icon/icon.css +100 -0
  283. package/components/icon/icon.d.ts +43 -0
  284. package/components/icon/icon.js +69 -0
  285. package/components/icon/icon__constants.d.ts +30 -0
  286. package/components/icon/icon__constants.js +32 -0
  287. package/components/icon/icon__svg.d.ts +15 -0
  288. package/components/icon/icon__svg.js +58 -0
  289. package/components/icon/index.d.ts +2 -0
  290. package/components/icon/index.js +2 -0
  291. package/components/input/input-legacy.css +123 -0
  292. package/components/input/input.css +194 -0
  293. package/components/input/input.d.ts +77 -0
  294. package/components/input/input.js +165 -0
  295. package/components/input-size/input-size.css +82 -0
  296. package/components/input-size/input-size.stories.js +73 -0
  297. package/components/island/adaptive-island-hoc.d.ts +61 -0
  298. package/components/island/adaptive-island-hoc.js +28 -0
  299. package/components/island/content.d.ts +43 -0
  300. package/components/island/content.js +100 -0
  301. package/components/island/header.d.ts +8 -0
  302. package/components/island/header.js +78 -0
  303. package/components/island/island.css +131 -0
  304. package/components/island/island.d.ts +78 -0
  305. package/components/island/island.js +31 -0
  306. package/components/island-legacy/content-legacy.d.ts +10 -0
  307. package/components/island-legacy/content-legacy.js +17 -0
  308. package/components/island-legacy/header-legacy.d.ts +10 -0
  309. package/components/island-legacy/header-legacy.js +19 -0
  310. package/components/island-legacy/island-legacy.css +98 -0
  311. package/components/island-legacy/island-legacy.d.ts +12 -0
  312. package/components/island-legacy/island-legacy.js +19 -0
  313. package/components/line/line.css +14 -0
  314. package/components/link/clickableLink.d.ts +20 -0
  315. package/components/link/clickableLink.js +33 -0
  316. package/components/link/link.css +64 -0
  317. package/components/link/link.d.ts +138 -0
  318. package/components/link/link.js +44 -0
  319. package/components/list/consts.d.ts +77 -0
  320. package/components/list/consts.js +25 -0
  321. package/components/list/list.css +298 -0
  322. package/components/list/list.d.ts +205 -0
  323. package/components/list/list.js +590 -0
  324. package/components/list/list.stories.css +3 -0
  325. package/components/list/list__custom.d.ts +6 -0
  326. package/components/list/list__custom.js +52 -0
  327. package/components/list/list__hint.d.ts +15 -0
  328. package/components/list/list__hint.js +16 -0
  329. package/components/list/list__item.d.ts +8 -0
  330. package/components/list/list__item.js +130 -0
  331. package/components/list/list__link.d.ts +9 -0
  332. package/components/list/list__link.js +43 -0
  333. package/components/list/list__separator.d.ts +5 -0
  334. package/components/list/list__separator.js +21 -0
  335. package/components/list/list__title.d.ts +5 -0
  336. package/components/list/list__title.js +28 -0
  337. package/components/list/list__users-groups-source.d.ts +27 -0
  338. package/components/list/list__users-groups-source.js +74 -0
  339. package/components/loader/loader.css +27 -0
  340. package/components/loader/loader.d.ts +28 -0
  341. package/components/loader/loader.js +44 -0
  342. package/components/loader/loader__core.d.ts +75 -0
  343. package/components/loader/loader__core.js +219 -0
  344. package/components/loader-inline/loader-inline.css +73 -0
  345. package/components/loader-inline/loader-inline.d.ts +18 -0
  346. package/components/loader-inline/loader-inline.js +27 -0
  347. package/components/loader-screen/loader-screen.css +29 -0
  348. package/components/loader-screen/loader-screen.d.ts +17 -0
  349. package/components/loader-screen/loader-screen.js +25 -0
  350. package/components/login-dialog/login-dialog.css +23 -0
  351. package/components/login-dialog/login-dialog.d.ts +47 -0
  352. package/components/login-dialog/login-dialog.js +84 -0
  353. package/components/login-dialog/service.d.ts +2 -0
  354. package/components/login-dialog/service.js +24 -0
  355. package/components/markdown/markdown.css +126 -0
  356. package/components/markdown/markdown.d.ts +12 -0
  357. package/components/markdown/markdown.js +25 -0
  358. package/components/message/message.css +61 -0
  359. package/components/message/message.d.ts +55 -0
  360. package/components/message/message.js +129 -0
  361. package/components/old-browsers-message/old-browsers-message.css +26 -0
  362. package/components/old-browsers-message/old-browsers-message.d.ts +2 -0
  363. package/components/old-browsers-message/old-browsers-message.js +83 -0
  364. package/components/old-browsers-message/old-browsers-message__stop.d.ts +1 -0
  365. package/components/old-browsers-message/old-browsers-message__stop.js +2 -0
  366. package/components/old-browsers-message/white-list.d.ts +2 -0
  367. package/components/old-browsers-message/white-list.js +25 -0
  368. package/components/pager/pager.css +19 -0
  369. package/components/pager/pager.d.ts +78 -0
  370. package/components/pager/pager.js +223 -0
  371. package/components/palette/palette.css +216 -0
  372. package/components/panel/panel.css +20 -0
  373. package/components/panel/panel.d.ts +12 -0
  374. package/components/panel/panel.js +20 -0
  375. package/components/permissions/permissions.d.ts +111 -0
  376. package/components/permissions/permissions.js +177 -0
  377. package/components/permissions/permissions__cache.d.ts +93 -0
  378. package/components/permissions/permissions__cache.js +228 -0
  379. package/components/popup/popup.consts.d.ts +37 -0
  380. package/components/popup/popup.consts.js +45 -0
  381. package/components/popup/popup.css +34 -0
  382. package/components/popup/popup.d.ts +147 -0
  383. package/components/popup/popup.js +312 -0
  384. package/components/popup/popup.target.d.ts +7 -0
  385. package/components/popup/popup.target.js +15 -0
  386. package/components/popup/position.d.ts +30 -0
  387. package/components/popup/position.js +202 -0
  388. package/components/popup-menu/popup-menu.d.ts +80 -0
  389. package/components/popup-menu/popup-menu.js +41 -0
  390. package/components/progress-bar/progress-bar.css +82 -0
  391. package/components/progress-bar/progress-bar.d.ts +64 -0
  392. package/components/progress-bar/progress-bar.js +76 -0
  393. package/components/query-assist/query-assist.css +275 -0
  394. package/components/query-assist/query-assist.d.ts +306 -0
  395. package/components/query-assist/query-assist.js +847 -0
  396. package/components/query-assist/query-assist__suggestions.d.ts +29 -0
  397. package/components/query-assist/query-assist__suggestions.js +60 -0
  398. package/components/radio/radio.css +122 -0
  399. package/components/radio/radio.d.ts +18 -0
  400. package/components/radio/radio.js +27 -0
  401. package/components/radio/radio__item.d.ts +28 -0
  402. package/components/radio/radio__item.js +41 -0
  403. package/components/select/select-popup.css +103 -0
  404. package/components/select/select.css +235 -0
  405. package/components/select/select.d.ts +276 -0
  406. package/components/select/select.js +957 -0
  407. package/components/select/select__filter.d.ts +19 -0
  408. package/components/select/select__filter.js +49 -0
  409. package/components/select/select__popup.d.ts +166 -0
  410. package/components/select/select__popup.js +408 -0
  411. package/components/shortcuts/core.d.ts +74 -0
  412. package/components/shortcuts/core.js +191 -0
  413. package/components/shortcuts/shortcut-title.d.ts +1 -0
  414. package/components/shortcuts/shortcut-title.js +50 -0
  415. package/components/shortcuts/shortcuts-hoc.d.ts +65 -0
  416. package/components/shortcuts/shortcuts-hoc.js +19 -0
  417. package/components/shortcuts/shortcuts.d.ts +28 -0
  418. package/components/shortcuts/shortcuts.js +50 -0
  419. package/components/sidebar/sidebar.css +157 -0
  420. package/components/storage/storage.d.ts +18 -0
  421. package/components/storage/storage.js +22 -0
  422. package/components/storage/storage__fallback.d.ts +79 -0
  423. package/components/storage/storage__fallback.js +181 -0
  424. package/components/storage/storage__local.d.ts +38 -0
  425. package/components/storage/storage__local.js +119 -0
  426. package/components/tab-trap/tab-trap.css +6 -0
  427. package/components/tab-trap/tab-trap.d.ts +43 -0
  428. package/components/tab-trap/tab-trap.js +125 -0
  429. package/components/table/cell.d.ts +13 -0
  430. package/components/table/cell.js +16 -0
  431. package/components/table/disable-hover-hoc.d.ts +64 -0
  432. package/components/table/disable-hover-hoc.js +32 -0
  433. package/components/table/header-cell.d.ts +43 -0
  434. package/components/table/header-cell.js +56 -0
  435. package/components/table/header.d.ts +56 -0
  436. package/components/table/header.js +67 -0
  437. package/components/table/multitable.d.ts +25 -0
  438. package/components/table/multitable.js +81 -0
  439. package/components/table/row-with-focus-sensor.d.ts +18 -0
  440. package/components/table/row-with-focus-sensor.js +25 -0
  441. package/components/table/row.d.ts +59 -0
  442. package/components/table/row.js +154 -0
  443. package/components/table/selection-adapter.d.ts +5 -0
  444. package/components/table/selection-adapter.js +10 -0
  445. package/components/table/selection-shortcuts-hoc.d.ts +17 -0
  446. package/components/table/selection-shortcuts-hoc.js +146 -0
  447. package/components/table/selection.d.ts +47 -0
  448. package/components/table/selection.js +150 -0
  449. package/components/table/smart-table.d.ts +64 -0
  450. package/components/table/smart-table.js +40 -0
  451. package/components/table/table.css +259 -0
  452. package/components/table/table.d.ts +159 -0
  453. package/components/table/table.examples2.json +19 -0
  454. package/components/table/table.js +231 -0
  455. package/components/table/table.stories.json +45 -0
  456. package/components/table-legacy/table-legacy.css +346 -0
  457. package/components/table-legacy/table-legacy__toolbar.css +25 -0
  458. package/components/tabs/collapsible-more.d.ts +29 -0
  459. package/components/tabs/collapsible-more.js +97 -0
  460. package/components/tabs/collapsible-tab.d.ts +16 -0
  461. package/components/tabs/collapsible-tab.js +34 -0
  462. package/components/tabs/collapsible-tabs.d.ts +43 -0
  463. package/components/tabs/collapsible-tabs.js +196 -0
  464. package/components/tabs/custom-item.d.ts +9 -0
  465. package/components/tabs/custom-item.js +5 -0
  466. package/components/tabs/dumb-tabs.d.ts +35 -0
  467. package/components/tabs/dumb-tabs.js +56 -0
  468. package/components/tabs/smart-tabs.d.ts +20 -0
  469. package/components/tabs/smart-tabs.js +25 -0
  470. package/components/tabs/tab-link.d.ts +18 -0
  471. package/components/tabs/tab-link.js +24 -0
  472. package/components/tabs/tab.d.ts +27 -0
  473. package/components/tabs/tab.js +19 -0
  474. package/components/tabs/tabs.css +223 -0
  475. package/components/tabs/tabs.d.ts +7 -0
  476. package/components/tabs/tabs.js +7 -0
  477. package/components/tag/tag.css +184 -0
  478. package/components/tag/tag.d.ts +64 -0
  479. package/components/tag/tag.js +130 -0
  480. package/components/tags-input/tags-input.css +100 -0
  481. package/components/tags-input/tags-input.d.ts +138 -0
  482. package/components/tags-input/tags-input.js +275 -0
  483. package/components/tags-list/tags-list.d.ts +46 -0
  484. package/components/tags-list/tags-list.js +45 -0
  485. package/components/text/text.css +21 -0
  486. package/components/text/text.d.ts +23 -0
  487. package/components/text/text.js +31 -0
  488. package/components/toggle/toggle.css +198 -0
  489. package/components/toggle/toggle.d.ts +39 -0
  490. package/components/toggle/toggle.js +46 -0
  491. package/components/tooltip/tooltip.css +17 -0
  492. package/components/tooltip/tooltip.d.ts +65 -0
  493. package/components/tooltip/tooltip.js +126 -0
  494. package/components/user-agreement/service.d.ts +69 -0
  495. package/components/user-agreement/service.js +242 -0
  496. package/components/user-agreement/toolbox.eula.d.ts +2 -0
  497. package/components/user-agreement/toolbox.eula.js +160 -0
  498. package/components/user-agreement/user-agreement.css +29 -0
  499. package/components/user-agreement/user-agreement.d.ts +60 -0
  500. package/components/user-agreement/user-agreement.js +80 -0
  501. package/components/user-card/card.d.ts +70 -0
  502. package/components/user-card/card.js +89 -0
  503. package/components/user-card/smart-user-card-tooltip.d.ts +20 -0
  504. package/components/user-card/smart-user-card-tooltip.js +47 -0
  505. package/components/user-card/tooltip.d.ts +36 -0
  506. package/components/user-card/tooltip.js +43 -0
  507. package/components/user-card/user-card.css +123 -0
  508. package/components/user-card/user-card.d.ts +11 -0
  509. package/components/user-card/user-card.js +11 -0
  510. package/package.json +61 -61
@@ -0,0 +1,31 @@
1
+ import AuthRequestBuilder from './request-builder';
2
+ import AuthStorage from './storage';
3
+ export declare const HUB_AUTH_PAGE_OPENED = "HUB_AUTH_PAGE_OPENED";
4
+ export default class BackgroundFlow {
5
+ _requestBuilder: AuthRequestBuilder;
6
+ _storage: AuthStorage;
7
+ _timeout: number;
8
+ private _promise?;
9
+ constructor(requestBuilder: AuthRequestBuilder, storage: AuthStorage, timeout: number);
10
+ /**
11
+ * Creates a hidden iframe
12
+ * @return {HTMLIFrameElement}
13
+ * @private
14
+ */
15
+ private _createHiddenFrame;
16
+ /**
17
+ * Redirects the given iframe to the given URL
18
+ * @param {HTMLIFrameElement} iframe
19
+ * @param {string} url
20
+ * @private
21
+ */
22
+ _redirectFrame(iframe: HTMLIFrameElement, url: string): void;
23
+ /**
24
+ * Refreshes the access token in an iframe.
25
+ *
26
+ * @return {Promise.<string>} promise that is resolved to access the token when it is loaded in a background iframe. The
27
+ * promise is rejected if no token was received after {@link BackgroundToken.BACKGROUND_TIMEOUT} ms.
28
+ */
29
+ private _load;
30
+ authorize(): Promise<string>;
31
+ }
@@ -0,0 +1,97 @@
1
+ import AuthResponseParser from './response-parser';
2
+ export const HUB_AUTH_PAGE_OPENED = 'HUB_AUTH_PAGE_OPENED';
3
+ export default class BackgroundFlow {
4
+ _requestBuilder;
5
+ _storage;
6
+ _timeout;
7
+ _promise;
8
+ constructor(requestBuilder, storage, timeout) {
9
+ this._requestBuilder = requestBuilder;
10
+ this._storage = storage;
11
+ this._timeout = timeout;
12
+ }
13
+ /**
14
+ * Creates a hidden iframe
15
+ * @return {HTMLIFrameElement}
16
+ * @private
17
+ */
18
+ _createHiddenFrame() {
19
+ const iframe = document.createElement('iframe');
20
+ iframe.style.border = iframe.style.width = iframe.style.height = '0px';
21
+ iframe.style.visibility = 'hidden';
22
+ iframe.style.position = 'fixed';
23
+ iframe.style.left = '-10000px';
24
+ window.document.body.appendChild(iframe);
25
+ return iframe;
26
+ }
27
+ /**
28
+ * Redirects the given iframe to the given URL
29
+ * @param {HTMLIFrameElement} iframe
30
+ * @param {string} url
31
+ * @private
32
+ */
33
+ _redirectFrame(iframe, url) {
34
+ iframe.src = `${url}&rnd=${Math.random()}`;
35
+ }
36
+ /**
37
+ * Refreshes the access token in an iframe.
38
+ *
39
+ * @return {Promise.<string>} promise that is resolved to access the token when it is loaded in a background iframe. The
40
+ * promise is rejected if no token was received after {@link BackgroundToken.BACKGROUND_TIMEOUT} ms.
41
+ */
42
+ async _load() {
43
+ const authRequest = await this._requestBuilder.
44
+ // eslint-disable-next-line camelcase
45
+ prepareAuthRequest({ request_credentials: 'silent' }, { nonRedirect: true });
46
+ return new Promise((resolve, reject) => {
47
+ function onMessage(e) {
48
+ if (e.data === HUB_AUTH_PAGE_OPENED) {
49
+ reject(new Error('Failed to obtain/refresh token in background'));
50
+ cleanUp();
51
+ }
52
+ }
53
+ window.addEventListener('message', onMessage);
54
+ const iframe = this._createHiddenFrame();
55
+ let cleanRun;
56
+ const timeout = setTimeout(() => {
57
+ reject(new Error('Failed to refresh authorization'));
58
+ cleanUp();
59
+ }, this._timeout);
60
+ const removeTokenListener = this._storage.onTokenChange(token => {
61
+ if (token) {
62
+ cleanUp();
63
+ resolve(token.accessToken);
64
+ }
65
+ });
66
+ const removeStateListener = this._storage.onStateChange(authRequest.stateId, state => {
67
+ if (state && state.error) {
68
+ cleanUp();
69
+ reject(new AuthResponseParser.AuthError(state));
70
+ }
71
+ });
72
+ function cleanUp() {
73
+ if (cleanRun) {
74
+ return;
75
+ }
76
+ cleanRun = true;
77
+ clearTimeout(timeout);
78
+ removeStateListener();
79
+ removeTokenListener();
80
+ window.removeEventListener('message', onMessage);
81
+ window.document.body.removeChild(iframe);
82
+ }
83
+ this._redirectFrame(iframe, authRequest.url);
84
+ });
85
+ }
86
+ authorize() {
87
+ if (this._promise) {
88
+ return this._promise;
89
+ }
90
+ const resetPromise = () => {
91
+ this._promise = null;
92
+ };
93
+ this._promise = this._load();
94
+ this._promise.then(resetPromise, resetPromise);
95
+ return this._promise;
96
+ }
97
+ }
@@ -0,0 +1,15 @@
1
+ @import "../global/variables.css";
2
+
3
+ .title {
4
+ font-weight: 600;
5
+ }
6
+
7
+ .error {
8
+ margin-top: calc(var(--ring-unit) / 2);
9
+
10
+ word-wrap: break-word;
11
+
12
+ color: var(--ring-text-color);
13
+
14
+ line-height: calc(var(--ring-unit) * 2);
15
+ }
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ export interface BackendDownTranslations {
3
+ backendIsNotAvailable: string;
4
+ checkAgain: string;
5
+ errorMessage: string;
6
+ }
7
+ export interface BackendDownMessageProps {
8
+ translations: BackendDownTranslations;
9
+ onCheckAgain: (e: React.MouseEvent) => void;
10
+ }
11
+ export interface OnBackendDownParams {
12
+ translations: BackendDownTranslations;
13
+ onCheckAgain: () => void;
14
+ }
15
+ export default function onBackendDown({ onCheckAgain, translations }: OnBackendDownParams): () => void;
@@ -0,0 +1,52 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import alertService from '../alert-service/alert-service';
4
+ import Alert from '../alert/alert';
5
+ import Link from '../link/link';
6
+ import Group from '../group/group';
7
+ import styles from './down-notification.css';
8
+ let key = null;
9
+ function renderAlert(message, type = Alert.Type.WARNING) {
10
+ const existingAlert = alertService.showingAlerts.filter(alert => alert.key === key)[0];
11
+ if (!existingAlert) {
12
+ key = alertService.addAlert(message, type, 0, { closeable: false });
13
+ }
14
+ else {
15
+ existingAlert.message = message;
16
+ existingAlert.type = type;
17
+ alertService.renderAlerts();
18
+ }
19
+ }
20
+ function Message({ translations, onCheckAgain }) {
21
+ const { backendIsNotAvailable, checkAgain, errorMessage } = translations;
22
+ return (<div data-test="ring-backend-down-notification">
23
+ <Group>
24
+ <div className={styles.title}>{backendIsNotAvailable}</div>
25
+ </Group>
26
+ <span className={styles.error}>{errorMessage} </span>
27
+ <Link onClick={onCheckAgain} data-test="check-again">{checkAgain}</Link>
28
+ </div>);
29
+ }
30
+ Message.propTypes = {
31
+ translations: PropTypes.shape({
32
+ backendIsNotAvailable: PropTypes.string,
33
+ checkAgain: PropTypes.string,
34
+ errorMessage: PropTypes.string
35
+ }),
36
+ onCheckAgain: PropTypes.func
37
+ };
38
+ export default function onBackendDown({ onCheckAgain, translations }) {
39
+ async function checkAgainWithoutClosing(e) {
40
+ // Alert has weird behaviour of handling clicks by "a" tags
41
+ e.stopPropagation();
42
+ try {
43
+ renderAlert('Connecting...', Alert.Type.LOADING);
44
+ await onCheckAgain();
45
+ }
46
+ catch (err) {
47
+ renderAlert(<Message translations={translations} onCheckAgain={checkAgainWithoutClosing}/>);
48
+ }
49
+ }
50
+ renderAlert(<Message translations={translations} onCheckAgain={checkAgainWithoutClosing}/>);
51
+ return () => alertService.remove(key);
52
+ }
@@ -0,0 +1,20 @@
1
+ import { AuthTranslations, LoginFlow } from './auth__core';
2
+ import AuthRequestBuilder from './request-builder';
3
+ import AuthStorage from './storage';
4
+ export default class IFrameFlow implements LoginFlow {
5
+ hideDialog: (() => void) | null;
6
+ private _requestBuilder;
7
+ private _storage;
8
+ private _translations;
9
+ reject?: (reason: unknown) => void;
10
+ private _promise?;
11
+ private _loginWindow?;
12
+ constructor(requestBuilder: AuthRequestBuilder, storage: AuthStorage, translations: AuthTranslations);
13
+ /**
14
+ * Initiates authorization in window
15
+ */
16
+ private _load;
17
+ _reset: () => void;
18
+ stop(): void;
19
+ authorize(): Promise<string>;
20
+ }
@@ -0,0 +1,81 @@
1
+ import React from 'react';
2
+ import loginDialogService from '../login-dialog/service';
3
+ import Link from '../link/link';
4
+ import AuthResponseParser from './response-parser';
5
+ export default class IFrameFlow {
6
+ hideDialog = null;
7
+ _requestBuilder;
8
+ _storage;
9
+ _translations;
10
+ reject;
11
+ _promise;
12
+ _loginWindow;
13
+ constructor(requestBuilder, storage, translations) {
14
+ this._requestBuilder = requestBuilder;
15
+ this._storage = storage;
16
+ this._translations = translations;
17
+ this._reset();
18
+ }
19
+ /**
20
+ * Initiates authorization in window
21
+ */
22
+ async _load() {
23
+ const authRequest = await this._requestBuilder.prepareAuthRequest(
24
+ // eslint-disable-next-line camelcase
25
+ { request_credentials: 'required', auth_mode: 'bypass_to_login' }, { nonRedirect: false });
26
+ const renderFallbackLink = () => (<Link href={authRequest.url} target="_self">{this._translations.nothingHappensLink}</Link>);
27
+ return new Promise((resolve, reject) => {
28
+ this.hideDialog = loginDialogService({
29
+ url: authRequest.url,
30
+ loader: true,
31
+ onCancel: () => {
32
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
33
+ cleanUp();
34
+ this.stop();
35
+ },
36
+ renderFallbackLink
37
+ });
38
+ this.reject = reject;
39
+ const removeTokenListener = this._storage.onTokenChange(token => {
40
+ if (token) {
41
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
42
+ cleanUp();
43
+ resolve(token.accessToken);
44
+ }
45
+ });
46
+ const removeStateListener = this._storage.onStateChange(authRequest.stateId, state => {
47
+ if (state && state.error) {
48
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
49
+ cleanUp();
50
+ reject(new AuthResponseParser.AuthError(state));
51
+ }
52
+ });
53
+ const cleanUp = () => {
54
+ this.hideDialog?.();
55
+ removeStateListener();
56
+ removeTokenListener();
57
+ };
58
+ });
59
+ }
60
+ _reset = () => {
61
+ this._promise = null;
62
+ this.hideDialog = null;
63
+ };
64
+ stop() {
65
+ if (this.hideDialog) {
66
+ this.hideDialog();
67
+ }
68
+ if (this.reject) {
69
+ this.reject('Login form closed');
70
+ }
71
+ this._reset();
72
+ }
73
+ authorize() {
74
+ if (this._promise != null && this._loginWindow != null && !this._loginWindow.closed) {
75
+ return this._promise;
76
+ }
77
+ this._promise = this._load();
78
+ this._promise.then(this._reset, this._reset);
79
+ return this._promise;
80
+ }
81
+ }
@@ -0,0 +1,48 @@
1
+ /// <reference types="typings" />
2
+ import uuid from 'simply-uuid';
3
+ import AuthStorage, { AuthState } from './storage';
4
+ export interface AuthRequestBuilderConfig {
5
+ authorization: string;
6
+ redirectUri?: string | null | undefined;
7
+ requestCredentials?: string | null | undefined;
8
+ clientId?: string | null | undefined;
9
+ scopes: readonly string[];
10
+ redirect?: boolean | null | undefined;
11
+ }
12
+ export default class AuthRequestBuilder {
13
+ config: AuthRequestBuilderConfig;
14
+ storage: AuthStorage | undefined;
15
+ /**
16
+ * @param {{
17
+ * authorization: string,
18
+ * redirectUri: string?,
19
+ * requestCredentials: string?,
20
+ * clientId: string?,
21
+ * scopes: string[]
22
+ * }} config
23
+ * @param {AuthStorage} storage
24
+ */
25
+ constructor(config: AuthRequestBuilderConfig, storage?: AuthStorage);
26
+ /**
27
+ * @return {string} random string used for state
28
+ */
29
+ static _uuid: typeof uuid.generate;
30
+ /**
31
+ * Save state and build an auth server redirect URL.
32
+ *
33
+ * @param {object=} extraParams additional query parameters for auth request
34
+ * @param {object=} extraState additional state parameters to save
35
+ * @return {Promise.<string>} promise that is resolved to authURL
36
+ */
37
+ prepareAuthRequest(extraParams?: Record<string, unknown> | null | undefined, extraState?: Partial<AuthState>): Promise<{
38
+ url: string;
39
+ stateId: string;
40
+ }>;
41
+ /**
42
+ * @param {string} id
43
+ * @param {StoredState} storedState
44
+ * @return {Promise}
45
+ * @private
46
+ */
47
+ _saveState(id: string, storedState: AuthState): Promise<void> | undefined;
48
+ }
@@ -0,0 +1,64 @@
1
+ import uuid from 'simply-uuid';
2
+ import { encodeURL } from '../global/url';
3
+ export default class AuthRequestBuilder {
4
+ config;
5
+ storage;
6
+ /**
7
+ * @param {{
8
+ * authorization: string,
9
+ * redirectUri: string?,
10
+ * requestCredentials: string?,
11
+ * clientId: string?,
12
+ * scopes: string[]
13
+ * }} config
14
+ * @param {AuthStorage} storage
15
+ */
16
+ constructor(config, storage) {
17
+ this.config = config;
18
+ this.storage = storage;
19
+ }
20
+ /**
21
+ * @return {string} random string used for state
22
+ */
23
+ static _uuid = uuid.generate;
24
+ /**
25
+ * Save state and build an auth server redirect URL.
26
+ *
27
+ * @param {object=} extraParams additional query parameters for auth request
28
+ * @param {object=} extraState additional state parameters to save
29
+ * @return {Promise.<string>} promise that is resolved to authURL
30
+ */
31
+ async prepareAuthRequest(extraParams, extraState) {
32
+ const stateId = AuthRequestBuilder._uuid();
33
+ const scopes = this.config.scopes.map(scope => encodeURIComponent(scope));
34
+ /* eslint-disable camelcase */
35
+ const request = Object.assign({
36
+ response_type: 'token',
37
+ state: stateId,
38
+ redirect_uri: this.config.redirectUri,
39
+ request_credentials: this.config.requestCredentials,
40
+ client_id: this.config.clientId,
41
+ scope: scopes.join(' ')
42
+ }, extraParams || {});
43
+ /* eslint-enable camelcase */
44
+ const authURL = encodeURL(this.config.authorization, request);
45
+ const state = Object.assign({
46
+ restoreLocation: window.location.href,
47
+ scopes: this.config.scopes
48
+ }, extraState || {});
49
+ await this._saveState(stateId, state);
50
+ return ({
51
+ url: authURL,
52
+ stateId
53
+ });
54
+ }
55
+ /**
56
+ * @param {string} id
57
+ * @param {StoredState} storedState
58
+ * @return {Promise}
59
+ * @private
60
+ */
61
+ _saveState(id, storedState) {
62
+ return this.storage?.saveState(id, storedState);
63
+ }
64
+ }
@@ -0,0 +1,70 @@
1
+ import ExtendableError from 'es6-error';
2
+ export interface AuthResponse {
3
+ accessToken?: string;
4
+ state?: string;
5
+ token_type?: string;
6
+ expiresIn?: string;
7
+ scope?: string;
8
+ error?: string | Error;
9
+ errorDescription?: string;
10
+ errorUri?: string;
11
+ restoreAuthState?: string;
12
+ }
13
+ export declare class AuthError extends ExtendableError {
14
+ code: string | Error | AuthError | undefined;
15
+ uri: string | undefined;
16
+ stateId: string | undefined;
17
+ constructor(authResponse?: AuthResponse);
18
+ }
19
+ /**
20
+ * @typedef {Object} AuthResponse
21
+ * @property {?string} accessToken
22
+ * @property {?string} state
23
+ * @property {?string} token_type
24
+ * @property {?string} expiresIn
25
+ * @property {?string} scope
26
+ * @property {?string} error
27
+ */
28
+ export default class AuthResponseParser {
29
+ readonly _authResponse: AuthResponse;
30
+ constructor();
31
+ static AuthError: typeof AuthError;
32
+ static convertKey(key: string): string;
33
+ /**
34
+ * Check if the hash contains an access token.
35
+ * If it does, return auth response. Otherwise return undefined.
36
+ * Always clears the hash part of the URL.
37
+ *
38
+ * @throws {Error} if the auth server returned an error
39
+ * @return {?AuthResponse}
40
+ */
41
+ getAuthResponseFromURL(): AuthResponse | null;
42
+ /**
43
+ * Validates given authResponse.
44
+ * If it contains a token - returns the token, if an error is found - throws the error,
45
+ * otherwise - null
46
+ * Always clears the hash part of the URL.
47
+ *
48
+ * @param authResponse {AuthResponse} parsed authResponse
49
+ * @throws {Error} if the auth server returned an error
50
+ * @return {?AuthResponse}
51
+ */
52
+ validateAuthResponse(authResponse: AuthResponse): AuthResponse | null;
53
+ /**
54
+ * Reads the current accessToken from the URL.
55
+ * Doesn't modify URL
56
+ *
57
+ * @return {AuthResponse}
58
+ */
59
+ readAuthResponseFromURL(): AuthResponse;
60
+ /**
61
+ * @return {string} part of the URL after # sign.
62
+ * @private
63
+ */
64
+ getHash(): string | null;
65
+ /**
66
+ * Current page location.
67
+ * @return {string}
68
+ */
69
+ getLocation(): string | null;
70
+ }
@@ -0,0 +1,99 @@
1
+ import ExtendableError from 'es6-error';
2
+ import { parseQueryString } from '../global/url';
3
+ export class AuthError extends ExtendableError {
4
+ code;
5
+ uri;
6
+ stateId;
7
+ // Supports weird IE 11 failing test issue
8
+ constructor(authResponse = {}) {
9
+ super(authResponse.errorDescription);
10
+ this.code = authResponse.error;
11
+ this.uri = authResponse.errorUri;
12
+ this.stateId = authResponse.state;
13
+ }
14
+ }
15
+ /**
16
+ * @typedef {Object} AuthResponse
17
+ * @property {?string} accessToken
18
+ * @property {?string} state
19
+ * @property {?string} token_type
20
+ * @property {?string} expiresIn
21
+ * @property {?string} scope
22
+ * @property {?string} error
23
+ */
24
+ export default class AuthResponseParser {
25
+ _authResponse;
26
+ constructor() {
27
+ this._authResponse = this.readAuthResponseFromURL();
28
+ }
29
+ static AuthError = AuthError;
30
+ static convertKey(key) {
31
+ return key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
32
+ }
33
+ /**
34
+ * Check if the hash contains an access token.
35
+ * If it does, return auth response. Otherwise return undefined.
36
+ * Always clears the hash part of the URL.
37
+ *
38
+ * @throws {Error} if the auth server returned an error
39
+ * @return {?AuthResponse}
40
+ */
41
+ getAuthResponseFromURL() {
42
+ return this.validateAuthResponse(this._authResponse);
43
+ }
44
+ /**
45
+ * Validates given authResponse.
46
+ * If it contains a token - returns the token, if an error is found - throws the error,
47
+ * otherwise - null
48
+ * Always clears the hash part of the URL.
49
+ *
50
+ * @param authResponse {AuthResponse} parsed authResponse
51
+ * @throws {Error} if the auth server returned an error
52
+ * @return {?AuthResponse}
53
+ */
54
+ validateAuthResponse(authResponse) {
55
+ // Check for errors
56
+ if (authResponse.error) {
57
+ throw new AuthResponseParser.AuthError(authResponse);
58
+ }
59
+ // If there is no token in the hash
60
+ if (!authResponse.accessToken) {
61
+ return null;
62
+ }
63
+ return { ...authResponse, accessToken: authResponse.accessToken };
64
+ }
65
+ /**
66
+ * Reads the current accessToken from the URL.
67
+ * Doesn't modify URL
68
+ *
69
+ * @return {AuthResponse}
70
+ */
71
+ readAuthResponseFromURL() {
72
+ const authResponse = {};
73
+ const rawAuthResponse = parseQueryString(this.getHash());
74
+ Object.keys(rawAuthResponse).forEach(key => {
75
+ if (key.indexOf('_') !== -1) {
76
+ authResponse[AuthResponseParser.convertKey(key)] = rawAuthResponse[key];
77
+ return;
78
+ }
79
+ authResponse[key] = rawAuthResponse[key];
80
+ });
81
+ return authResponse;
82
+ }
83
+ /**
84
+ * @return {string} part of the URL after # sign.
85
+ * @private
86
+ */
87
+ getHash() {
88
+ // Because of stupid Firefox bug — https://bugzilla.mozilla.org/show_bug.cgi?id=483304
89
+ const location = this.getLocation();
90
+ return location && location.replace(/^[^#]*#?/, '');
91
+ }
92
+ /**
93
+ * Current page location.
94
+ * @return {string}
95
+ */
96
+ getLocation() {
97
+ return window.location.toString();
98
+ }
99
+ }