@jetbrains/ring-ui 4.2.9 → 4.2.12

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 (317) hide show
  1. package/components/http/http.js +28 -3
  2. package/components/http/http.test.js +14 -0
  3. package/dist/_helpers/_rollupPluginBabelHelpers.js +34 -0
  4. package/dist/_helpers/anchor.js +33 -0
  5. package/dist/_helpers/badge.js +3 -0
  6. package/dist/_helpers/button-group.js +3 -0
  7. package/dist/_helpers/button-set.js +3 -0
  8. package/dist/_helpers/button-toolbar.js +3 -0
  9. package/dist/_helpers/button__classes.js +39 -0
  10. package/dist/_helpers/card.js +75 -0
  11. package/dist/_helpers/checkbox.js +3 -0
  12. package/dist/_helpers/date-picker.js +3 -0
  13. package/dist/_helpers/dialog__body-scroll-preventer.js +58 -0
  14. package/dist/_helpers/error-message.js +3 -0
  15. package/dist/_helpers/footer.js +121 -0
  16. package/dist/_helpers/grid.js +3 -0
  17. package/dist/_helpers/group.js +3 -0
  18. package/dist/_helpers/header.js +3 -0
  19. package/dist/_helpers/icon.js +3 -0
  20. package/dist/_helpers/inject-styles.js +22 -0
  21. package/dist/_helpers/input.js +3 -0
  22. package/dist/_helpers/island.js +3 -0
  23. package/dist/_helpers/link.js +3 -0
  24. package/dist/_helpers/list.js +3 -0
  25. package/dist/_helpers/loader-screen.js +3 -0
  26. package/dist/_helpers/panel.js +3 -0
  27. package/dist/_helpers/query-assist__suggestions.js +95 -0
  28. package/dist/_helpers/radio.js +3 -0
  29. package/dist/_helpers/select__filter.js +77 -0
  30. package/dist/_helpers/services-link.js +40 -0
  31. package/dist/_helpers/sidebar.js +126 -0
  32. package/dist/_helpers/table.js +3 -0
  33. package/dist/_helpers/tabs.js +3 -0
  34. package/dist/_helpers/title.js +100 -0
  35. package/dist/alert/alert.js +262 -0
  36. package/dist/alert/container.js +48 -0
  37. package/dist/alert-service/alert-service.js +173 -0
  38. package/dist/analytics/analytics.js +118 -0
  39. package/dist/analytics/analytics__custom-plugin.js +128 -0
  40. package/dist/analytics/analytics__fus-plugin.js +102 -0
  41. package/dist/analytics/analytics__ga-plugin.js +75 -0
  42. package/dist/analytics/analytics__plugin-utils.js +80 -0
  43. package/dist/analytics-ng/analytics-ng.js +95 -0
  44. package/dist/auth/auth.js +96 -0
  45. package/dist/auth/auth__core.js +1065 -0
  46. package/dist/auth/background-flow.js +123 -0
  47. package/dist/auth/down-notification.js +117 -0
  48. package/dist/auth/iframe-flow.js +153 -0
  49. package/dist/auth/landing-entry.js +5 -0
  50. package/dist/auth/landing.js +90 -0
  51. package/dist/auth/request-builder.js +76 -0
  52. package/dist/auth/response-parser.js +118 -0
  53. package/dist/auth/storage.js +283 -0
  54. package/dist/auth/token-validator.js +180 -0
  55. package/dist/auth/window-flow.js +134 -0
  56. package/dist/auth-dialog/auth-dialog.js +180 -0
  57. package/dist/auth-dialog-service/auth-dialog-service.js +71 -0
  58. package/dist/auth-ng/auth-ng.js +206 -0
  59. package/dist/auth-ng/auth-ng.mock.js +33 -0
  60. package/dist/autofocus-ng/autofocus-ng.js +51 -0
  61. package/dist/avatar/avatar-example-datauri.js +4 -0
  62. package/dist/avatar/avatar.js +163 -0
  63. package/dist/avatar/fallback-avatar.js +142 -0
  64. package/dist/avatar-editor-ng/avatar-editor-ng.js +167 -0
  65. package/dist/avatar-editor-ng/avatar-editor-ng__template.js +3 -0
  66. package/dist/avatar-ng/avatar-ng.js +21 -0
  67. package/dist/badge/badge.js +51 -0
  68. package/dist/badge-ng/badge-ng.js +18 -0
  69. package/dist/breadcrumb-ng/breadcrumb-ng.js +37 -0
  70. package/dist/button/button.js +125 -0
  71. package/dist/button/button__classes.js +5 -0
  72. package/dist/button-group/button-group.js +30 -0
  73. package/dist/button-group/caption.js +24 -0
  74. package/dist/button-group-ng/button-group-ng.js +39 -0
  75. package/dist/button-ng/button-ng.js +217 -0
  76. package/dist/button-set/button-set.js +26 -0
  77. package/dist/button-set-ng/button-set-ng.js +19 -0
  78. package/dist/button-toolbar/button-toolbar.js +29 -0
  79. package/dist/button-toolbar-ng/button-toolbar-ng.js +24 -0
  80. package/dist/caret/caret.js +266 -0
  81. package/dist/checkbox/checkbox.js +110 -0
  82. package/dist/checkbox-ng/checkbox-ng.js +38 -0
  83. package/dist/code/code.js +137 -0
  84. package/dist/compiler-ng/compiler-ng.js +53 -0
  85. package/dist/confirm/confirm.js +127 -0
  86. package/dist/confirm-ng/confirm-ng.js +69 -0
  87. package/dist/confirm-service/confirm-service.js +117 -0
  88. package/dist/content-layout/content-layout.js +66 -0
  89. package/dist/content-layout/sidebar.js +7 -0
  90. package/dist/contenteditable/contenteditable.js +78 -0
  91. package/dist/data-list/data-list.js +208 -0
  92. package/dist/data-list/data-list.mock.js +191 -0
  93. package/dist/data-list/item.js +229 -0
  94. package/dist/data-list/selection.js +102 -0
  95. package/dist/data-list/title.js +20 -0
  96. package/dist/data-list-ng/data-list-ng.js +62 -0
  97. package/dist/date-picker/consts.js +69 -0
  98. package/dist/date-picker/date-input.js +175 -0
  99. package/dist/date-picker/date-picker.js +367 -0
  100. package/dist/date-picker/date-popup.js +483 -0
  101. package/dist/date-picker/day.js +120 -0
  102. package/dist/date-picker/formats.js +3 -0
  103. package/dist/date-picker/month-names.js +100 -0
  104. package/dist/date-picker/month-slider.js +84 -0
  105. package/dist/date-picker/month.js +55 -0
  106. package/dist/date-picker/months.js +122 -0
  107. package/dist/date-picker/weekdays.js +32 -0
  108. package/dist/date-picker/years.js +110 -0
  109. package/dist/dialog/dialog.js +205 -0
  110. package/dist/dialog/dialog__body-scroll-preventer.js +3 -0
  111. package/dist/dialog-ng/dialog-ng.js +604 -0
  112. package/dist/dialog-ng/dialog-ng__template.js +3 -0
  113. package/dist/docked-panel-ng/docked-panel-ng.js +171 -0
  114. package/dist/dropdown/anchor.js +19 -0
  115. package/dist/dropdown/dropdown.js +236 -0
  116. package/dist/dropdown-menu/dropdown-menu.js +177 -0
  117. package/dist/error-bubble/error-bubble.js +59 -0
  118. package/dist/error-message/error-message.js +57 -0
  119. package/dist/error-message-ng/error-message-ng.js +35 -0
  120. package/dist/footer/footer.js +12 -0
  121. package/dist/footer-ng/footer-ng.js +64 -0
  122. package/dist/form-ng/form-ng.js +167 -0
  123. package/dist/global/angular-component-factory.js +84 -0
  124. package/dist/global/compose.js +9 -0
  125. package/dist/global/composeRefs.js +15 -0
  126. package/dist/global/conic-gradient.js +35 -0
  127. package/dist/global/create-stateful-context.js +55 -0
  128. package/dist/global/data-tests.js +24 -0
  129. package/dist/global/dom.js +125 -0
  130. package/dist/global/focus-sensor-hoc.js +146 -0
  131. package/dist/global/fuzzy-highlight.js +67 -0
  132. package/dist/global/get-event-key.js +111 -0
  133. package/dist/global/get-uid.js +15 -0
  134. package/dist/global/inject-styles.js +15 -0
  135. package/dist/global/linear-function.js +17 -0
  136. package/dist/global/listeners.js +44 -0
  137. package/dist/global/memoize.js +20 -0
  138. package/dist/global/normalize-indent.js +30 -0
  139. package/dist/global/promise-with-timeout.js +17 -0
  140. package/dist/global/radial-gradient-mask.js +38 -0
  141. package/dist/global/react-dom-renderer.js +46 -0
  142. package/dist/global/react-render-adapter.js +41 -0
  143. package/dist/global/rerender-hoc.js +55 -0
  144. package/dist/global/ring-angular-component.js +24 -0
  145. package/dist/global/schedule-raf.js +31 -0
  146. package/dist/global/sniffer.js +6 -0
  147. package/dist/global/supports-css.js +22 -0
  148. package/dist/global/theme.js +54 -0
  149. package/dist/global/trivial-template-tag.js +17 -0
  150. package/dist/global/url.js +165 -0
  151. package/dist/global/variables_dark.js +57 -0
  152. package/dist/grid/col.js +60 -0
  153. package/dist/grid/grid.js +33 -0
  154. package/dist/grid/row.js +64 -0
  155. package/dist/group/group.js +31 -0
  156. package/dist/group-ng/group-ng.js +11 -0
  157. package/dist/header/header.js +150 -0
  158. package/dist/header/logo.js +40 -0
  159. package/dist/header/profile.js +219 -0
  160. package/dist/header/services-link.js +12 -0
  161. package/dist/header/services.js +138 -0
  162. package/dist/header/smart-profile.js +233 -0
  163. package/dist/header/smart-services.js +163 -0
  164. package/dist/header/tray-icon.js +47 -0
  165. package/dist/header/tray.js +31 -0
  166. package/dist/heading/heading.js +73 -0
  167. package/dist/http/http.js +238 -0
  168. package/dist/http/http.mock.js +67 -0
  169. package/dist/hub-source/hub-source.js +130 -0
  170. package/dist/hub-source/hub-source__user.js +30 -0
  171. package/dist/hub-source/hub-source__users-groups.js +63 -0
  172. package/dist/icon/icon.js +105 -0
  173. package/dist/icon/icon__constants.js +33 -0
  174. package/dist/icon/icon__svg.js +83 -0
  175. package/dist/icon/index.js +12 -0
  176. package/dist/icon-ng/icon-ng.js +91 -0
  177. package/dist/input/input.js +230 -0
  178. package/dist/input-ng/input-ng.js +111 -0
  179. package/dist/island/adaptive-island-hoc.js +48 -0
  180. package/dist/island/content.js +160 -0
  181. package/dist/island/header.js +84 -0
  182. package/dist/island/island.js +51 -0
  183. package/dist/island-legacy/content-legacy.js +26 -0
  184. package/dist/island-legacy/header-legacy.js +28 -0
  185. package/dist/island-legacy/island-legacy.js +28 -0
  186. package/dist/island-ng/island-content-ng.js +42 -0
  187. package/dist/island-ng/island-header-ng.js +26 -0
  188. package/dist/island-ng/island-ng-class-fixer.js +11 -0
  189. package/dist/island-ng/island-ng.js +25 -0
  190. package/dist/link/clickableLink.js +64 -0
  191. package/dist/link/link.js +115 -0
  192. package/dist/link-ng/link-ng.js +22 -0
  193. package/dist/list/consts.js +26 -0
  194. package/dist/list/list.js +822 -0
  195. package/dist/list/list__custom.js +86 -0
  196. package/dist/list/list__hint.js +26 -0
  197. package/dist/list/list__item.js +206 -0
  198. package/dist/list/list__link.js +65 -0
  199. package/dist/list/list__separator.js +30 -0
  200. package/dist/list/list__title.js +39 -0
  201. package/dist/list/list__users-groups-source.js +130 -0
  202. package/dist/loader/loader.js +71 -0
  203. package/dist/loader/loader__core.js +273 -0
  204. package/dist/loader-inline/inject-styles.js +13 -0
  205. package/dist/loader-inline/loader-inline.js +58 -0
  206. package/dist/loader-inline-ng/loader-inline-ng.js +44 -0
  207. package/dist/loader-ng/loader-ng.js +44 -0
  208. package/dist/loader-screen/loader-screen.js +44 -0
  209. package/dist/loader-screen-ng/loader-screen-ng.js +95 -0
  210. package/dist/login-dialog/login-dialog.js +188 -0
  211. package/dist/login-dialog/service.js +72 -0
  212. package/dist/markdown/code.js +31 -0
  213. package/dist/markdown/heading.js +23 -0
  214. package/dist/markdown/link.js +31 -0
  215. package/dist/markdown/markdown.js +74 -0
  216. package/dist/message/message.js +235 -0
  217. package/dist/message-bundle-ng/message-bundle-ng.js +111 -0
  218. package/dist/old-browsers-message/old-browsers-message.js +101 -0
  219. package/dist/old-browsers-message/old-browsers-message__stop.js +5 -0
  220. package/dist/old-browsers-message/white-list.js +34 -0
  221. package/dist/pager/pager.js +365 -0
  222. package/dist/pager-ng/pager-ng.js +100 -0
  223. package/dist/panel/panel.js +31 -0
  224. package/dist/panel-ng/panel-ng.js +17 -0
  225. package/dist/permissions/permissions.js +200 -0
  226. package/dist/permissions/permissions__cache.js +272 -0
  227. package/dist/permissions-ng/permissions-ng.js +277 -0
  228. package/dist/place-under-ng/place-under-ng.js +158 -0
  229. package/dist/popup/popup.consts.js +41 -0
  230. package/dist/popup/popup.js +396 -0
  231. package/dist/popup/popup.target.js +26 -0
  232. package/dist/popup/position.js +280 -0
  233. package/dist/popup-menu/popup-menu.js +117 -0
  234. package/dist/progress-bar/progress-bar.js +114 -0
  235. package/dist/progress-bar-ng/progress-bar-ng.js +17 -0
  236. package/dist/promised-click-ng/promised-click-ng.js +128 -0
  237. package/dist/proxy-attrs/proxy-attrs.js +21 -0
  238. package/dist/query-assist/query-assist.js +1096 -0
  239. package/dist/query-assist/query-assist__suggestions.js +49 -0
  240. package/dist/query-assist-ng/query-assist-ng.js +86 -0
  241. package/dist/radio/radio.js +42 -0
  242. package/dist/radio/radio__item.js +78 -0
  243. package/dist/radio-ng/radio-ng.js +47 -0
  244. package/dist/save-field-ng/save-field-ng.js +337 -0
  245. package/dist/save-field-ng/save-field-ng__template.js +3 -0
  246. package/dist/select/select.js +1357 -0
  247. package/dist/select/select__filter.js +56 -0
  248. package/dist/select/select__popup.js +553 -0
  249. package/dist/select-ng/select-ng.js +637 -0
  250. package/dist/select-ng/select-ng__lazy.js +169 -0
  251. package/dist/select-ng/select-ng__options.js +145 -0
  252. package/dist/shortcuts/core.js +245 -0
  253. package/dist/shortcuts/shortcut-title.js +51 -0
  254. package/dist/shortcuts/shortcuts-hoc.js +42 -0
  255. package/dist/shortcuts/shortcuts.js +72 -0
  256. package/dist/shortcuts-hint-ng/shortcuts-hint-ng.js +123 -0
  257. package/dist/shortcuts-hint-ng/shortcuts-hint-ng__template.js +3 -0
  258. package/dist/shortcuts-ng/shortcuts-ng.js +262 -0
  259. package/dist/sidebar-ng/sidebar-ng.js +113 -0
  260. package/dist/sidebar-ng/sidebar-ng__button-template.js +3 -0
  261. package/dist/sidebar-ng/sidebar-ng__template.js +3 -0
  262. package/dist/storage/storage.js +59 -0
  263. package/dist/storage/storage__fallback.js +215 -0
  264. package/dist/storage/storage__local.js +154 -0
  265. package/dist/style.css +1 -0
  266. package/dist/tab-trap/tab-trap.js +177 -0
  267. package/dist/table/cell.js +26 -0
  268. package/dist/table/disable-hover-hoc.js +54 -0
  269. package/dist/table/header-cell.js +92 -0
  270. package/dist/table/header.js +193 -0
  271. package/dist/table/multitable.js +141 -0
  272. package/dist/table/row-with-focus-sensor.js +83 -0
  273. package/dist/table/row.js +278 -0
  274. package/dist/table/selection-adapter.js +16 -0
  275. package/dist/table/selection-shortcuts-hoc.js +215 -0
  276. package/dist/table/selection.js +223 -0
  277. package/dist/table/smart-table.js +125 -0
  278. package/dist/table/table.js +409 -0
  279. package/dist/table-legacy-ng/table-legacy-ng.js +468 -0
  280. package/dist/table-legacy-ng/table-legacy-ng__pager.js +120 -0
  281. package/dist/table-legacy-ng/table-legacy-ng__selection-navigate-actions.js +123 -0
  282. package/dist/table-legacy-ng/table-legacy-ng__selection.js +179 -0
  283. package/dist/table-legacy-ng/table-legacy-ng__toolbar.js +57 -0
  284. package/dist/table-ng/smart-table-ng.js +68 -0
  285. package/dist/table-ng/table-ng.js +67 -0
  286. package/dist/tabs/collapsible-more.js +198 -0
  287. package/dist/tabs/collapsible-tab.js +91 -0
  288. package/dist/tabs/collapsible-tabs.js +362 -0
  289. package/dist/tabs/custom-item.js +13 -0
  290. package/dist/tabs/dumb-tabs.js +164 -0
  291. package/dist/tabs/smart-tabs.js +106 -0
  292. package/dist/tabs/tab-link.js +42 -0
  293. package/dist/tabs/tab.js +33 -0
  294. package/dist/tabs/tabs.js +71 -0
  295. package/dist/tabs-ng/tabs-ng.js +194 -0
  296. package/dist/tabs-ng/tabs-ng__template.js +3 -0
  297. package/dist/tag/tag.js +197 -0
  298. package/dist/tags-input/tags-input.js +482 -0
  299. package/dist/tags-input-ng/tags-input-ng.js +93 -0
  300. package/dist/tags-list/tags-list.js +95 -0
  301. package/dist/template-ng/template-ng.js +71 -0
  302. package/dist/text/text.js +36 -0
  303. package/dist/theme-ng/theme-ng.js +45 -0
  304. package/dist/title-ng/title-ng.js +114 -0
  305. package/dist/toggle/toggle.js +78 -0
  306. package/dist/toggle-ng/toggle-ng.js +18 -0
  307. package/dist/tooltip/tooltip.js +209 -0
  308. package/dist/tooltip-ng/tooltip-ng.js +104 -0
  309. package/dist/user-agreement/service.js +412 -0
  310. package/dist/user-agreement/toolbox.eula.js +3 -0
  311. package/dist/user-agreement/user-agreement.js +169 -0
  312. package/dist/user-card/card.js +19 -0
  313. package/dist/user-card/smart-user-card-tooltip.js +114 -0
  314. package/dist/user-card/tooltip.js +95 -0
  315. package/dist/user-card/user-card.js +51 -0
  316. package/dist/user-card-ng/user-card-ng.js +62 -0
  317. package/package.json +2 -2
