@jetbrains/ring-ui-built 6.0.31 → 6.0.32

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 (225) hide show
  1. package/components/_helpers/_rollupPluginBabelHelpers.js +1 -567
  2. package/components/_helpers/anchor.js +7 -6
  3. package/components/_helpers/button__classes.js +16 -14
  4. package/components/_helpers/caption.js +14 -20
  5. package/components/_helpers/card.js +95 -105
  6. package/components/_helpers/dialog__body-scroll-preventer.js +11 -19
  7. package/components/_helpers/icon__svg.js +22 -25
  8. package/components/_helpers/input.js +146 -177
  9. package/components/_helpers/query-assist__suggestions.js +74 -90
  10. package/components/_helpers/select__filter.js +48 -69
  11. package/components/_helpers/services-link.js +29 -37
  12. package/components/_helpers/sidebar.js +99 -107
  13. package/components/_helpers/tab-link.js +7 -7
  14. package/components/_helpers/theme.js +31 -40
  15. package/components/_helpers/title.js +57 -72
  16. package/components/alert/alert.js +150 -202
  17. package/components/alert/container.js +32 -41
  18. package/components/alert-service/alert-service.js +105 -170
  19. package/components/analytics/analytics.js +12 -22
  20. package/components/analytics/analytics__custom-plugin.js +54 -75
  21. package/components/auth/auth.js +4 -36
  22. package/components/auth/auth__core.js +746 -1471
  23. package/components/auth/background-flow.js +87 -127
  24. package/components/auth/down-notification.js +30 -73
  25. package/components/auth/iframe-flow.js +75 -133
  26. package/components/auth/request-builder.js +46 -82
  27. package/components/auth/response-parser.js +86 -116
  28. package/components/auth/storage.js +171 -334
  29. package/components/auth/token-validator.js +137 -242
  30. package/components/auth/window-flow.js +92 -134
  31. package/components/auth-dialog/auth-dialog.js +114 -172
  32. package/components/auth-dialog-service/auth-dialog-service.js +8 -31
  33. package/components/avatar/avatar-example-datauri.js +23 -1
  34. package/components/avatar/avatar.js +119 -152
  35. package/components/avatar/fallback-avatar.js +22 -38
  36. package/components/badge/badge.js +35 -45
  37. package/components/button/button.js +86 -107
  38. package/components/button-group/button-group.js +19 -33
  39. package/components/button-set/button-set.js +20 -32
  40. package/components/button-toolbar/button-toolbar.js +19 -31
  41. package/components/caret/caret.js +186 -220
  42. package/components/checkbox/checkbox.js +76 -101
  43. package/components/clipboard/clipboard-fallback.js +10 -10
  44. package/components/clipboard/clipboard.js +35 -132
  45. package/components/code/code.js +92 -166
  46. package/components/collapse/collapse-content.js +42 -64
  47. package/components/collapse/collapse-context.js +2 -2
  48. package/components/collapse/collapse-control.js +12 -14
  49. package/components/collapse/collapse.js +11 -17
  50. package/components/collapse/consts.js +4 -4
  51. package/components/collapse/utils.js +1 -3
  52. package/components/confirm/confirm.js +66 -104
  53. package/components/confirm-service/confirm-service.js +37 -59
  54. package/components/content-layout/content-layout.js +43 -64
  55. package/components/content-layout/sidebar.js +0 -1
  56. package/components/contenteditable/contenteditable.js +50 -59
  57. package/components/control-label/control-label.js +9 -9
  58. package/components/data-list/data-list.js +129 -182
  59. package/components/data-list/data-list.mock.js +2 -6
  60. package/components/data-list/item.js +143 -170
  61. package/components/data-list/selection.js +76 -136
  62. package/components/data-list/title.js +1 -12
  63. package/components/date-picker/consts.js +19 -26
  64. package/components/date-picker/date-input.js +113 -144
  65. package/components/date-picker/date-picker.js +227 -282
  66. package/components/date-picker/date-popup.js +350 -395
  67. package/components/date-picker/day.js +87 -116
  68. package/components/date-picker/month-names.js +43 -66
  69. package/components/date-picker/month-slider.js +51 -76
  70. package/components/date-picker/month.js +16 -25
  71. package/components/date-picker/months.js +43 -50
  72. package/components/date-picker/weekdays.js +12 -22
  73. package/components/date-picker/years.js +83 -110
  74. package/components/dialog/dialog.js +142 -190
  75. package/components/dialog/dialog__body-scroll-preventer.js +0 -4
  76. package/components/dropdown/anchor.js +0 -9
  77. package/components/dropdown/dropdown.js +182 -213
  78. package/components/dropdown-menu/dropdown-menu.js +71 -97
  79. package/components/editable-heading/editable-heading.js +75 -127
  80. package/components/error-bubble/error-bubble.js +31 -60
  81. package/components/error-message/error-message.js +39 -59
  82. package/components/footer/footer.js +27 -30
  83. package/components/global/compose.js +1 -10
  84. package/components/global/composeRefs.js +7 -12
  85. package/components/global/controls-height.js +2 -2
  86. package/components/global/create-stateful-context.js +15 -15
  87. package/components/global/data-tests.js +6 -14
  88. package/components/global/dom.js +47 -86
  89. package/components/global/focus-sensor-hoc.js +122 -132
  90. package/components/global/fuzzy-highlight.js +22 -36
  91. package/components/global/get-event-key.js +8 -8
  92. package/components/global/get-uid.js +4 -8
  93. package/components/global/inject-styles.js +10 -15
  94. package/components/global/listeners.js +27 -51
  95. package/components/global/memoize.js +6 -12
  96. package/components/global/normalize-indent.js +19 -50
  97. package/components/global/promise-with-timeout.js +6 -8
  98. package/components/global/prop-types.js +3 -5
  99. package/components/global/react-dom-renderer.js +28 -44
  100. package/components/global/react-render-adapter.js +1 -1
  101. package/components/global/rerender-hoc.js +12 -30
  102. package/components/global/schedule-raf.js +5 -6
  103. package/components/global/sniffer.js +1 -1
  104. package/components/global/theme.js +0 -22
  105. package/components/global/trivial-template-tag.js +3 -10
  106. package/components/global/typescript-utils.js +2 -6
  107. package/components/global/url.js +20 -26
  108. package/components/global/use-event-callback.js +6 -4
  109. package/components/grid/col.js +35 -52
  110. package/components/grid/grid.js +17 -31
  111. package/components/grid/row.js +35 -47
  112. package/components/group/group.js +17 -25
  113. package/components/header/header.js +33 -78
  114. package/components/header/logo.js +20 -36
  115. package/components/header/profile.js +166 -199
  116. package/components/header/services-link.js +0 -4
  117. package/components/header/services.js +73 -116
  118. package/components/header/smart-profile.js +111 -203
  119. package/components/header/smart-services.js +62 -113
  120. package/components/header/tray-icon.js +21 -37
  121. package/components/header/tray.js +21 -32
  122. package/components/heading/heading.js +24 -25
  123. package/components/http/http.d.ts +1 -3
  124. package/components/http/http.js +203 -353
  125. package/components/http/http.mock.js +49 -101
  126. package/components/hub-source/hub-source.js +83 -190
  127. package/components/hub-source/hub-source__user.js +11 -44
  128. package/components/hub-source/hub-source__users-groups.js +37 -65
  129. package/components/i18n/i18n-context.js +7 -10
  130. package/components/i18n/i18n.js +7 -10
  131. package/components/icon/icon.js +76 -93
  132. package/components/icon/icon__svg.js +0 -8
  133. package/components/icon/index.js +0 -8
  134. package/components/input/input.js +0 -13
  135. package/components/island/adaptive-island-hoc.js +30 -43
  136. package/components/island/content.js +115 -132
  137. package/components/island/header.js +57 -70
  138. package/components/island/island.js +28 -40
  139. package/components/island-legacy/content-legacy.js +17 -25
  140. package/components/island-legacy/header-legacy.js +19 -27
  141. package/components/island-legacy/island-legacy.js +17 -25
  142. package/components/link/clickableLink.js +44 -59
  143. package/components/link/link.js +57 -68
  144. package/components/list/consts.js +2 -2
  145. package/components/list/list.js +611 -698
  146. package/components/list/list__custom.js +44 -62
  147. package/components/list/list__hint.js +10 -19
  148. package/components/list/list__item.js +133 -174
  149. package/components/list/list__link.js +37 -50
  150. package/components/list/list__separator.js +14 -24
  151. package/components/list/list__title.js +22 -32
  152. package/components/list/list__users-groups-source.js +54 -126
  153. package/components/loader/loader.js +43 -74
  154. package/components/loader/loader__core.js +198 -263
  155. package/components/loader-inline/loader-inline.js +23 -35
  156. package/components/loader-screen/loader-screen.js +25 -46
  157. package/components/login-dialog/login-dialog.js +111 -158
  158. package/components/login-dialog/service.js +8 -34
  159. package/components/markdown/markdown.js +15 -23
  160. package/components/message/message.js +161 -203
  161. package/components/old-browsers-message/old-browsers-message.js +11 -18
  162. package/components/old-browsers-message/old-browsers-message__stop.js +0 -7
  163. package/components/old-browsers-message/white-list.js +8 -16
  164. package/components/pager/pager.js +212 -271
  165. package/components/panel/panel.js +17 -25
  166. package/components/permissions/permissions.js +127 -172
  167. package/components/permissions/permissions__cache.js +194 -224
  168. package/components/popup/popup.consts.js +1 -1
  169. package/components/popup/popup.js +284 -343
  170. package/components/popup/popup.target.js +9 -8
  171. package/components/popup/position.js +96 -106
  172. package/components/popup-menu/popup-menu.js +44 -80
  173. package/components/progress-bar/progress-bar.js +87 -104
  174. package/components/query-assist/query-assist.js +838 -916
  175. package/components/query-assist/query-assist__suggestions.js +1 -30
  176. package/components/radio/radio.js +19 -34
  177. package/components/radio/radio__item.js +52 -69
  178. package/components/select/select.js +852 -957
  179. package/components/select/select__filter.js +0 -30
  180. package/components/select/select__popup.js +373 -487
  181. package/components/shortcuts/core.js +166 -217
  182. package/components/shortcuts/shortcut-title.js +6 -11
  183. package/components/shortcuts/shortcuts-hoc.js +19 -45
  184. package/components/shortcuts/shortcuts.js +50 -75
  185. package/components/slider/slider.js +99 -122
  186. package/components/slider/slider.utils.js +14 -24
  187. package/components/storage/storage.js +4 -33
  188. package/components/storage/storage__fallback.js +149 -224
  189. package/components/storage/storage__local.js +90 -153
  190. package/components/tab-trap/tab-trap.js +122 -153
  191. package/components/table/cell.js +14 -26
  192. package/components/table/disable-hover-hoc.js +33 -51
  193. package/components/table/header-cell.js +64 -89
  194. package/components/table/header.js +104 -132
  195. package/components/table/multitable.js +107 -125
  196. package/components/table/row-with-focus-sensor.js +25 -69
  197. package/components/table/row.js +175 -216
  198. package/components/table/selection-adapter.js +1 -3
  199. package/components/table/selection-shortcuts-hoc.js +180 -181
  200. package/components/table/selection.js +156 -226
  201. package/components/table/smart-table.js +50 -88
  202. package/components/table/table.js +289 -358
  203. package/components/tabs/collapsible-more.js +46 -79
  204. package/components/tabs/collapsible-tab.js +31 -38
  205. package/components/tabs/collapsible-tabs.js +88 -153
  206. package/components/tabs/custom-item.js +4 -2
  207. package/components/tabs/dumb-tabs.js +74 -117
  208. package/components/tabs/smart-tabs.js +29 -69
  209. package/components/tabs/tab-link.js +1 -5
  210. package/components/tabs/tab.js +19 -31
  211. package/components/tabs/tabs.js +0 -31
  212. package/components/tag/tag.js +133 -173
  213. package/components/tags-input/tags-input.js +329 -427
  214. package/components/tags-list/tags-list.js +57 -78
  215. package/components/text/text.js +28 -39
  216. package/components/toggle/toggle.js +56 -70
  217. package/components/tooltip/tooltip.js +146 -190
  218. package/components/user-agreement/service.js +228 -371
  219. package/components/user-agreement/toolbox.eula.js +160 -1
  220. package/components/user-agreement/user-agreement.js +85 -120
  221. package/components/user-card/card.js +0 -29
  222. package/components/user-card/smart-user-card-tooltip.js +51 -111
  223. package/components/user-card/tooltip.js +47 -84
  224. package/components/user-card/user-card.js +0 -29
  225. package/package.json +1 -1
