@jetbrains/ring-ui 7.0.0-beta.9 → 7.0.1

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 (251) hide show
  1. package/babel.config.js +20 -14
  2. package/components/alert/alert.css +7 -7
  3. package/components/alert/alert.d.ts +2 -2
  4. package/components/alert/alert.js +10 -12
  5. package/components/alert/container.js +1 -1
  6. package/components/alert-service/alert-service.js +4 -2
  7. package/components/analytics/analytics__custom-plugin.js +1 -1
  8. package/components/auth/auth.js +1 -1
  9. package/components/auth/auth__core.js +36 -36
  10. package/components/auth/background-flow.js +2 -2
  11. package/components/auth/down-notification.js +3 -1
  12. package/components/auth/iframe-flow.js +4 -2
  13. package/components/auth/request-builder.js +5 -5
  14. package/components/auth/storage.js +10 -9
  15. package/components/auth/token-validator.js +8 -15
  16. package/components/auth-dialog/auth-dialog.js +8 -8
  17. package/components/auth-dialog-service/auth-dialog-service.js +4 -4
  18. package/components/avatar/avatar.js +9 -7
  19. package/components/avatar/fallback-avatar.js +15 -12
  20. package/components/button/button.css +31 -24
  21. package/components/button/button.js +9 -9
  22. package/components/button/button__classes.d.ts +1 -1
  23. package/components/button/button__classes.js +3 -4
  24. package/components/button-group/button-group.css +25 -13
  25. package/components/button-group/caption.js +1 -1
  26. package/components/button-toolbar/button-toolbar.d.ts +1 -1
  27. package/components/button-toolbar/button-toolbar.js +2 -2
  28. package/components/caret/caret.js +8 -8
  29. package/components/checkbox/checkbox.css +8 -5
  30. package/components/checkbox/checkbox.js +1 -1
  31. package/components/clipboard/clipboard-fallback.js +2 -6
  32. package/components/clipboard/clipboard.js +5 -5
  33. package/components/code/code.d.ts +1 -1
  34. package/components/code/code.js +2 -2
  35. package/components/code/highlight.css +3 -1
  36. package/components/collapse/collapse-content.js +3 -3
  37. package/components/collapse/collapse-context.js +1 -1
  38. package/components/collapse/collapse-control.js +5 -3
  39. package/components/collapse/collapse.css +21 -20
  40. package/components/collapse/collapse.js +2 -2
  41. package/components/confirm/confirm.d.ts +2 -2
  42. package/components/confirm/confirm.js +2 -2
  43. package/components/confirm-service/confirm-service.d.ts +1 -1
  44. package/components/confirm-service/confirm-service.js +6 -6
  45. package/components/content-layout/content-layout.css +6 -5
  46. package/components/content-layout/content-layout.js +7 -6
  47. package/components/content-layout/sidebar.js +5 -5
  48. package/components/contenteditable/contenteditable.d.ts +1 -1
  49. package/components/contenteditable/contenteditable.js +3 -4
  50. package/components/control-label/control-label.js +5 -3
  51. package/components/data-list/data-list.css +3 -3
  52. package/components/data-list/data-list.d.ts +2 -2
  53. package/components/data-list/data-list.js +6 -7
  54. package/components/data-list/data-list.mock.js +57 -47
  55. package/components/data-list/item.js +14 -16
  56. package/components/data-list/selection.js +5 -7
  57. package/components/data-list/title.js +5 -6
  58. package/components/date-picker/consts.js +2 -2
  59. package/components/date-picker/date-input.js +4 -4
  60. package/components/date-picker/date-picker.css +23 -18
  61. package/components/date-picker/date-picker.d.ts +2 -1
  62. package/components/date-picker/date-picker.js +13 -19
  63. package/components/date-picker/date-popup.js +30 -36
  64. package/components/date-picker/day.js +6 -9
  65. package/components/date-picker/formats.js +647 -1
  66. package/components/date-picker/month-names.js +6 -8
  67. package/components/date-picker/month-slider.js +2 -2
  68. package/components/date-picker/month.js +1 -3
  69. package/components/date-picker/months.js +2 -6
  70. package/components/date-picker/weekdays.js +2 -3
  71. package/components/date-picker/years.js +3 -3
  72. package/components/dialog/dialog.d.ts +1 -0
  73. package/components/dialog/dialog.js +20 -13
  74. package/components/dialog/dialog__body-scroll-preventer.js +1 -1
  75. package/components/dropdown/dropdown.css +2 -4
  76. package/components/dropdown/dropdown.d.ts +2 -2
  77. package/components/dropdown/dropdown.js +5 -5
  78. package/components/dropdown-menu/dropdown-menu.js +5 -5
  79. package/components/editable-heading/editable-heading.css +5 -2
  80. package/components/editable-heading/editable-heading.js +21 -19
  81. package/components/error-bubble/error-bubble.js +1 -1
  82. package/components/error-message/error-message.js +2 -4
  83. package/components/footer/footer.js +11 -15
  84. package/components/form/form.stories.js +45 -63
  85. package/components/global/create-stateful-context.js +2 -4
  86. package/components/global/data-tests.js +5 -6
  87. package/components/global/dom.js +8 -11
  88. package/components/global/focus-sensor-hoc.js +5 -6
  89. package/components/global/fuzzy-highlight.js +1 -1
  90. package/components/global/get-event-key.js +2 -2
  91. package/components/global/global.css +0 -3
  92. package/components/global/linear-function.js +1 -1
  93. package/components/global/normalize-indent.js +2 -6
  94. package/components/global/react-dom-renderer.js +2 -3
  95. package/components/global/theme.js +9 -10
  96. package/components/global/url.js +8 -8
  97. package/components/global/variables.css +1 -8
  98. package/components/global/variables_dark.css +0 -1
  99. package/components/grid/col.js +6 -6
  100. package/components/grid/grid.css +174 -173
  101. package/components/grid/grid.js +1 -1
  102. package/components/grid/row.js +13 -6
  103. package/components/group/group.js +1 -1
  104. package/components/header/header-icon.js +2 -2
  105. package/components/header/header.css +19 -15
  106. package/components/header/header.js +3 -5
  107. package/components/header/links.js +1 -1
  108. package/components/header/logo.js +1 -1
  109. package/components/header/profile.d.ts +2 -2
  110. package/components/header/profile.js +9 -9
  111. package/components/header/services-link.js +1 -1
  112. package/components/header/services.js +4 -5
  113. package/components/header/smart-profile.js +4 -3
  114. package/components/header/smart-services.js +9 -5
  115. package/components/header/tray.js +1 -1
  116. package/components/heading/heading.css +0 -1
  117. package/components/heading/heading.js +2 -2
  118. package/components/http/http.d.ts +3 -3
  119. package/components/http/http.js +25 -29
  120. package/components/http/http.mock.js +9 -6
  121. package/components/hub-source/hub-source.js +5 -7
  122. package/components/hub-source/hub-source__user.js +1 -1
  123. package/components/hub-source/hub-source__users-groups.js +6 -7
  124. package/components/i18n/README.md +3 -4
  125. package/components/i18n/i18n-context.js +2 -4
  126. package/components/icon/icon.js +7 -9
  127. package/components/icon/icon__svg.js +6 -6
  128. package/components/input/input.js +11 -14
  129. package/components/input-size/input-size.stories.js +42 -22
  130. package/components/island/adaptive-island-hoc.js +1 -1
  131. package/components/island/content.js +4 -6
  132. package/components/island/header.js +8 -10
  133. package/components/island/island.css +5 -5
  134. package/components/island/island.js +1 -1
  135. package/components/link/clickableLink.js +3 -1
  136. package/components/link/link.js +5 -3
  137. package/components/list/consts.js +1 -1
  138. package/components/list/list.d.ts +1 -1
  139. package/components/list/list.js +35 -57
  140. package/components/list/list__custom.js +3 -5
  141. package/components/list/list__hint.js +3 -1
  142. package/components/list/list__item.js +11 -9
  143. package/components/list/list__link.js +1 -1
  144. package/components/list/list__separator.js +2 -2
  145. package/components/list/list__title.js +7 -3
  146. package/components/list/list__users-groups-source.js +6 -8
  147. package/components/loader/loader.js +1 -1
  148. package/components/loader/loader__core.js +5 -5
  149. package/components/loader-inline/loader-inline.css +0 -3
  150. package/components/loader-inline/loader-inline.js +5 -7
  151. package/components/loader-screen/loader-screen.js +1 -1
  152. package/components/login-dialog/login-dialog.js +4 -4
  153. package/components/login-dialog/service.js +5 -5
  154. package/components/markdown/markdown.css +6 -6
  155. package/components/markdown/markdown.d.ts +2 -2
  156. package/components/markdown/markdown.js +4 -6
  157. package/components/message/message.css +2 -1
  158. package/components/message/message.js +30 -21
  159. package/components/old-browsers-message/old-browsers-message.js +2 -2
  160. package/components/old-browsers-message/white-list.js +2 -3
  161. package/components/pager/pager.js +28 -29
  162. package/components/permissions/permissions.js +8 -13
  163. package/components/permissions/permissions__cache.js +6 -7
  164. package/components/popup/popup.consts.js +8 -2
  165. package/components/popup/popup.js +27 -33
  166. package/components/popup/popup.target.js +4 -4
  167. package/components/popup/position.js +21 -28
  168. package/components/popup-menu/popup-menu.js +1 -1
  169. package/components/progress-bar/progress-bar.css +10 -8
  170. package/components/progress-bar/progress-bar.d.ts +2 -2
  171. package/components/progress-bar/progress-bar.js +2 -2
  172. package/components/query-assist/query-assist.css +0 -3
  173. package/components/query-assist/query-assist.js +73 -84
  174. package/components/query-assist/query-assist__suggestions.js +10 -9
  175. package/components/radio/radio.css +6 -2
  176. package/components/radio/radio.js +1 -3
  177. package/components/scrollable-section/scrollable-section.css +5 -6
  178. package/components/scrollable-section/scrollable-section.js +1 -1
  179. package/components/select/select.css +5 -5
  180. package/components/select/select.d.ts +1 -1
  181. package/components/select/select.js +96 -110
  182. package/components/select/select__filter.js +1 -1
  183. package/components/select/select__popup.js +40 -51
  184. package/components/shortcuts/core.js +10 -7
  185. package/components/shortcuts/shortcut-title.js +6 -6
  186. package/components/shortcuts/shortcuts.js +1 -1
  187. package/components/sidebar/sidebar.css +3 -1
  188. package/components/slider/slider.css +14 -14
  189. package/components/slider/slider.js +7 -7
  190. package/components/tab-trap/tab-trap.js +7 -9
  191. package/components/table/cell.js +3 -1
  192. package/components/table/disable-hover-hoc.js +2 -2
  193. package/components/table/header-cell.js +5 -3
  194. package/components/table/header.d.ts +1 -2
  195. package/components/table/header.js +10 -12
  196. package/components/table/multitable.js +5 -3
  197. package/components/table/row.d.ts +0 -1
  198. package/components/table/row.js +20 -27
  199. package/components/table/selection-adapter.js +1 -1
  200. package/components/table/selection-shortcuts-hoc.js +2 -2
  201. package/components/table/selection.d.ts +2 -3
  202. package/components/table/selection.js +4 -5
  203. package/components/table/simple-table.js +4 -4
  204. package/components/table/smart-table.js +5 -5
  205. package/components/table/table.css +8 -9
  206. package/components/table/table.d.ts +0 -1
  207. package/components/table/table.js +22 -23
  208. package/components/table/table.stories.json +45 -16
  209. package/components/tabs/collapsible-more.d.ts +1 -1
  210. package/components/tabs/collapsible-more.js +13 -16
  211. package/components/tabs/collapsible-tab.js +2 -2
  212. package/components/tabs/collapsible-tabs.d.ts +2 -2
  213. package/components/tabs/collapsible-tabs.js +13 -22
  214. package/components/tabs/dumb-tabs.js +6 -9
  215. package/components/tabs/smart-tabs.js +4 -4
  216. package/components/tabs/tab-link.js +1 -3
  217. package/components/tabs/tabs.css +7 -9
  218. package/components/tag/tag.css +6 -6
  219. package/components/tag/tag.d.ts +1 -1
  220. package/components/tag/tag.js +9 -12
  221. package/components/tags-input/tags-input.js +15 -19
  222. package/components/tags-list/tags-list.d.ts +2 -2
  223. package/components/tags-list/tags-list.js +6 -5
  224. package/components/text/text.js +5 -3
  225. package/components/toggle/toggle.css +12 -10
  226. package/components/toggle/toggle.d.ts +2 -2
  227. package/components/toggle/toggle.js +4 -3
  228. package/components/tooltip/tooltip.js +13 -8
  229. package/components/user-agreement/service.js +15 -13
  230. package/components/user-agreement/user-agreement.js +3 -5
  231. package/components/user-card/card.js +10 -9
  232. package/components/user-card/smart-user-card-tooltip.js +5 -7
  233. package/components/user-card/tooltip.js +4 -4
  234. package/components/user-card/user-card.css +4 -0
  235. package/jslint-xml.js +20 -19
  236. package/package.json +59 -50
  237. package/postcss.config.js +3 -4
  238. package/typings.d.ts +2 -4
  239. package/webpack.config.js +20 -25
  240. package/components/badge/badge.css +0 -42
  241. package/components/badge/badge.d.ts +0 -14
  242. package/components/badge/badge.js +0 -29
  243. package/components/island-legacy/content-legacy.d.ts +0 -5
  244. package/components/island-legacy/content-legacy.js +0 -12
  245. package/components/island-legacy/header-legacy.d.ts +0 -5
  246. package/components/island-legacy/header-legacy.js +0 -14
  247. package/components/island-legacy/island-legacy.css +0 -98
  248. package/components/island-legacy/island-legacy.d.ts +0 -7
  249. package/components/island-legacy/island-legacy.js +0 -14
  250. package/components/table-legacy/table-legacy.css +0 -346
  251. package/components/table-legacy/table-legacy__toolbar.css +0 -25