@@ -0,0 +1,238 @@
1
+ import { _ as _defineProperty } from '../_helpers/_rollupPluginBabelHelpers.js';
2
+ import 'core-js/modules/web.dom-collections.iterator.js';
3
+ import ExtendableError from 'es6-error';
4
+ import { encodeURL, joinBaseURLAndPath } from '../global/url.js';
5
+ import 'core-js/modules/es.string.replace.js';
6
+
7
+ /**
8
+ * @name HTTP
9
+ */
10
+
11
+ const TOKEN_TYPE = 'Bearer';
12
+ const STATUS_OK_IF_MORE_THAN = 200;
13
+ const STATUS_BAD_IF_MORE_THAN = 300;
14
+ const defaultFetchConfig = {
15
+ headers: {
16
+ 'Content-Type': 'application/json',
17
+ Accept: 'application/json'
18
+ },
19
+ credentials: 'same-origin'
20
+ };
21
+ class HTTPError extends ExtendableError {
22
+ constructor(response) {
23
+ let data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
24
+ super("".concat(response.status, " ").concat(response.statusText || ''));
25
+ this.data = data;
26
+ this.status = response.status;
27
+ }
28
+
29
+ }
30
+ const CODE = {
31
+ UNAUTHORIZED: 401
32
+ };
33
+
34
+ function withMethodWarning(fn) {
35
+ return (url, params) => {
36
+ if (params && 'method' in params) {
37
+ // eslint-disable-next-line no-console
38
+ console.warn("Ring UI HTTP misuse: {method: '".concat(params.method, "'} is passed to http.post() or http.get() (url=\"").concat(url, "\").\nThis is a bug exploitation and will not work in next release."));
39
+ }
40
+
41
+ return fn(url, params);
42
+ };
43
+ }
44
+
45
+ class HTTP {
46
+ constructor(_auth, _baseUrl) {
47
+ var _this = this;
48
+
49
+ let _fetchConfig = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
50
+
51
+ _defineProperty(this, "baseUrl", null);
52
+
53
+ _defineProperty(this, "_requestsMeta", new WeakMap());
54
+
55
+ _defineProperty(this, "setAuth", auth => {
56
+ this.requestToken = () => auth.requestToken();
57
+
58
+ this.shouldRefreshToken = auth.constructor.shouldRefreshToken;
59
+
60
+ this.forceTokenUpdate = () => auth.forceTokenUpdate();
61
+ });
62
+
63
+ _defineProperty(this, "setBaseUrl", baseUrl => {
64
+ this.baseUrl = baseUrl;
65
+ });
66
+
67
+ _defineProperty(this, "fetch", async function (url) {
68
+ let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
69
+ const {
70
+ body,
71
+ query = {},
72
+ ...fetchConfig
73
+ } = params;
74
+ const response = await _this._fetch(_this._makeRequestUrl(url, query), { ...fetchConfig,
75
+ body: body ? JSON.stringify(body) : body
76
+ });
77
+ return _this._processResponse(response);
78
+ });
79
+
80
+ _defineProperty(this, "request", async (url, params) => {
81
+ let token = await this.requestToken();
82
+ let response = await this._performRequest(url, token, params);
83
+
84
+ try {
85
+ // Wait for result to catch an HTTP error
86
+ return await this._processResponse(response);
87
+ } catch (error) {
88
+ if (!(error instanceof HTTPError)) {
89
+ throw error;
90
+ }
91
+
92
+ const shouldRefreshToken = error.data.error !== undefined ? this.shouldRefreshToken(error.data.error) : false;
93
+
94
+ if (shouldRefreshToken) {
95
+ token = await this.forceTokenUpdate();
96
+ response = await this._performRequest(url, token, params);
97
+ return this._processResponse(response);
98
+ }
99
+
100
+ throw error;
101
+ }
102
+ });
103
+
104
+ _defineProperty(this, "getMetaForResponse", response => this._requestsMeta.get(response));
105
+
106
+ _defineProperty(this, "get", withMethodWarning((url, params) => this.request(url, {
107
+ method: 'GET',
108
+ ...params
109
+ })));
110
+
111
+ _defineProperty(this, "post", withMethodWarning((url, params) => this.request(url, {
112
+ method: 'POST',
113
+ ...params
114
+ })));
115
+
116
+ _defineProperty(this, "delete", (url, params) => this.request(url, { ...params,
117
+ method: 'DELETE'
118
+ }));
119
+
120
+ _defineProperty(this, "put", (url, params) => this.request(url, { ...params,
121
+ method: 'PUT'
122
+ }));
123
+
124
+ if (_auth) {
125
+ this.setAuth(_auth);
126
+ }
127
+
128
+ this.setBaseUrl(_baseUrl);
129
+ const {
130
+ headers,
131
+ ...defaultConfig
132
+ } = defaultFetchConfig;
133
+ this.fetchConfig = { ...defaultConfig,
134
+ ..._fetchConfig,
135
+ headers: { ...headers,
136
+ ..._fetchConfig.headers
137
+ }
138
+ };
139
+ }
140
+
141
+ _fetch() {
142
+ return fetch(...arguments);
143
+ }
144
+
145
+ _makeRequestUrl(url, queryObject) {
146
+ const urlWithQuery = encodeURL(url, queryObject);
147
+ return joinBaseURLAndPath(this.baseUrl, urlWithQuery);
148
+ }
149
+
150
+ _performRequest(url, token) {
151
+ let params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
152
+ const {
153
+ headers,
154
+ body,
155
+ query = {},
156
+ sendRawBody,
157
+ ...fetchConfig
158
+ } = params;
159
+ const combinedHeaders = { ...this.fetchConfig.headers,
160
+ ...(token ? {
161
+ Authorization: "".concat(TOKEN_TYPE, " ").concat(token)
162
+ } : {}),
163
+ ...headers
164
+ };
165
+ Object.keys(combinedHeaders).forEach(key => {
166
+ if (combinedHeaders[key] === null || combinedHeaders[key] === undefined) {
167
+ Reflect.deleteProperty(combinedHeaders, key);
168
+ }
169
+ });
170
+ return this._fetch(this._makeRequestUrl(url, query), { ...this.fetchConfig,
171
+ headers: combinedHeaders,
172
+ ...fetchConfig,
173
+ body: body && !sendRawBody ? JSON.stringify(body) : body
174
+ });
175
+ }
176
+
177
+ _storeRequestMeta(parsedResponse, rawResponse) {
178
+ const {
179
+ headers,
180
+ ok,
181
+ redirected,
182
+ status,
183
+ statusText,
184
+ type,
185
+ url
186
+ } = rawResponse;
187
+
188
+ this._requestsMeta.set(parsedResponse, {
189
+ headers,
190
+ ok,
191
+ redirected,
192
+ status,
193
+ statusText,
194
+ type,
195
+ url
196
+ });
197
+ }
198
+
199
+ async _processResponse(response) {
200
+ const contentType = response.headers.get('content-type');
201
+ const isJson = contentType && contentType.indexOf('application/json') !== -1;
202
+
203
+ if (HTTP._isErrorStatus(response.status)) {
204
+ let resJson;
205
+
206
+ try {
207
+ resJson = await (isJson ? response.json() : response.text());
208
+ } catch (err) {// noop
209
+ }
210
+
211
+ throw new HTTPError(response, resJson);
212
+ }
213
+
214
+ try {
215
+ const parsedResponse = await (isJson ? response.json() : {
216
+ data: await response.text()
217
+ });
218
+
219
+ this._storeRequestMeta(parsedResponse, response);
220
+
221
+ return parsedResponse;
222
+ } catch (err) {
223
+ return response;
224
+ }
225
+ }
226
+
227
+ static _isErrorStatus(status) {
228
+ return status < STATUS_OK_IF_MORE_THAN || status >= STATUS_BAD_IF_MORE_THAN;
229
+ }
230
+
231
+ async authorizedFetch() {
232
+ const response = await this._performRequest(...arguments);
233
+ return this._processResponse(response);
234
+ }
235
+
236
+ }
237
+
238
+ export { CODE, HTTPError, HTTP as default, defaultFetchConfig };
@@ -0,0 +1,67 @@
1
+ import 'core-js/modules/web.dom-collections.iterator.js';
2
+ import HTTP from './http.js';
3
+ import '../_helpers/_rollupPluginBabelHelpers.js';
4
+ import 'es6-error';
5
+ import '../global/url.js';
6
+ import 'core-js/modules/es.string.replace.js';
7
+
8
+ const authMock = {
9
+ requestToken: () => 'mock token',
10
+ shouldRefreshToken: () => false,
11
+ forceTokenUpdate: async () => {}
12
+ };
13
+ class HTTPMock extends HTTP {
14
+ constructor() {
15
+ super(authMock);
16
+ this.defaultResponse = null;
17
+ this.requests = [];
18
+ this.responsesByUrlMap = new Map();
19
+ }
20
+
21
+ _fetch(url, params) {
22
+ this.requests = [...this.requests, {
23
+ url,
24
+ params: { ...params,
25
+ body: params.body ? JSON.parse(params.body) : params.body
26
+ }
27
+ }];
28
+ return {
29
+ status: 200,
30
+ headers: new Headers({
31
+ 'content-type': 'application/json'
32
+ }),
33
+ json: () => this._getResponseForUrl(url) || this.defaultResponse
34
+ };
35
+ }
36
+
37
+ respondDefault(response) {
38
+ this.defaultResponse = response;
39
+ }
40
+
41
+ respondForUrl(url, response) {
42
+ this.responsesByUrlMap.set(url, response);
43
+ }
44
+
45
+ _getResponseForUrl(urlToMatch) {
46
+ const urls = this.responsesByUrlMap.keys();
47
+
48
+ for (const url of urls) {
49
+ if (url === urlToMatch) {
50
+ return this.responsesByUrlMap.get(url);
51
+ }
52
+
53
+ if (url.test && url.test(urlToMatch)) {
54
+ return this.responsesByUrlMap.get(url);
55
+ }
56
+ }
57
+
58
+ return null;
59
+ }
60
+
61
+ getRequestsByUrlPart(url) {
62
+ return this.requests.filter(it => it.url.indexOf(url) !== -1);
63
+ }
64
+
65
+ }
66
+
67
+ export { HTTPMock as default };
@@ -0,0 +1,130 @@
1
+ import { _ as _defineProperty } from '../_helpers/_rollupPluginBabelHelpers.js';
2
+
3
+ const defaultOptions = {
4
+ searchMax: 20,
5
+ searchSideThreshold: 100,
6
+ queryFormatter: query => "".concat(query, " or ").concat(query, "*")
7
+ };
8
+ /**
9
+ * HubSource is designed to speed up search requests for small installations.
10
+ * If there are less than "searchSideThreshold" items, it uses client-side filtering
11
+ * of cached results to greatly increase search speed. Useful for completion and
12
+ * select data source.
13
+ */
14
+
15
+ class HubSource {
16
+ constructor(auth, relativeUrl, options) {
17
+ this.http = auth.http;
18
+ this.relativeUrl = relativeUrl;
19
+ this.options = Object.assign({}, defaultOptions, options);
20
+ this.storedData = null;
21
+ this.isClientSideSearch = null;
22
+ this.filterFn = null;
23
+ }
24
+
25
+ makeRequest(queryParams) {
26
+ return this.http.get(this.relativeUrl, {
27
+ query: queryParams
28
+ });
29
+ }
30
+
31
+ async makeCachedRequest(params) {
32
+ if (this.storedData) {
33
+ return this.storedData;
34
+ }
35
+
36
+ const res = await this.makeRequest(params);
37
+ this.storedData = res;
38
+ return res;
39
+ }
40
+
41
+ static mergeParams(params, toMerge) {
42
+ return Object.assign({}, params, toMerge);
43
+ }
44
+
45
+ checkIsClientSideSearch(res) {
46
+ return res.total <= this.options.searchSideThreshold;
47
+ }
48
+
49
+ getDefaultFilterFn(query) {
50
+ if (!query) {
51
+ return () => true;
52
+ }
53
+
54
+ return it => it.name.toLowerCase().indexOf(query.toLowerCase()) !== -1;
55
+ }
56
+
57
+ formatQuery(query) {
58
+ return query ? this.options.queryFormatter(query) : '';
59
+ }
60
+
61
+ static validateInputParams(params) {
62
+ if (params.top) {
63
+ throw new Error('HubSource: params.top should not be filled, configure "options.searchMax" instead');
64
+ }
65
+
66
+ if (params.query) {
67
+ throw new Error('HubSource: params.query should not be filled, configure "options.queryFormatter" instead');
68
+ }
69
+ }
70
+
71
+ processResults(res) {
72
+ const items = res[this.relativeUrl] || [];
73
+
74
+ if (this.isClientSideSearch) {
75
+ return items.filter(it => this.filterFn(it)).slice(0, this.options.searchMax);
76
+ }
77
+
78
+ return items;
79
+ }
80
+
81
+ async sideDetectionRequest(params, query) {
82
+ const res = await this.makeCachedRequest(HubSource.mergeParams(params, {
83
+ $top: this.options.searchSideThreshold
84
+ }));
85
+ this.isClientSideSearch = this.checkIsClientSideSearch(res);
86
+
87
+ if (!this.isClientSideSearch) {
88
+ return this.doServerSideSearch(params, query);
89
+ }
90
+
91
+ return res;
92
+ }
93
+
94
+ doClientSideSearch(params) {
95
+ return this.makeCachedRequest(HubSource.mergeParams(params, {
96
+ $top: this.constructor.TOP_ALL
97
+ }));
98
+ }
99
+
100
+ doServerSideSearch(params, query) {
101
+ return this.makeRequest(HubSource.mergeParams(params, {
102
+ query: this.formatQuery(query),
103
+ $top: this.options.searchMax
104
+ }));
105
+ }
106
+
107
+ getValueFromSuitableSource(query, params) {
108
+ if (this.isClientSideSearch === null) {
109
+ return this.sideDetectionRequest(params, query);
110
+ }
111
+
112
+ if (this.isClientSideSearch) {
113
+ return this.doClientSideSearch(params);
114
+ }
115
+
116
+ return this.doServerSideSearch(params, query);
117
+ }
118
+
119
+ async get(query, params, filterFn) {
120
+ HubSource.validateInputParams(params);
121
+ this.filterFn = filterFn || this.getDefaultFilterFn(query);
122
+ const res = await this.getValueFromSuitableSource(query, params);
123
+ return this.processResults(res);
124
+ }
125
+
126
+ }
127
+
128
+ _defineProperty(HubSource, "TOP_ALL", -1);
129
+
130
+ export { HubSource as default };
@@ -0,0 +1,30 @@
1
+ import HTTP from '../http/http.js';
2
+ import '../_helpers/_rollupPluginBabelHelpers.js';
3
+ import 'core-js/modules/web.dom-collections.iterator.js';
4
+ import 'es6-error';
5
+ import '../global/url.js';
6
+ import 'core-js/modules/es.string.replace.js';
7
+
8
+ const DEFAULT_FIELDS = 'id,name,login,banned,banReason,profile(email/email,avatar/url)';
9
+ function convertUserForCard(hubUser) {
10
+ let serverUri = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
11
+ return {
12
+ name: hubUser.name,
13
+ login: hubUser.login,
14
+ banned: hubUser.banned,
15
+ banReason: hubUser.banReason,
16
+ email: hubUser.profile.email && hubUser.profile.email.email,
17
+ avatarUrl: hubUser.profile.avatar.url,
18
+ href: "".concat(serverUri, "users/").concat(hubUser.id)
19
+ };
20
+ }
21
+ function createHubUserCardSource(auth, userId) {
22
+ let fields = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : DEFAULT_FIELDS;
23
+ const http = new HTTP(auth);
24
+ return async function getHubUser() {
25
+ const hubUser = await http.get("".concat(auth.config.serverUri, "api/rest/users/").concat(userId, "?fields=").concat(fields));
26
+ return convertUserForCard(hubUser, auth.config.serverUri);
27
+ };
28
+ }
29
+
30
+ export { convertUserForCard, createHubUserCardSource };
@@ -0,0 +1,63 @@
1
+ import 'core-js/modules/web.dom-collections.iterator.js';
2
+ import HubSource from './hub-source.js';
3
+ import '../_helpers/_rollupPluginBabelHelpers.js';
4
+
5
+ const defaultOptions = {
6
+ searchMax: 20,
7
+ searchSideThreshold: 200
8
+ };
9
+ class HubSourceUsersGroups {
10
+ constructor(auth, options) {
11
+ this.auth = auth;
12
+ this.options = Object.assign({}, defaultOptions, options);
13
+ this.usersSource = new HubSource(auth, 'users', {
14
+ searchMax: this.options.searchMax,
15
+ searchSideThreshold: this.options.searchSideThreshold,
16
+ queryFormatter: query => "nameStartsWith: ".concat(HubSourceUsersGroups.wrapMultiwordQuery(query), " or loginStartsWith: ").concat(HubSourceUsersGroups.wrapMultiwordQuery(query))
17
+ });
18
+ this.groupsSource = new HubSource(auth, 'usergroups', {
19
+ searchMax: this.options.searchMax,
20
+ searchSideThreshold: this.options.searchSideThreshold
21
+ });
22
+ }
23
+
24
+ static wrapMultiwordQuery(query) {
25
+ if (query && query.indexOf(' ') !== -1) {
26
+ return "{".concat(query, "}");
27
+ }
28
+
29
+ return query;
30
+ }
31
+
32
+ createUsersFilterFn(query) {
33
+ if (!query) {
34
+ return () => true;
35
+ }
36
+
37
+ const normalizedQuery = query.toLowerCase();
38
+ return it => it.name.toLowerCase().indexOf(normalizedQuery) !== -1 || it.login.toLowerCase().indexOf(normalizedQuery) !== -1;
39
+ }
40
+
41
+ getUsers() {
42
+ let query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
43
+ return this.usersSource.get(query, {
44
+ fields: 'id,name,login,total,profile/avatar/url',
45
+ orderBy: 'name'
46
+ }, this.createUsersFilterFn(query));
47
+ }
48
+
49
+ getGroups() {
50
+ let query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
51
+ return this.groupsSource.get(query, {
52
+ fields: 'id,name,total,userCount,iconUrl',
53
+ orderBy: 'name'
54
+ });
55
+ }
56
+
57
+ getUserAndGroups(query) {
58
+ return Promise.all([this.getUsers(query), this.getGroups(query)]);
59
+ }
60
+
61
+ }
62
+
63
+ export { HubSourceUsersGroups as default };
@@ -0,0 +1,105 @@
1
+ import { _ as _defineProperty, a as _extends } from '../_helpers/_rollupPluginBabelHelpers.js';
2
+ import React, { PureComponent } from 'react';
3
+ import PropTypes from 'prop-types';
4
+ import classNames from 'classnames';
5
+ import deprecate from 'util-deprecate';
6
+ import { Color, Size } from './icon__constants.js';
7
+ export { Size } from './icon__constants.js';
8
+ import { m as modules_29747b80 } from '../_helpers/icon.js';
9
+ import IconSVG from './icon__svg.js';
10
+ import 'core-js/modules/es.string.replace.js';
11
+ import '../global/memoize.js';
12
+ import 'core-js/modules/web.dom-collections.iterator.js';
13
+
14
+ const warnSize = deprecate(() => {}, "`size`, `width` and `height` props are not recommended to use in Ring UI `Icon` component. The intrinsic sizes of SVG icon (`width` and `height` SVG attributes) are used instead.\n\nWe strongly recommend to use icons handcrafted for particular sizes. If your icon doesn't exist in the desired size, please ask your designer to draw one. \"Responsive\" checkmark should be unchecked when exporting icon.'");
15
+ class Icon extends PureComponent {
16
+ warnSize() {
17
+ if (this.props.suppressSizeWarning) {
18
+ return;
19
+ }
20
+
21
+ warnSize();
22
+ }
23
+
24
+ getStyle() {
25
+ const {
26
+ size,
27
+ width,
28
+ height
29
+ } = this.props;
30
+
31
+ if (width || height) {
32
+ this.warnSize();
33
+ return {
34
+ width,
35
+ height
36
+ };
37
+ }
38
+
39
+ if (size) {
40
+ this.warnSize();
41
+ return {
42
+ width: size,
43
+ height: size
44
+ };
45
+ }
46
+
47
+ return null;
48
+ }
49
+
50
+ render() {
51
+ const {
52
+ className,
53
+ size,
54
+ color,
55
+ loading,
56
+ glyph: Glyph,
57
+ width,
58
+ height,
59
+ suppressSizeWarning,
60
+ ...restProps
61
+ } = this.props;
62
+
63
+ if (!Glyph) {
64
+ return null;
65
+ }
66
+
67
+ const classes = classNames(modules_29747b80.icon, {
68
+ [modules_29747b80[color]]: !!color,
69
+ [modules_29747b80.loading]: loading
70
+ }, className);
71
+ return /*#__PURE__*/React.createElement("span", _extends({}, restProps, {
72
+ className: classes
73
+ }), typeof Glyph === 'string' ? /*#__PURE__*/React.createElement(IconSVG, {
74
+ src: Glyph,
75
+ style: this.getStyle()
76
+ }) : /*#__PURE__*/React.createElement(Glyph, {
77
+ className: modules_29747b80.glyph,
78
+ style: this.getStyle()
79
+ }));
80
+ }
81
+
82
+ }
83
+
84
+ _defineProperty(Icon, "propTypes", {
85
+ className: PropTypes.string,
86
+ color: PropTypes.string,
87
+ glyph: PropTypes.oneOfType([PropTypes.string, PropTypes.elementType]).isRequired,
88
+ height: PropTypes.number,
89
+ size: PropTypes.number,
90
+ width: PropTypes.number,
91
+ loading: PropTypes.bool,
92
+ suppressSizeWarning: PropTypes.bool
93
+ });
94
+
95
+ _defineProperty(Icon, "defaultProps", {
96
+ className: '',
97
+ color: Color.DEFAULT,
98
+ glyph: ''
99
+ });
100
+
101
+ _defineProperty(Icon, "Color", Color);
102
+
103
+ _defineProperty(Icon, "Size", Size);
104
+
105
+ export { Icon as default };
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Commonly used icon colors.
3
+ * @enum {string}
4
+ */
5
+ const Color = {
6
+ BLUE: 'blue',
7
+ DEFAULT: '',
8
+ GRAY: 'gray',
9
+ GREEN: 'green',
10
+ MAGENTA: 'magenta',
11
+ RED: 'red',
12
+ WHITE: 'white'
13
+ };
14
+ /**
15
+ * @enum {number}
16
+ */
17
+
18
+ const Size = {
19
+ Size12: 12,
20
+ Size14: 14,
21
+ Size16: 16,
22
+ Size18: 18,
23
+ Size20: 20,
24
+ Size24: 24,
25
+ Size32: 32,
26
+ Size40: 40,
27
+ Size48: 48,
28
+ Size64: 64,
29
+ Size96: 96,
30
+ Size128: 128
31
+ };
32
+
33
+ export { Color, Size };