@@ -1,7 +1,3 @@
1
- import { _ as _defineProperty, b as _createClass, f as _classCallCheck } from '../_helpers/_rollupPluginBabelHelpers.js';
2
- import 'core-js/modules/es.array.reduce.js';
3
- import 'core-js/modules/es.object.to-string.js';
4
-
5
1
  /**
6
2
  * Converts an array of cached permissions to a a map of a permission key
7
3
  * to the respective cached permission.
@@ -15,242 +11,216 @@ import 'core-js/modules/es.object.to-string.js';
15
11
  * @return {object} permission cache
16
12
  * @private
17
13
  */
18
- var PermissionCache = /*#__PURE__*/function () {
19
- function PermissionCache(permissions, namesConverter) {
20
- _classCallCheck(this, PermissionCache);
21
- _defineProperty(this, "namesConverter", void 0);
22
- _defineProperty(this, "_permissions", void 0);
23
- _defineProperty(this, "permissionCache", void 0);
24
- this.namesConverter = namesConverter || function (key) {
25
- return key;
26
- };
14
+ class PermissionCache {
15
+ static GLOBAL_PROJECT_ID = 'global';
16
+ /**
17
+ * Convert an array of projects to a set of project ids.
18
+ *
19
+ * @param {object[]=} projects
20
+ * @return {object} a set of project ids
21
+ * @private
22
+ */
23
+ static _toProjectIdSet(projects) {
24
+ let projectIdSet = null;
25
+ if (projects) {
26
+ projectIdSet = {};
27
+ for (let i = 0; i < projects.length; i++) {
28
+ projectIdSet[projects[i].id] = true;
29
+ }
30
+ }
31
+ return projectIdSet;
32
+ }
33
+ namesConverter;
34
+ constructor(permissions, namesConverter) {
35
+ this.namesConverter = namesConverter || (key => key);
27
36
  this.set(permissions);
28
37
  }
29
- return _createClass(PermissionCache, [{
30
- key: "set",
31
- value: function set(permissions) {
32
- var _this = this;
33
- var permissionCache = (permissions || []).reduce(function (_permissionCache, permission) {
34
- var key = _this.namesConverter(permission.permission.key);
35
- if (key) {
36
- _permissionCache[key] = {
37
- global: permission.global,
38
- projectIdSet: _this.constructor._toProjectIdSet(permission.projects)
39
- };
40
- }
41
- return _permissionCache;
42
- }, {});
43
- this._permissions = permissions;
44
- this.permissionCache = permissionCache;
45
- return this;
46
- }
47
- }, {
48
- key: "get",
49
- value: function get() {
50
- return this._permissions;
51
- }
52
- /**
53
- * Checks if the current user has the given permissions in the project with the given id.
54
- *
55
- * @param {string} permissions space separated list of permissions
56
- * @param {string=} projectId optional projectId. If absent the method checks
57
- * if the given permission is granted in any project.
58
- *
59
- * @return {boolean}
60
- */
61
- }, {
62
- key: "has",
63
- value: function has(permissions, projectId) {
64
- var lexems = this.lex(permissions);
65
- if (lexems.length === 0) {
66
- return true;
67
- }
68
- try {
69
- return this.or(lexems, projectId);
70
- } catch (e) {
71
- return false;
38
+ _permissions;
39
+ permissionCache;
40
+ set(permissions) {
41
+ const permissionCache = (permissions || []).reduce((_permissionCache, permission) => {
42
+ const key = this.namesConverter(permission.permission.key);
43
+ if (key) {
44
+ _permissionCache[key] = {
45
+ global: permission.global,
46
+ projectIdSet: this.constructor._toProjectIdSet(permission.projects)
47
+ };
72
48
  }
49
+ return _permissionCache;
50
+ }, {});
51
+ this._permissions = permissions;
52
+ this.permissionCache = permissionCache;
53
+ return this;
54
+ }
55
+ get() {
56
+ return this._permissions;
57
+ }
58
+ /**
59
+ * Checks if the current user has the given permissions in the project with the given id.
60
+ *
61
+ * @param {string} permissions space separated list of permissions
62
+ * @param {string=} projectId optional projectId. If absent the method checks
63
+ * if the given permission is granted in any project.
64
+ *
65
+ * @return {boolean}
66
+ */
67
+ has(permissions, projectId) {
68
+ const lexems = this.lex(permissions);
69
+ if (lexems.length === 0) {
70
+ return true;
73
71
  }
74
- /**
75
- * Lexes permission query string to an array of lexems.
76
- *
77
- * @param {string} query
78
- * @return {string[]}
79
- */
80
- }, {
81
- key: "lex",
82
- value: function lex(query) {
83
- var lexems = [];
84
- if (query) {
85
- var currentIdentifier = '';
86
- for (var i = 0; i < query.length; i++) {
87
- switch (query.charAt(i)) {
88
- case ' ':
89
- case '\t':
90
- case '\n':
91
- case '\r':
92
- // Finish current token
93
- if (currentIdentifier) {
94
- lexems.push(currentIdentifier);
95
- currentIdentifier = '';
96
- }
97
- // Skip space
98
- break;
99
- case '(':
100
- case ')':
101
- case '&':
102
- case '|':
103
- case '!':
104
- // Finish current token
105
- if (currentIdentifier) {
106
- lexems.push(currentIdentifier);
107
- currentIdentifier = '';
108
- }
109
- // Append operator
110
- lexems.push(query.charAt(i));
111
- break;
112
- default:
113
- currentIdentifier += query.charAt(i);
114
- break;
115
- }
116
- }
117
- if (currentIdentifier) {
118
- lexems.push(currentIdentifier);
119
- }
120
- }
121
- return lexems;
72
+ try {
73
+ return this.or(lexems, projectId);
74
+ } catch (e) {
75
+ return false;
122
76
  }
123
- /*
124
- or -> and ( '|' and )*
125
- and -> not ( '&'? not )*
126
- not -> '!'* term
127
- term -> '(' or ')' | permission
128
- permission -> [^()&|!\s]+
129
- */
130
- /**
131
- * @param {string[]} lexems
132
- * @param {string=} projectId
133
- * @return {boolean}
134
- */
135
- }, {
136
- key: "or",
137
- value: function or(lexems, projectId) {
138
- var result = this.and(lexems, projectId);
139
- while (lexems.length > 0 && lexems[0] !== ')') {
140
- if (lexems.shift() !== '|') {
141
- throw new Error('Operator \'|\' was expected');
77
+ }
78
+ /**
79
+ * Lexes permission query string to an array of lexems.
80
+ *
81
+ * @param {string} query
82
+ * @return {string[]}
83
+ */
84
+ lex(query) {
85
+ const lexems = [];
86
+ if (query) {
87
+ let currentIdentifier = '';
88
+ for (let i = 0; i < query.length; i++) {
89
+ switch (query.charAt(i)) {
90
+ case ' ':
91
+ case '\t':
92
+ case '\n':
93
+ case '\r':
94
+ // Finish current token
95
+ if (currentIdentifier) {
96
+ lexems.push(currentIdentifier);
97
+ currentIdentifier = '';
98
+ }
99
+ // Skip space
100
+ break;
101
+ case '(':
102
+ case ')':
103
+ case '&':
104
+ case '|':
105
+ case '!':
106
+ // Finish current token
107
+ if (currentIdentifier) {
108
+ lexems.push(currentIdentifier);
109
+ currentIdentifier = '';
110
+ }
111
+ // Append operator
112
+ lexems.push(query.charAt(i));
113
+ break;
114
+ default:
115
+ currentIdentifier += query.charAt(i);
116
+ break;
142
117
  }
143
- result = this.and(lexems, projectId) || result;
144
118
  }
145
- return result;
119
+ if (currentIdentifier) {
120
+ lexems.push(currentIdentifier);
121
+ }
146
122
  }
147
- /**
148
- * @param {string[]} lexems
149
- * @param {string=} projectId
150
- * @return {boolean}
151
- */
152
- }, {
153
- key: "and",
154
- value: function and(lexems, projectId) {
155
- var result = this.not(lexems, projectId);
156
- while (lexems.length > 0 && lexems[0] !== ')' && lexems[0] !== '|') {
157
- // Expect optional '&'
158
- if (lexems[0] === '&') {
159
- lexems.shift();
160
- }
161
- result = this.not(lexems, projectId) && result;
123
+ return lexems;
124
+ }
125
+ /*
126
+ or -> and ( '|' and )*
127
+ and -> not ( '&'? not )*
128
+ not -> '!'* term
129
+ term -> '(' or ')' | permission
130
+ permission -> [^()&|!\s]+
131
+ */
132
+ /**
133
+ * @param {string[]} lexems
134
+ * @param {string=} projectId
135
+ * @return {boolean}
136
+ */
137
+ or(lexems, projectId) {
138
+ let result = this.and(lexems, projectId);
139
+ while (lexems.length > 0 && lexems[0] !== ')') {
140
+ if (lexems.shift() !== '|') {
141
+ throw new Error('Operator \'|\' was expected');
162
142
  }
163
- return result;
143
+ result = this.and(lexems, projectId) || result;
164
144
  }
165
- /**
166
- * @param {string[]} lexems
167
- * @param {string=} projectId
168
- * @return {boolean}
169
- */
170
- }, {
171
- key: "not",
172
- value: function not(lexems, projectId) {
173
- var notCounter = 0;
174
- while (lexems.length > 0 && lexems[0] === '!') {
175
- ++notCounter;
145
+ return result;
146
+ }
147
+ /**
148
+ * @param {string[]} lexems
149
+ * @param {string=} projectId
150
+ * @return {boolean}
151
+ */
152
+ and(lexems, projectId) {
153
+ let result = this.not(lexems, projectId);
154
+ while (lexems.length > 0 && lexems[0] !== ')' && lexems[0] !== '|') {
155
+ // Expect optional '&'
156
+ if (lexems[0] === '&') {
176
157
  lexems.shift();
177
158
  }
178
- var result = this.term(lexems, projectId);
179
- return notCounter % 2 === 0 ? result : !result;
159
+ result = this.not(lexems, projectId) && result;
180
160
  }
181
- /**
182
- * @param {string[]} lexems
183
- * @param {string=} projectId
184
- * @return {boolean}
185
- */
186
- }, {
187
- key: "term",
188
- value: function term(lexems, projectId) {
189
- if (lexems.length === 0) {
190
- throw new Error('Operand was expected');
191
- }
192
- var t = lexems.shift();
193
- var result;
194
- // Nested parenthesized expression
195
- if (t === '(') {
196
- result = this.or(lexems, projectId);
197
- // Expect ')'
198
- if (lexems.shift() !== ')') {
199
- throw new Error('Operator \')\' was expected');
200
- }
201
- } else {
202
- result = t != null && this.testPermission(t, projectId);
203
- }
204
- return result;
161
+ return result;
162
+ }
163
+ /**
164
+ * @param {string[]} lexems
165
+ * @param {string=} projectId
166
+ * @return {boolean}
167
+ */
168
+ not(lexems, projectId) {
169
+ let notCounter = 0;
170
+ while (lexems.length > 0 && lexems[0] === '!') {
171
+ ++notCounter;
172
+ lexems.shift();
205
173
  }
206
- /**
207
- * @param {string} permissionName
208
- * @param {string=} projectId
209
- * @return {boolean}
210
- */
211
- }, {
212
- key: "testPermission",
213
- value: function testPermission(permissionName, projectId) {
214
- var permissionCache = this.permissionCache;
215
- var convertedName = this.namesConverter(permissionName);
216
- var cachedPermission = (permissionCache === null || permissionCache === void 0 ? void 0 : permissionCache[permissionName]) || convertedName && (permissionCache === null || permissionCache === void 0 ? void 0 : permissionCache[convertedName]);
217
- // Hasn't the permission in any project
218
- if (!cachedPermission) {
219
- return false;
220
- }
221
- // The permission is global or is given in the global project
222
- if (cachedPermission.global) {
223
- return true;
224
- }
225
- if (projectId) {
226
- // if projectId is specified check that the permission is given in the project
227
- return cachedPermission.projectIdSet != null && projectId in cachedPermission.projectIdSet;
228
- } else {
229
- return true;
230
- }
174
+ const result = this.term(lexems, projectId);
175
+ return notCounter % 2 === 0 ? result : !result;
176
+ }
177
+ /**
178
+ * @param {string[]} lexems
179
+ * @param {string=} projectId
180
+ * @return {boolean}
181
+ */
182
+ term(lexems, projectId) {
183
+ if (lexems.length === 0) {
184
+ throw new Error('Operand was expected');
231
185
  }
232
- }], [{
233
- key: "_toProjectIdSet",
234
- value:
235
- /**
236
- * Convert an array of projects to a set of project ids.
237
- *
238
- * @param {object[]=} projects
239
- * @return {object} a set of project ids
240
- * @private
241
- */
242
- function _toProjectIdSet(projects) {
243
- var projectIdSet = null;
244
- if (projects) {
245
- projectIdSet = {};
246
- for (var i = 0; i < projects.length; i++) {
247
- projectIdSet[projects[i].id] = true;
248
- }
186
+ const t = lexems.shift();
187
+ let result;
188
+ // Nested parenthesized expression
189
+ if (t === '(') {
190
+ result = this.or(lexems, projectId);
191
+ // Expect ')'
192
+ if (lexems.shift() !== ')') {
193
+ throw new Error('Operator \')\' was expected');
249
194
  }
250
- return projectIdSet;
195
+ } else {
196
+ result = t != null && this.testPermission(t, projectId);
197
+ }
198
+ return result;
199
+ }
200
+ /**
201
+ * @param {string} permissionName
202
+ * @param {string=} projectId
203
+ * @return {boolean}
204
+ */
205
+ testPermission(permissionName, projectId) {
206
+ const permissionCache = this.permissionCache;
207
+ const convertedName = this.namesConverter(permissionName);
208
+ const cachedPermission = permissionCache?.[permissionName] || convertedName && permissionCache?.[convertedName];
209
+ // Hasn't the permission in any project
210
+ if (!cachedPermission) {
211
+ return false;
212
+ }
213
+ // The permission is global or is given in the global project
214
+ if (cachedPermission.global) {
215
+ return true;
251
216
  }
252
- }]);
253
- }();
254
- _defineProperty(PermissionCache, "GLOBAL_PROJECT_ID", 'global');
217
+ if (projectId) {
218
+ // if projectId is specified check that the permission is given in the project
219
+ return cachedPermission.projectIdSet != null && projectId in cachedPermission.projectIdSet;
220
+ } else {
221
+ return true;
222
+ }
223
+ }
224
+ }
255
225
 
256
226
  export { PermissionCache as default };
@@ -17,7 +17,7 @@ var Directions;
17
17
  * When positioning a popup, directions will be tried in the listed order.
18
18
  * @type {Array.<string>}
19
19
  */
20
- var DEFAULT_DIRECTIONS = [Directions.BOTTOM_RIGHT, Directions.BOTTOM_LEFT, Directions.TOP_LEFT, Directions.TOP_RIGHT, Directions.RIGHT_TOP, Directions.RIGHT_BOTTOM, Directions.LEFT_TOP, Directions.LEFT_BOTTOM];
20
+ const DEFAULT_DIRECTIONS = [Directions.BOTTOM_RIGHT, Directions.BOTTOM_LEFT, Directions.TOP_LEFT, Directions.TOP_RIGHT, Directions.RIGHT_TOP, Directions.RIGHT_BOTTOM, Directions.LEFT_TOP, Directions.LEFT_BOTTOM];
21
21
  /**
22
22
  * @enum {number}
23
23
  */