@@ -14,14 +14,14 @@ export const hideMessage = 'userAgreementHide';
14
14
  const DEFAULT_CONSENT = {
15
15
  accepted: false,
16
16
  majorVersion: 0,
17
- minorVersion: 0
17
+ minorVersion: 0,
18
18
  };
19
19
  const DEFAULT_AGREEMENT = {
20
20
  enabled: false,
21
21
  majorVersion: 0,
22
22
  minorVersion: 0,
23
23
  requiredForREST: false,
24
- content: ''
24
+ content: '',
25
25
  };
26
26
  export default class UserAgreementService {
27
27
  config;
@@ -107,10 +107,7 @@ export default class UserAgreementService {
107
107
  };
108
108
  checkConsent = async () => {
109
109
  if (!this.checkingPromise) {
110
- this.checkingPromise = Promise.all([
111
- this.getUserAgreement(),
112
- this.getUserConsent()
113
- ]);
110
+ this.checkingPromise = Promise.all([this.getUserAgreement(), this.getUserConsent()]);
114
111
  }
115
112
  const [userAgreement, userConsent] = await this.checkingPromise;
116
113
  this.checkingPromise = null;
@@ -124,7 +121,7 @@ export default class UserAgreementService {
124
121
  return this._alertPromise;
125
122
  }
126
123
  this._alertPromise = new Promise((resolve, reject) => {
127
- const { userAgreement, reviewNow, remindLater } = (this.config.translations || {});
124
+ const { userAgreement, reviewNow, remindLater } = this.config.translations || {};
128
125
  const onRemind = () => {
129
126
  this.hideDialogAndAlert(withoutNotifications);
130
127
  reject('Postponed');
@@ -136,8 +133,12 @@ export default class UserAgreementService {
136
133
  };
137
134
  const message = (<Group>
138
135
  <span>{userAgreement || 'User Agreement'}</span>
139
- <Link onClick={onReview} data-test="review">{reviewNow || 'Review now'}</Link>
140
- <Link onClick={onRemind} data-test="later">{remindLater || 'Remind me later'}</Link>
136
+ <Link onClick={onReview} data-test="review">
137
+ {reviewNow || 'Review now'}
138
+ </Link>
139
+ <Link onClick={onRemind} data-test="later">
140
+ {remindLater || 'Remind me later'}
141
+ </Link>
141
142
  </Group>);
142
143
  this.alertKey = alertService.addAlert(message, Alert.Type.WARNING, 0, { closeable: false });
143
144
  });
@@ -180,11 +181,12 @@ export default class UserAgreementService {
180
181
  onDecline,
181
182
  onClose,
182
183
  translations,
183
- preview, ...restOptions
184
+ preview,
185
+ ...restOptions,
184
186
  };
185
- this.reactRoot.render((<ControlsHeightContext.Provider value={getGlobalControlsHeight()}>
186
- <UserAgreement {...props}/>
187
- </ControlsHeightContext.Provider>));
187
+ this.reactRoot.render(<ControlsHeightContext.Provider value={getGlobalControlsHeight()}>
188
+ <UserAgreement {...props}/>
189
+ </ControlsHeightContext.Provider>);
188
190
  if (onDialogShow) {
189
191
  onDialogShow();
190
192
  }
@@ -18,10 +18,10 @@ export default class UserAgreement extends PureComponent {
18
18
  show: false,
19
19
  onAccept: noop,
20
20
  onDecline: noop,
21
- onClose: noop
21
+ onClose: noop,
22
22
  };
23
23
  state = {
24
- scrolledDown: false
24
+ scrolledDown: false,
25
25
  };
26
26
  onScrollToBottom = () => this.setState({ scrolledDown: true });
27
27
  render() {
@@ -34,9 +34,7 @@ export default class UserAgreement extends PureComponent {
34
34
  {children}
35
35
  </Content>
36
36
  {!preview && (<Panel>
37
- {onRemindLater && !scrolledDown && (<div className={style.suggestion}>
38
- {translations?.scrollToAccept ?? translate('scrollToAccept')}
39
- </div>)}
37
+ {onRemindLater && !scrolledDown && (<div className={style.suggestion}>{translations?.scrollToAccept ?? translate('scrollToAccept')}</div>)}
40
38
  <Button primary disabled={!scrolledDown} onClick={onAccept} data-test="accept">
41
39
  {translations?.accept ?? translate('accept')}
42
40
  </Button>
@@ -5,9 +5,10 @@ import copyIcon from '@jetbrains/icons/copy';
5
5
  import Avatar, { Size as AvatarSize } from '../avatar/avatar';
6
6
  import Link from '../link/link';
7
7
  import clipboard from '../clipboard/clipboard';
8
- import badgeStyles from '../badge/badge.css';
8
+ import Tag from '../tag/tag';
9
9
  import Icon, { Size as IconSize } from '../icon/icon';
10
10
  import { I18nContext } from '../i18n/i18n-context';
11
+ import Tooltip from '../tooltip/tooltip';
11
12
  import styles from './user-card.css';
12
13
  export default class UserCard extends PureComponent {
13
14
  static contextType = I18nContext;
@@ -35,13 +36,13 @@ export default class UserCard extends PureComponent {
35
36
  {user.name}
36
37
  </Link>)}
37
38
  {!user.href && <span className={styles.userName}>{user.name}</span>}
38
- {typeof user.online === 'boolean' &&
39
- (<span className={userActiveStatusClasses} title={user.online
40
- ? (translations?.online ?? translate('online'))
41
- : (translations?.offline ?? translate('offline'))}/>)}
39
+ {typeof user.online === 'boolean' && (<span className={userActiveStatusClasses} title={user.online
40
+ ? (translations?.online ?? translate('online'))
41
+ : (translations?.offline ?? translate('offline'))}/>)}
42
42
  {!!info && <span className={styles.userNameInfo}>{info}</span>}
43
- {user.banned &&
44
- (<span className={classNames(badgeStyles.badge, badgeStyles.invalid)} title={user.banReason}>{translations?.banned ?? translate('banned')}</span>)}
43
+ {user.banned && (<Tooltip title={user.banReason}>
44
+ <Tag className={styles.banLabel}>{translations?.banned ?? translate('banned')}</Tag>
45
+ </Tooltip>)}
45
46
  </div>
46
47
  <div className={styles.userLogin}>{user.login}</div>
47
48
  {user.email && (<span className={styles.userEmailWrapper}>
@@ -49,8 +50,8 @@ export default class UserCard extends PureComponent {
49
50
  {user.email}
50
51
  </Link>
51
52
  {user.unverifiedEmail && (<span className={styles.unverifiedLabel}>
52
- {translations?.unverified ?? translate('unverified')}
53
- </span>)}
53
+ {translations?.unverified ?? translate('unverified')}
54
+ </span>)}
54
55
  <Icon title={translations?.copyToClipboard ?? translate('copyToClipboard')} className={styles.userCopyIcon} onClick={this.copyEmail} glyph={copyIcon} size={IconSize.Size14} suppressSizeWarning/>
55
56
  </span>)}
56
57
  </div>
@@ -5,7 +5,7 @@ import styles from './user-card.css';
5
5
  export default class SmartUserCardTooltip extends Component {
6
6
  state = {
7
7
  user: null,
8
- loading: false
8
+ loading: false,
9
9
  };
10
10
  loadUser = async () => {
11
11
  if (this.state.user) {
@@ -23,17 +23,15 @@ export default class SmartUserCardTooltip extends Component {
23
23
  this.setState({ loading: false });
24
24
  }
25
25
  };
26
- renderNoUser = () => (this.state.loading
27
- ? (<div className={styles.userCardSpaced}>
28
- <LoaderInline />
29
- </div>)
30
- : '');
26
+ renderNoUser = () => this.state.loading ? (<div className={styles.userCardSpaced}>
27
+ <LoaderInline />
28
+ </div>) : ('');
31
29
  render() {
32
30
  const { user } = this.state;
33
31
  const { children, userDataSource, ...restProps } = this.props;
34
32
  const dropdownProps = {
35
33
  onMouseEnter: this.loadUser,
36
- ...UserCardTooltip.defaultProps.dropdownProps
34
+ ...UserCardTooltip.defaultProps.dropdownProps,
37
35
  };
38
36
  return (<UserCardTooltip user={user} renderNoUser={this.renderNoUser} dropdownProps={dropdownProps} {...restProps}>
39
37
  {children}
@@ -9,13 +9,13 @@ export default class UserCardTooltip extends Component {
9
9
  static defaultProps = {
10
10
  renderUserCard: (props) => {
11
11
  const { user, ...restProps } = props;
12
- return user && (<UserCard user={user} {...restProps}/>);
12
+ return user && <UserCard user={user} {...restProps}/>;
13
13
  },
14
14
  renderNoUser: () => '',
15
15
  dropdownProps: {
16
16
  hoverShowTimeOut: DEFAULT_TIMEOUT,
17
- hoverHideTimeOut: DEFAULT_TIMEOUT
18
- }
17
+ hoverHideTimeOut: DEFAULT_TIMEOUT,
18
+ },
19
19
  };
20
20
  render() {
21
21
  const { children, renderUserCard, renderNoUser, dropdownProps, user, ...restProps } = this.props;
@@ -25,7 +25,7 @@ export default class UserCardTooltip extends Component {
25
25
  ? renderUserCard({
26
26
  ...restProps,
27
27
  user,
28
- className: classNames(styles.userCardSpaced, this.props.className)
28
+ className: classNames(styles.userCardSpaced, this.props.className),
29
29
  })
30
30
  : renderNoUser()}
31
31
  </Popup>
@@ -106,6 +106,10 @@
106
106
  margin-bottom: 3px;
107
107
  }
108
108
 
109
+ .banLabel {
110
+ color: var(--ring-error-color);
111
+ }
112
+
109
113
  .userActiveStatus {
110
114
  display: inline-block;
111
115
 
package/jslint-xml.js CHANGED
@@ -1,33 +1,34 @@
1
- // eslint-disable-next-line no-control-regex
2
- const xmlEscape = s => (`${s}`).replace(/[<>&"'\x00-\x1F\x7F\u0080-\uFFFF]/g, c => {
3
- switch (c) {
4
- case '<':
5
- return '&lt;';
6
- case '>':
7
- return '&gt;';
8
- case '&':
9
- return '&amp;';
10
- case '"':
11
- return '&quot;';
12
- case '\'':
13
- return '&apos;';
14
- default:
15
- return `&#${c.charCodeAt(0)};`;
16
- }
17
- });
1
+ const xmlEscape = s =>
2
+ // eslint-disable-next-line no-control-regex
3
+ `${s}`.replace(/[<>&"'\x00-\x1F\x7F\u0080-\uFFFF]/g, c => {
4
+ switch (c) {
5
+ case '<':
6
+ return '&lt;';
7
+ case '>':
8
+ return '&gt;';
9
+ case '&':
10
+ return '&amp;';
11
+ case '"':
12
+ return '&quot;';
13
+ case "'":
14
+ return '&apos;';
15
+ default:
16
+ return `&#${c.charCodeAt(0)};`;
17
+ }
18
+ });
18
19
 
19
20
  module.exports = results => {
20
21
  const files = results.map(file => {
21
22
  const warnings = file.warnings.map(({column, line, text}) => {
22
23
  const css = file._postcssResult && file._postcssResult.css;
23
- const lines = css && css.split('\n') || [];
24
+ const lines = (css && css.split('\n')) || [];
24
25
  const evidence = lines[line - 1];
25
26
 
26
27
  return [
27
28
  `<issue line="${line}"`,
28
29
  ` char="${column}"`,
29
30
  ` evidence="${evidence ? xmlEscape(evidence) : ''}"`,
30
- ` reason="${xmlEscape(text)}" />`
31
+ ` reason="${xmlEscape(text)}" />`,
31
32
  ].join('');
32
33
  });
33
34
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jetbrains/ring-ui",
3
- "version": "7.0.0-beta.9",
3
+ "version": "7.0.1",
4
4
  "description": "JetBrains UI library",
5
5
  "author": "JetBrains",
6
6
  "license": "Apache-2.0",
@@ -32,7 +32,8 @@
32
32
  },
33
33
  "scripts": {
34
34
  "apply-resolutions": "npx npm-force-resolutions@0.0.10",
35
- "_postinstall": "husky",
35
+ "_postinstall": "husky && npm run postinstall:gitconfig",
36
+ "postinstall:gitconfig": "git config blame.ignoreRevsFile .git-blame-ignore-revs",
36
37
  "prepare": "webpack -c .storybook/custom-header/webpack.config.js",
37
38
  "prea11y-audit": "playwright install",
38
39
  "a11y-audit": "test-storybook --url http://localhost:9999",
@@ -55,8 +56,8 @@
55
56
  "lint": "npm run lint:js . && npm run stylelint",
56
57
  "prelint-ci": "echo \"##teamcity[importData type='jslint' path='eslint-report.xml']\"",
57
58
  "lint-ci": "eslint --format jslint-xml . > eslint-report.xml && npm run stylelint-ci",
58
- "stylelint-ci": "stylelint --ignore-path .eslintignore --custom-formatter './jslint-xml.js' '**/*.css' | xmlappend eslint-report.xml",
59
- "stylelint": "stylelint --ignore-path .eslintignore '**/*.css'",
59
+ "stylelint-ci": "stylelint --ignore-path .stylelintignore --custom-formatter './jslint-xml.js' '**/*.css' | xmlappend eslint-report.xml",
60
+ "stylelint": "stylelint --ignore-path .stylelintignore '**/*.css'",
60
61
  "validate-tc-config": "mvn --file .teamcity/pom.xml org.jetbrains.teamcity:teamcity-configs-maven-plugin:generate -e",
61
62
  "pretest-ci": "npm run lint-ci",
62
63
  "typecheck": "tsc",
@@ -76,71 +77,79 @@
76
77
  },
77
78
  "readmeFilename": "README.md",
78
79
  "devDependencies": {
79
- "@babel/cli": "^7.25.6",
80
- "@babel/eslint-parser": "^7.25.1",
81
- "@csstools/css-parser-algorithms": "^3.0.0",
80
+ "@babel/cli": "^7.25.9",
81
+ "@babel/eslint-parser": "^7.25.9",
82
+ "@babel/plugin-syntax-import-assertions": "^7.26.0",
83
+ "@csstools/css-parser-algorithms": "^3.0.4",
82
84
  "@csstools/stylelint-no-at-nest-rule": "^4.0.0",
83
- "@jetbrains/eslint-config": "^5.4.2",
85
+ "@eslint/compat": "^1.2.2",
86
+ "@eslint/eslintrc": "^3.1.0",
87
+ "@eslint/js": "^9.14.0",
88
+ "@jetbrains/eslint-config": "^6.0.4",
84
89
  "@jetbrains/logos": "3.0.0-canary.734b213.0",
85
90
  "@jetbrains/stylelint-config": "^4.0.2",
86
- "@primer/octicons": "^19.11.0",
91
+ "@jetbrains/rollup-css-plugin": "./packages/rollup-css-plugin",
92
+ "@primer/octicons": "^19.12.0",
87
93
  "@rollup/plugin-babel": "^6.0.4",
88
94
  "@rollup/plugin-json": "^6.1.0",
89
95
  "@rollup/plugin-node-resolve": "^15.3.0",
90
96
  "@rollup/plugin-replace": "^6.0.1",
91
- "@storybook/addon-a11y": "8.3.3",
92
- "@storybook/addon-docs": "8.3.3",
93
- "@storybook/addon-essentials": "8.3.3",
94
- "@storybook/addon-themes": "^8.3.3",
95
- "@storybook/components": "8.3.3",
97
+ "@storybook/addon-a11y": "8.4.2",
98
+ "@storybook/addon-docs": "8.4.2",
99
+ "@storybook/addon-essentials": "8.4.2",
100
+ "@storybook/addon-themes": "^8.4.2",
101
+ "@storybook/components": "8.4.2",
96
102
  "@storybook/csf": "^0.1.11",
97
- "@storybook/manager-api": "8.3.3",
98
- "@storybook/preview-api": "8.3.3",
99
- "@storybook/react": "8.3.3",
100
- "@storybook/react-webpack5": "8.3.3",
103
+ "@storybook/manager-api": "8.4.2",
104
+ "@storybook/preview-api": "8.4.2",
105
+ "@storybook/react": "8.4.2",
106
+ "@storybook/react-webpack5": "8.4.2",
101
107
  "@storybook/test-runner": "^0.19.1",
102
- "@storybook/theming": "8.3.3",
108
+ "@storybook/theming": "8.4.2",
103
109
  "@testing-library/dom": "^10.4.0",
104
110
  "@testing-library/react": "^16.0.1",
105
111
  "@testing-library/user-event": "^14.5.2",
106
- "@types/chai": "^5.0.0",
112
+ "@types/chai": "^5.0.1",
107
113
  "@types/chai-as-promised": "^8.0.1",
108
114
  "@types/chai-dom": "0.0.10",
109
115
  "@types/chai-enzyme": "^0.6.13",
110
116
  "@types/enzyme": "^3.10.18",
117
+ "@types/eslint__js": "^8.42.3",
111
118
  "@types/markdown-it": "^14.1.2",
112
- "@types/react": "^18.3.9",
113
- "@types/react-dom": "^18.3.0",
119
+ "@types/react": "^18.3.12",
120
+ "@types/react-dom": "^18.3.1",
114
121
  "@types/sinon": "^17.0.3",
115
122
  "@types/sinon-chai": "^4.0.0",
116
123
  "@types/webpack-env": "^1.18.5",
117
- "@typescript-eslint/eslint-plugin": "^8.7.0",
118
- "@typescript-eslint/parser": "^8.7.0",
119
- "@vitejs/plugin-react": "^4.3.1",
124
+ "@vitejs/plugin-react": "^4.3.3",
125
+ "@vitest/eslint-plugin": "^1.1.6",
120
126
  "@wojtekmaj/enzyme-adapter-react-17": "^0.8.0",
121
- "acorn": "^8.12.1",
127
+ "acorn": "^8.14.0",
122
128
  "axe-playwright": "^2.0.3",
123
129
  "babel-plugin-require-context-hook": "^1.0.0",
124
- "caniuse-lite": "^1.0.30001664",
125
- "chai": "^5.1.1",
130
+ "caniuse-lite": "^1.0.30001678",
131
+ "chai": "^5.1.2",
126
132
  "chai-as-promised": "^8.0.0",
127
133
  "chai-dom": "^1.10.0",
128
134
  "chai-enzyme": "1.0.0-beta.1",
129
135
  "cheerio": "^1.0.0-rc.12",
130
- "core-js": "^3.38.1",
136
+ "core-js": "^3.39.0",
131
137
  "cpy-cli": "^5.0.0",
132
138
  "enzyme": "^3.11.0",
133
- "eslint": "^8.57.0",
139
+ "eslint": "^9.14.0",
140
+ "eslint-config-prettier": "^9.1.0",
141
+ "eslint-formatter-jslint-xml": "^8.40.0",
134
142
  "eslint-import-resolver-webpack": "^0.13.9",
135
- "eslint-plugin-bdd": "^2.1.1",
136
- "eslint-plugin-import": "^2.30.0",
137
- "eslint-plugin-jsx-a11y": "^6.10.0",
138
- "eslint-plugin-react": "^7.37.0",
139
- "eslint-plugin-react-hooks": "^4.6.2",
140
- "eslint-plugin-storybook": "^0.9.0",
143
+ "eslint-plugin-import": "^2.31.0",
144
+ "eslint-plugin-jsx-a11y": "^6.10.2",
145
+ "eslint-plugin-prettier": "^5.2.1",
146
+ "eslint-plugin-react": "^7.37.2",
147
+ "eslint-plugin-react-hooks": "^5.0.0",
148
+ "eslint-plugin-storybook": "^0.11.0",
141
149
  "events": "^3.3.0",
142
150
  "glob": "^11.0.0",
143
- "html-webpack-plugin": "^5.6.0",
151
+ "globals": "^15.12.0",
152
+ "html-webpack-plugin": "^5.6.3",
144
153
  "http-server": "^14.1.1",
145
154
  "husky": "^9.1.6",
146
155
  "identity-obj-proxy": "^3.0.0",
@@ -158,22 +167,22 @@
158
167
  "react-test-renderer": "^18.3.1",
159
168
  "regenerator-runtime": "^0.14.1",
160
169
  "rimraf": "^6.0.1",
161
- "rollup": "^4.22.4",
170
+ "rollup": "^4.24.4",
162
171
  "rollup-plugin-clear": "^2.0.7",
163
- "rollup-plugin-styles": "^4.0.0",
164
172
  "sinon": "^19.0.2",
165
173
  "sinon-chai": "^4.0.0",
166
174
  "storage-mock": "^2.1.0",
167
- "storybook": "8.3.3",
168
- "stylelint": "^16.9.0",
175
+ "storybook": "8.4.2",
176
+ "stylelint": "^16.10.0",
169
177
  "svg-inline-loader": "^0.8.2",
170
178
  "teamcity-service-messages": "^0.1.14",
171
179
  "terser-webpack-plugin": "^5.3.10",
172
- "typescript": "~5.6.2",
173
- "vitest": "^2.1.1",
180
+ "typescript": "~5.6.3",
181
+ "typescript-eslint": "^8.13.0",
182
+ "vitest": "^2.1.4",
174
183
  "vitest-teamcity-reporter": "^0.3.1",
175
184
  "wallaby-webpack": "^3.9.16",
176
- "webpack": "^5.95.0",
185
+ "webpack": "^5.96.1",
177
186
  "webpack-cli": "^5.1.4",
178
187
  "xmlappend": "^1.0.4"
179
188
  },
@@ -197,18 +206,18 @@
197
206
  }
198
207
  },
199
208
  "dependencies": {
200
- "@babel/core": "^7.25.2",
201
- "@babel/preset-typescript": "^7.24.7",
209
+ "@babel/core": "^7.26.0",
210
+ "@babel/preset-typescript": "^7.26.0",
202
211
  "@jetbrains/babel-preset-jetbrains": "^2.4.0",
203
- "@jetbrains/icons": "^4.4.0",
212
+ "@jetbrains/icons": "^4.8.0",
204
213
  "@jetbrains/postcss-require-hover": "^0.1.2",
205
214
  "@types/combokeys": "^2.4.9",
206
215
  "@types/element-resize-detector": "^1.1.6",
207
216
  "@types/react-virtualized": "9.21.30",
208
- "@types/util-deprecate": "^1.0.3",
217
+ "@types/util-deprecate": "^1.0.4",
209
218
  "babel-loader": "9.2.1",
210
219
  "babel-plugin-transform-define": "^2.1.4",
211
- "browserslist": "^4.24.0",
220
+ "browserslist": "^4.24.2",
212
221
  "change-case": "^4.1.1",
213
222
  "classnames": "^2.5.1",
214
223
  "combokeys": "^3.0.1",
@@ -230,7 +239,7 @@
230
239
  "postcss-font-family-system-ui": "^5.0.0",
231
240
  "postcss-loader": "^8.1.1",
232
241
  "postcss-modules-values-replace": "^4.2.0",
233
- "postcss-preset-env": "^10.0.5",
242
+ "postcss-preset-env": "^10.0.9",
234
243
  "react-movable": "^3.3.1",
235
244
  "react-virtualized": "^9.22.5",
236
245
  "react-waypoint": "^10.3.0",
package/postcss.config.js CHANGED
@@ -1,19 +1,18 @@
1
1
  const EMBRACED_STAGE = 3; // See https://cssdb.org/#staging-process
2
2
 
3
-
4
3
  module.exports = () => {
5
4
  const plugins = [
6
5
  require('postcss-modules-values-replace')(),
7
6
  require('postcss-preset-env')({
8
7
  stage: EMBRACED_STAGE,
9
8
  features: {
10
- 'nesting-rules': true
11
- }
9
+ 'nesting-rules': true,
10
+ },
12
11
  }),
13
12
  require('postcss-font-family-system-ui')({browsers: ['last 2 versions']}),
14
13
  require('postcss-flexbugs-fixes')(),
15
14
  require('@jetbrains/postcss-require-hover')(),
16
- require('postcss-calc')({mediaQueries: true})
15
+ require('postcss-calc')({mediaQueries: true}),
17
16
  ];
18
17
 
19
18
  return {plugins};
package/typings.d.ts CHANGED
@@ -32,12 +32,10 @@ declare module 'combokeys/test/lib/key-event' {
32
32
  keyCode: number,
33
33
  modifiers?: ('shift' | 'ctrl' | 'alt' | 'meta')[],
34
34
  element?: Element,
35
- repeat?: number
35
+ repeat?: number,
36
36
  ): void;
37
37
  }
38
38
 
39
39
  declare module 'scrollbar-width' {
40
- export default function getScrollbarWidth(
41
- recalculate?: boolean
42
- ): number | null;
40
+ export default function getScrollbarWidth(recalculate?: boolean): number | null;
43
41
  }
package/webpack.config.js CHANGED
@@ -14,8 +14,8 @@ function createConfig() {
14
14
  {
15
15
  loader: require.resolve('style-loader'),
16
16
  options: {
17
- esModule: false
18
- }
17
+ esModule: false,
18
+ },
19
19
  },
20
20
  {
21
21
  loader: require.resolve('css-loader'),
@@ -23,29 +23,24 @@ function createConfig() {
23
23
  modules: {
24
24
  namedExport: false,
25
25
  exportLocalsConvention: 'as-is',
26
- localIdentName: '[local]_[hash:4]'
26
+ localIdentName: '[local]_[hash:4]',
27
27
  },
28
- importLoaders: 1
29
- }
28
+ importLoaders: 1,
29
+ },
30
30
  },
31
31
  {
32
32
  loader: require.resolve('postcss-loader'),
33
33
  options: {
34
- implementation: require('postcss')
35
- }
36
- }
37
- ]
34
+ implementation: require('postcss'),
35
+ },
36
+ },
37
+ ],
38
38
  };
39
39
 
40
40
  const externalCssLoader = {
41
41
  test: /\.css$/,
42
- include: [
43
- path.dirname(require.resolve('highlight.js/package.json'))
44
- ],
45
- use: [
46
- require.resolve('style-loader'),
47
- require.resolve('css-loader')
48
- ]
42
+ include: [path.dirname(require.resolve('highlight.js/package.json'))],
43
+ use: [require.resolve('style-loader'), require.resolve('css-loader')],
49
44
  };
50
45
 
51
46
  const babelLoader = {
@@ -55,35 +50,35 @@ function createConfig() {
55
50
  loader: require.resolve('babel-loader'),
56
51
  options: {
57
52
  configFile: path.join(__dirname, 'babel.config.js'),
58
- cacheDirectory: true
59
- }
53
+ cacheDirectory: true,
54
+ },
60
55
  };
61
56
 
62
57
  const gifLoader = {
63
58
  test: /\.gif$/,
64
59
  include: componentsPath,
65
- loader: require.resolve('url-loader')
60
+ loader: require.resolve('url-loader'),
66
61
  };
67
62
 
68
63
  const loaders = {
69
64
  cssLoader,
70
65
  externalCssLoader,
71
66
  babelLoader,
72
- gifLoader
67
+ gifLoader,
73
68
  };
74
69
 
75
70
  return {
76
71
  // Minimal config for building components
77
72
  config: {
78
73
  module: {
79
- rules: loadersObjectToArray(loaders)
74
+ rules: loadersObjectToArray(loaders),
80
75
  },
81
76
  resolve: {
82
- extensions: ['.js', '.ts', '.tsx']
83
- }
77
+ extensions: ['.js', '.ts', '.tsx'],
78
+ },
84
79
  },
85
80
  componentsPath,
86
- loaders
81
+ loaders,
87
82
  };
88
83
  }
89
84
 
@@ -93,5 +88,5 @@ module.exports = {
93
88
  createConfig,
94
89
  config,
95
90
  componentsPath,
96
- loaders
91
+ loaders,
97
92
  };
@@ -1,42 +0,0 @@
1
- @import "../global/variables.css";
2
-
3
- .badge {
4
- display: inline-block;
5
-
6
- box-sizing: border-box;
7
- height: 20px;
8
- padding: 0 var(--ring-unit);
9
-
10
- cursor: default;
11
-
12
- vertical-align: baseline;
13
-
14
- color: var(--ring-secondary-color);
15
- border: 1px var(--ring-line-color) solid;
16
- border-radius: var(--ring-border-radius);
17
- background-color: var(--ring-content-background-color);
18
-
19
- font-size: var(--ring-font-size-smaller);
20
- font-weight: normal;
21
- font-style: normal;
22
- line-height: 17px;
23
-
24
- &.gray {
25
- color: var(--ring-text-color);
26
- background-color: var(--ring-tag-background-color);
27
- }
28
-
29
- &.valid {
30
- color: var(--ring-success-color);
31
- }
32
-
33
- &.invalid {
34
- color: var(--ring-error-color);
35
- }
36
-
37
- &.disabled {
38
- /* Deprecated: duplicates invalid */
39
-
40
- color: var(--ring-error-color);
41
- }
42
- }