@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,61 @@
1
+ import ExtendableError from 'es6-error';
2
+ export declare const defaultFetchConfig: RequestInit;
3
+ export interface HTTPErrorData {
4
+ error?: string;
5
+ }
6
+ export declare class HTTPError extends ExtendableError {
7
+ data: HTTPErrorData;
8
+ status: number | undefined;
9
+ constructor(response: Partial<Response>, data?: HTTPErrorData);
10
+ }
11
+ export declare const CODE: {
12
+ UNAUTHORIZED: number;
13
+ };
14
+ type Method<T> = (url: string, params?: RequestParams) => Promise<T>;
15
+ export interface FetchParams<T = unknown> extends Omit<RequestInit, 'body' | 'headers'> {
16
+ body?: T;
17
+ query?: Record<string, unknown> | undefined;
18
+ headers?: HeadersInit | Record<string, null | undefined>;
19
+ }
20
+ export interface RequestParams<RawBody extends boolean = true | false> extends FetchParams<RawBody extends true ? (BodyInit | null) : unknown> {
21
+ sendRawBody?: RawBody;
22
+ }
23
+ export type RequestParamsWithoutMethod<RawBody extends boolean = boolean> = Omit<RequestParams<RawBody>, 'method'>;
24
+ export interface HTTPAuth {
25
+ requestToken(): Promise<string | null> | string | null;
26
+ forceTokenUpdate(): Promise<string | null>;
27
+ }
28
+ export default class HTTP implements Partial<HTTPAuth> {
29
+ baseUrl: string | null | undefined;
30
+ _requestsMeta: WeakMap<object, Partial<Response>>;
31
+ fetchConfig: RequestInit;
32
+ requestToken?: () => Promise<string | null> | string | null;
33
+ shouldRefreshToken?: (error: string) => boolean;
34
+ forceTokenUpdate?: () => Promise<string | null>;
35
+ constructor(auth?: HTTPAuth, baseUrl?: string | null | undefined, fetchConfig?: RequestInit);
36
+ setAuth: (auth: HTTPAuth) => void;
37
+ setBaseUrl: (baseUrl: string | null | undefined) => void;
38
+ _fetch(...args: Parameters<typeof fetch>): Promise<Response> | Partial<Response>;
39
+ private _makeRequestUrl;
40
+ private _performRequest;
41
+ private _storeRequestMeta;
42
+ private _processResponse;
43
+ private static _isErrorStatus;
44
+ fetch: <T = unknown>(url: string, params?: FetchParams) => Promise<T>;
45
+ authorizedFetch(...args: Parameters<HTTP['_performRequest']>): Promise<any>;
46
+ request: <T = unknown>(url: string, params?: RequestParams) => Promise<T>;
47
+ getMetaForResponse: (response: object) => Partial<Response> | undefined;
48
+ get: <T = unknown>(url: string, params?: RequestParamsWithoutMethod) => Promise<T>;
49
+ post: <T = unknown>(url: string, params?: RequestParamsWithoutMethod) => Promise<T>;
50
+ delete: <T = unknown>(url: string, params?: RequestParamsWithoutMethod) => Promise<T>;
51
+ put: <T = unknown>(url: string, params?: RequestParamsWithoutMethod) => Promise<T>;
52
+ /**
53
+ * Usage: const {promise, abort} = http.abortify(http.get<{id: string}>)('http://test.com');
54
+ * @param method
55
+ */
56
+ abortify: <T>(method: Method<T>) => (url: string, params?: RequestParams<boolean> | undefined) => {
57
+ promise: Promise<T>;
58
+ abort: () => void;
59
+ };
60
+ }
61
+ export {};
@@ -0,0 +1,192 @@
1
+ import ExtendableError from 'es6-error';
2
+ import { encodeURL, joinBaseURLAndPath } from '../global/url';
3
+ /**
4
+ * @name HTTP
5
+ */
6
+ const TOKEN_TYPE = 'Bearer';
7
+ const STATUS_OK_IF_MORE_THAN = 200;
8
+ const STATUS_BAD_IF_MORE_THAN = 300;
9
+ export const defaultFetchConfig = {
10
+ headers: {
11
+ 'Content-Type': 'application/json',
12
+ Accept: 'application/json'
13
+ },
14
+ credentials: 'same-origin'
15
+ };
16
+ export class HTTPError extends ExtendableError {
17
+ data;
18
+ status;
19
+ constructor(response, data = {}) {
20
+ super(`${response.status} ${response.statusText || ''}`);
21
+ this.data = data;
22
+ this.status = response.status;
23
+ }
24
+ }
25
+ export const CODE = {
26
+ UNAUTHORIZED: 401
27
+ };
28
+ function isRawBody(params) {
29
+ return params.sendRawBody === true;
30
+ }
31
+ export default class HTTP {
32
+ baseUrl = null;
33
+ _requestsMeta = new WeakMap();
34
+ fetchConfig;
35
+ requestToken;
36
+ shouldRefreshToken;
37
+ forceTokenUpdate;
38
+ constructor(auth, baseUrl, fetchConfig = {}) {
39
+ if (auth) {
40
+ this.setAuth(auth);
41
+ }
42
+ this.setBaseUrl(baseUrl);
43
+ const { headers, ...defaultConfig } = defaultFetchConfig;
44
+ this.fetchConfig = {
45
+ ...defaultConfig,
46
+ ...fetchConfig,
47
+ headers: {
48
+ ...headers,
49
+ ...fetchConfig.headers
50
+ }
51
+ };
52
+ }
53
+ setAuth = (auth) => {
54
+ this.requestToken = () => auth.requestToken();
55
+ this.shouldRefreshToken = auth.constructor.shouldRefreshToken;
56
+ this.forceTokenUpdate = () => auth.forceTokenUpdate();
57
+ };
58
+ setBaseUrl = (baseUrl) => {
59
+ this.baseUrl = baseUrl;
60
+ };
61
+ _fetch(...args) {
62
+ return fetch(...args);
63
+ }
64
+ _makeRequestUrl(url, queryObject) {
65
+ const urlWithQuery = encodeURL(url, queryObject);
66
+ return joinBaseURLAndPath(this.baseUrl, urlWithQuery);
67
+ }
68
+ _performRequest(url, token, params = {}) {
69
+ const { headers, body, query = {}, sendRawBody, ...fetchConfig } = params;
70
+ const combinedHeaders = {
71
+ ...this.fetchConfig.headers,
72
+ ...(token ? { Authorization: `${TOKEN_TYPE} ${token}` } : {}),
73
+ ...headers
74
+ };
75
+ Object.entries(combinedHeaders).forEach(([key, header]) => {
76
+ if (header === null || header === undefined) {
77
+ Reflect.deleteProperty(combinedHeaders, key);
78
+ }
79
+ });
80
+ let bodyToSend;
81
+ if (isRawBody(params)) {
82
+ bodyToSend = params.body;
83
+ }
84
+ else {
85
+ bodyToSend = params.body === null || params.body === undefined || params.body === ''
86
+ ? params.body
87
+ : JSON.stringify(body);
88
+ }
89
+ return this._fetch(this._makeRequestUrl(url, query), {
90
+ ...this.fetchConfig,
91
+ headers: combinedHeaders,
92
+ ...fetchConfig,
93
+ body: bodyToSend
94
+ });
95
+ }
96
+ _storeRequestMeta(parsedResponse, rawResponse) {
97
+ const { headers, ok, redirected, status, statusText, type, url } = rawResponse;
98
+ this._requestsMeta.
99
+ set(parsedResponse, { headers, ok, redirected, status, statusText, type, url });
100
+ }
101
+ async _processResponse(response) {
102
+ const contentType = response.headers?.get('content-type');
103
+ const isJson = contentType && contentType.indexOf('application/json') !== -1;
104
+ if (response.status != null && HTTP._isErrorStatus(response.status)) {
105
+ let resJson;
106
+ try {
107
+ resJson = await (isJson ? response.json?.() : response.text?.());
108
+ }
109
+ catch (err) {
110
+ // noop
111
+ }
112
+ throw new HTTPError(response, resJson);
113
+ }
114
+ try {
115
+ const parsedResponse = await (isJson ? response.json?.() : { data: await response.text?.() });
116
+ this._storeRequestMeta(parsedResponse, response);
117
+ return parsedResponse;
118
+ }
119
+ catch (err) {
120
+ return response;
121
+ }
122
+ }
123
+ static _isErrorStatus(status) {
124
+ return status < STATUS_OK_IF_MORE_THAN || status >= STATUS_BAD_IF_MORE_THAN;
125
+ }
126
+ fetch = async (url, params = {}) => {
127
+ const { body, query = {}, ...fetchConfig } = params;
128
+ const response = await this._fetch(this._makeRequestUrl(url, query), {
129
+ ...fetchConfig,
130
+ headers: fetchConfig.headers,
131
+ body: body !== null && body !== undefined && body !== '' ? JSON.stringify(body) : body
132
+ });
133
+ return this._processResponse(response);
134
+ };
135
+ async authorizedFetch(...args) {
136
+ const response = await this._performRequest(...args);
137
+ return this._processResponse(response);
138
+ }
139
+ request = async (url, params) => {
140
+ let token = await this.requestToken?.();
141
+ let response = await this._performRequest(url, token, params);
142
+ try {
143
+ // Wait for result to catch an HTTP error
144
+ return await this._processResponse(response);
145
+ }
146
+ catch (error) {
147
+ if (!(error instanceof HTTPError)) {
148
+ throw error;
149
+ }
150
+ const shouldRefreshToken = error.data.error !== undefined
151
+ ? this.shouldRefreshToken?.(error.data.error)
152
+ : false;
153
+ if (shouldRefreshToken) {
154
+ token = await this.forceTokenUpdate?.();
155
+ response = await this._performRequest(url, token, params);
156
+ return this._processResponse(response);
157
+ }
158
+ throw error;
159
+ }
160
+ };
161
+ getMetaForResponse = (response) => this._requestsMeta.get(response);
162
+ get = (url, params) => (this.request(url, {
163
+ ...params,
164
+ method: 'GET'
165
+ }));
166
+ post = (url, params) => (this.request(url, {
167
+ ...params,
168
+ method: 'POST'
169
+ }));
170
+ delete = (url, params) => (this.request(url, {
171
+ ...params,
172
+ method: 'DELETE'
173
+ }));
174
+ put = (url, params) => (this.request(url, {
175
+ ...params,
176
+ method: 'PUT'
177
+ }));
178
+ /**
179
+ * Usage: const {promise, abort} = http.abortify(http.get<{id: string}>)('http://test.com');
180
+ * @param method
181
+ */
182
+ abortify = (method) => (...[url, params]) => {
183
+ const ctrl = new AbortController();
184
+ if (params && !('signal' in params)) {
185
+ params.signal = ctrl.signal;
186
+ }
187
+ return {
188
+ promise: method.call(this, url, params),
189
+ abort: () => ctrl.abort()
190
+ };
191
+ };
192
+ }
@@ -0,0 +1,20 @@
1
+ import HTTP, { FetchParams } from './http';
2
+ export interface HTTPMockRequest {
3
+ url: string;
4
+ params: FetchParams;
5
+ }
6
+ export default class HTTPMock extends HTTP {
7
+ defaultResponse: unknown;
8
+ requests: HTTPMockRequest[];
9
+ responsesByUrlMap: Map<string | RegExp, unknown>;
10
+ constructor();
11
+ _fetch(url: string, params: RequestInit): {
12
+ status: number;
13
+ headers: Headers;
14
+ json: () => Promise<unknown>;
15
+ };
16
+ respondDefault(response: unknown): void;
17
+ respondForUrl(url: string | RegExp, response: unknown): void;
18
+ _getResponseForUrl(urlToMatch: string): unknown;
19
+ getRequestsByUrlPart(url: string): HTTPMockRequest[];
20
+ }
@@ -0,0 +1,52 @@
1
+ import HTTP from './http';
2
+ const authMock = {
3
+ requestToken: () => 'mock token',
4
+ shouldRefreshToken: () => false,
5
+ forceTokenUpdate: () => Promise.resolve(null)
6
+ };
7
+ export default class HTTPMock extends HTTP {
8
+ defaultResponse;
9
+ requests;
10
+ responsesByUrlMap;
11
+ constructor() {
12
+ super(authMock);
13
+ this.defaultResponse = null;
14
+ this.requests = [];
15
+ this.responsesByUrlMap = new Map();
16
+ }
17
+ _fetch(url, params) {
18
+ this.requests = [...this.requests, {
19
+ url,
20
+ params: {
21
+ ...params,
22
+ body: typeof params.body === 'string' ? JSON.parse(params.body) : params.body
23
+ }
24
+ }];
25
+ return {
26
+ status: 200,
27
+ headers: new Headers({ 'content-type': 'application/json' }),
28
+ json: () => Promise.resolve((this._getResponseForUrl(url) || this.defaultResponse))
29
+ };
30
+ }
31
+ respondDefault(response) {
32
+ this.defaultResponse = response;
33
+ }
34
+ respondForUrl(url, response) {
35
+ this.responsesByUrlMap.set(url, response);
36
+ }
37
+ _getResponseForUrl(urlToMatch) {
38
+ const urls = this.responsesByUrlMap.keys();
39
+ for (const url of urls) {
40
+ if (url === urlToMatch) {
41
+ return this.responsesByUrlMap.get(url);
42
+ }
43
+ if (url instanceof RegExp && url.test(urlToMatch)) {
44
+ return this.responsesByUrlMap.get(url);
45
+ }
46
+ }
47
+ return null;
48
+ }
49
+ getRequestsByUrlPart(url) {
50
+ return this.requests.filter(it => it.url.indexOf(url) !== -1);
51
+ }
52
+ }
@@ -0,0 +1,44 @@
1
+ import Auth from '../auth/auth';
2
+ import HTTP from '../http/http';
3
+ export interface Item {
4
+ name: string;
5
+ }
6
+ export type Response<I extends Item, U extends string> = Partial<Record<U, I[]>> & {
7
+ total: number;
8
+ };
9
+ export interface HubSourceOptions {
10
+ searchMax: number;
11
+ searchSideThreshold: number;
12
+ queryFormatter: (query: string) => string;
13
+ }
14
+ /**
15
+ * HubSource is designed to speed up search requests for small installations.
16
+ * If there are less than "searchSideThreshold" items, it uses client-side filtering
17
+ * of cached results to greatly increase search speed. Useful for completion and
18
+ * select data source.
19
+ */
20
+ export default class HubSource<I extends Item, U extends string> {
21
+ static TOP_ALL: number;
22
+ http: HTTP;
23
+ relativeUrl: U;
24
+ options: HubSourceOptions;
25
+ storedData: Response<I, U> | null;
26
+ isClientSideSearch: boolean | null;
27
+ filterFn: (item: I) => boolean;
28
+ constructor(auth: Auth, relativeUrl: U, options?: Partial<HubSourceOptions>);
29
+ makeRequest<T = unknown>(queryParams?: Record<string, unknown>): Promise<T>;
30
+ makeCachedRequest(params?: Record<string, unknown>): Promise<Response<I, U>>;
31
+ static mergeParams(params?: Record<string, unknown>, toMerge?: Record<string, unknown>): Record<string, unknown>;
32
+ checkIsClientSideSearch(res: Response<I, U>): boolean;
33
+ getDefaultFilterFn(query?: string): (it: I) => boolean;
34
+ formatQuery(query?: string): string;
35
+ static validateInputParams(params: Record<string, unknown>): void;
36
+ processResults(res: Response<I, U>): I[];
37
+ sideDetectionRequest(params?: Record<string, unknown>, query?: string): Promise<unknown>;
38
+ doClientSideSearch(params?: Record<string, unknown>): Promise<Response<I, U>>;
39
+ doServerSideSearch(params?: Record<string, unknown>, query?: string): Promise<unknown>;
40
+ getValueFromSuitableSource(query?: string, params?: Record<string, unknown>): Promise<Partial<Record<U, I[]>> & {
41
+ total: number;
42
+ }>;
43
+ get(query: string, params: Record<string, unknown>, filterFn?: (item: I) => boolean): Promise<I[]>;
44
+ }
@@ -0,0 +1,107 @@
1
+ const defaultOptions = {
2
+ searchMax: 20,
3
+ searchSideThreshold: 100,
4
+ queryFormatter: query => `${query} or ${query}*`
5
+ };
6
+ /**
7
+ * HubSource is designed to speed up search requests for small installations.
8
+ * If there are less than "searchSideThreshold" items, it uses client-side filtering
9
+ * of cached results to greatly increase search speed. Useful for completion and
10
+ * select data source.
11
+ */
12
+ export default class HubSource {
13
+ static TOP_ALL = -1;
14
+ http;
15
+ relativeUrl;
16
+ options;
17
+ storedData;
18
+ isClientSideSearch;
19
+ filterFn;
20
+ constructor(auth, relativeUrl, options) {
21
+ this.http = auth.http;
22
+ this.relativeUrl = relativeUrl;
23
+ this.options = Object.assign({}, defaultOptions, options);
24
+ this.storedData = null;
25
+ this.isClientSideSearch = null;
26
+ this.filterFn = () => true;
27
+ }
28
+ makeRequest(queryParams) {
29
+ return this.http.get(this.relativeUrl, { query: queryParams });
30
+ }
31
+ async makeCachedRequest(params) {
32
+ if (this.storedData) {
33
+ return this.storedData;
34
+ }
35
+ const res = await this.makeRequest(params);
36
+ this.storedData = res;
37
+ return res;
38
+ }
39
+ static mergeParams(params, toMerge) {
40
+ return Object.assign({}, params, toMerge);
41
+ }
42
+ checkIsClientSideSearch(res) {
43
+ return res.total <= this.options.searchSideThreshold;
44
+ }
45
+ getDefaultFilterFn(query) {
46
+ if (!query) {
47
+ return () => true;
48
+ }
49
+ return (it) => it.name.toLowerCase().indexOf(query.toLowerCase()) !== -1;
50
+ }
51
+ formatQuery(query) {
52
+ return query ? this.options.queryFormatter(query) : '';
53
+ }
54
+ static validateInputParams(params) {
55
+ if (params.top) {
56
+ throw new Error('HubSource: params.top should not be filled, configure "options.searchMax" instead');
57
+ }
58
+ if (params.query) {
59
+ throw new Error('HubSource: params.query should not be filled, configure "options.queryFormatter" instead');
60
+ }
61
+ }
62
+ processResults(res) {
63
+ const items = res[this.relativeUrl] || [];
64
+ if (this.isClientSideSearch) {
65
+ return items.
66
+ filter(it => this.filterFn(it)).
67
+ slice(0, this.options.searchMax);
68
+ }
69
+ return items;
70
+ }
71
+ async sideDetectionRequest(params, query) {
72
+ const res = await this.makeCachedRequest(HubSource.mergeParams(params, {
73
+ $top: this.options.searchSideThreshold
74
+ }));
75
+ this.isClientSideSearch = this.checkIsClientSideSearch(res);
76
+ if (!this.isClientSideSearch) {
77
+ return this.doServerSideSearch(params, query);
78
+ }
79
+ return res;
80
+ }
81
+ doClientSideSearch(params) {
82
+ return this.makeCachedRequest(HubSource.mergeParams(params, {
83
+ $top: this.constructor.TOP_ALL
84
+ }));
85
+ }
86
+ doServerSideSearch(params, query) {
87
+ return this.makeRequest(HubSource.mergeParams(params, {
88
+ query: this.formatQuery(query),
89
+ $top: this.options.searchMax
90
+ }));
91
+ }
92
+ getValueFromSuitableSource(query, params) {
93
+ if (this.isClientSideSearch === null) {
94
+ return this.sideDetectionRequest(params, query);
95
+ }
96
+ if (this.isClientSideSearch) {
97
+ return this.doClientSideSearch(params);
98
+ }
99
+ return this.doServerSideSearch(params, query);
100
+ }
101
+ async get(query, params, filterFn) {
102
+ HubSource.validateInputParams(params);
103
+ this.filterFn = filterFn || this.getDefaultFilterFn(query);
104
+ const res = await this.getValueFromSuitableSource(query, params);
105
+ return this.processResults(res);
106
+ }
107
+ }
@@ -0,0 +1,4 @@
1
+ import Auth, { AuthUser } from '../auth/auth';
2
+ import { UserCardUser } from '../user-card/card';
3
+ export declare function convertUserForCard(hubUser: AuthUser, serverUri?: string): UserCardUser;
4
+ export declare function createHubUserCardSource(auth: Auth, userId: string | number, fields?: string): () => Promise<UserCardUser>;
@@ -0,0 +1,20 @@
1
+ import HTTP from '../http/http';
2
+ const DEFAULT_FIELDS = 'id,name,login,banned,banReason,profile(email/email,avatar/url)';
3
+ export function convertUserForCard(hubUser, serverUri = '') {
4
+ return {
5
+ name: hubUser.name,
6
+ login: hubUser.login,
7
+ banned: hubUser.banned,
8
+ banReason: hubUser.banReason,
9
+ email: hubUser.profile?.email?.email,
10
+ avatarUrl: hubUser.profile?.avatar?.url,
11
+ href: `${serverUri}users/${hubUser.id}`
12
+ };
13
+ }
14
+ export function createHubUserCardSource(auth, userId, fields = DEFAULT_FIELDS) {
15
+ const http = new HTTP(auth);
16
+ return async function getHubUser() {
17
+ const hubUser = await http.get(`${auth.config.serverUri}api/rest/users/${userId}?fields=${fields}`);
18
+ return convertUserForCard(hubUser, auth.config.serverUri);
19
+ };
20
+ }
@@ -0,0 +1,24 @@
1
+ import Auth, { AuthUser } from '../auth/auth';
2
+ import HubSource, { Item } from './hub-source';
3
+ export interface HubSourceUsersGroupsOptions {
4
+ searchMax: number;
5
+ searchSideThreshold: number;
6
+ }
7
+ export interface UserGroup extends Item {
8
+ id: string;
9
+ total?: number;
10
+ userCount: number;
11
+ iconUrl?: string;
12
+ }
13
+ export default class HubSourceUsersGroups {
14
+ auth: Auth;
15
+ options: HubSourceUsersGroupsOptions;
16
+ usersSource: HubSource<AuthUser, 'users'>;
17
+ groupsSource: HubSource<UserGroup, 'usergroups'>;
18
+ constructor(auth: Auth, options?: Partial<HubSourceUsersGroupsOptions>);
19
+ static wrapMultiwordQuery(query?: string): string | undefined;
20
+ createUsersFilterFn(query?: string): (it: AuthUser) => boolean;
21
+ getUsers(query?: string): Promise<AuthUser[]>;
22
+ getGroups(query?: string): Promise<UserGroup[]>;
23
+ getUserAndGroups(query?: string): Promise<[AuthUser[], UserGroup[]]>;
24
+ }
@@ -0,0 +1,53 @@
1
+ import HubSource from './hub-source';
2
+ const defaultOptions = {
3
+ searchMax: 20,
4
+ searchSideThreshold: 200
5
+ };
6
+ export default class HubSourceUsersGroups {
7
+ auth;
8
+ options;
9
+ usersSource;
10
+ groupsSource;
11
+ constructor(auth, options) {
12
+ this.auth = auth;
13
+ this.options = Object.assign({}, defaultOptions, options);
14
+ this.usersSource = new HubSource(auth, 'users', {
15
+ searchMax: this.options.searchMax,
16
+ searchSideThreshold: this.options.searchSideThreshold,
17
+ queryFormatter: query => `nameStartsWith: ${HubSourceUsersGroups.wrapMultiwordQuery(query)} or loginStartsWith: ${HubSourceUsersGroups.wrapMultiwordQuery(query)}`
18
+ });
19
+ this.groupsSource = new HubSource(auth, 'usergroups', {
20
+ searchMax: this.options.searchMax,
21
+ searchSideThreshold: this.options.searchSideThreshold
22
+ });
23
+ }
24
+ static wrapMultiwordQuery(query) {
25
+ if (query && query.indexOf(' ') !== -1) {
26
+ return `{${query}}`;
27
+ }
28
+ return query;
29
+ }
30
+ createUsersFilterFn(query) {
31
+ if (!query) {
32
+ return () => true;
33
+ }
34
+ const normalizedQuery = query.toLowerCase();
35
+ return (it) => (it.name.toLowerCase().indexOf(normalizedQuery) !== -1 ||
36
+ it.login.toLowerCase().indexOf(normalizedQuery) !== -1);
37
+ }
38
+ getUsers(query = '') {
39
+ return this.usersSource.get(query, {
40
+ fields: 'id,name,login,total,profile/avatar/url',
41
+ orderBy: 'name'
42
+ }, this.createUsersFilterFn(query));
43
+ }
44
+ getGroups(query = '') {
45
+ return this.groupsSource.get(query, {
46
+ fields: 'id,name,total,userCount,iconUrl',
47
+ orderBy: 'name'
48
+ });
49
+ }
50
+ getUserAndGroups(query) {
51
+ return Promise.all([this.getUsers(query), this.getGroups(query)]);
52
+ }
53
+ }
@@ -0,0 +1,46 @@
1
+ This is localisation layer, that allows to translate the app into different languages.
2
+
3
+ All messages should be stored in a messages.json, using that format https://www.i18next.com/misc/json-format#i18next-json-v4
4
+
5
+ ### How to use
6
+
7
+ 1. Using your project i18n tooling, construct an object with localised messages, like:
8
+ ```
9
+ // You can use https://ttag.js.org/ for example:
10
+ const localised = {
11
+ login: t`Log in`,
12
+ ...
13
+ }
14
+ ```
15
+
16
+ 2. Pass it to i18n singleton, using `setTranslations`. That would provide localisation to non-react components, like Auth.
17
+
18
+ ```
19
+ // Your messages object should have localised strings at that moment
20
+ const localised = {
21
+ login: 'Inloggen',
22
+ ...
23
+ }
24
+
25
+ setTranslations(localised);
26
+ ```
27
+
28
+ 3. Add I18nContextHolder into your root React tree. If you replace "localised" object with another one, consumers would be updated automatically.
29
+
30
+ ```
31
+ <I18nContextHolder messages={localised}>
32
+ <App />
33
+ </I18nContextHolder>
34
+ ```
35
+
36
+
37
+
38
+ ### Utilities
39
+
40
+ There is some ways to automate strings extraction from messages.json. You can do:
41
+
42
+ ```
43
+ npx i18next-conv -s messages.json -t messages.pot -l en --ctxSeparator "|" --compatibilityJSON v4
44
+ ```
45
+
46
+ And get a .pot file, which you can merge with your other sources
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import { type Messages } from './i18n';
3
+ export interface I18nContextProps {
4
+ translate(key: keyof Messages): string;
5
+ messages: Messages;
6
+ }
7
+ export declare const I18nContext: React.Context<I18nContextProps>;
8
+ interface I18nContextHolderProps {
9
+ messages: Messages;
10
+ children?: React.ReactNode;
11
+ }
12
+ export declare const I18nContextHolder: React.FC<I18nContextHolderProps>;
13
+ export {};
@@ -0,0 +1,14 @@
1
+ import React, { useEffect } from 'react';
2
+ import { getTranslations, setTranslations, translate } from './i18n';
3
+ export const I18nContext = React.createContext({
4
+ messages: getTranslations(),
5
+ translate
6
+ });
7
+ export const I18nContextHolder = ({ children, messages }) => {
8
+ useEffect(() => {
9
+ setTranslations(messages);
10
+ }, [messages]);
11
+ return (<I18nContext.Provider value={{ messages, translate }}>
12
+ {children}
13
+ </I18nContext.Provider>);
14
+ };