@jetbrains/ring-ui 7.0.0-beta.8 → 7.0.0
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.
- package/babel.config.js +20 -14
- package/components/alert/alert.css +7 -7
- package/components/alert/alert.d.ts +2 -2
- package/components/alert/alert.js +10 -12
- package/components/alert/container.js +1 -1
- package/components/alert-service/alert-service.js +4 -2
- package/components/analytics/analytics__custom-plugin.js +1 -1
- package/components/auth/auth.js +1 -1
- package/components/auth/auth__core.js +36 -36
- package/components/auth/background-flow.js +2 -2
- package/components/auth/down-notification.js +3 -1
- package/components/auth/iframe-flow.js +4 -2
- package/components/auth/request-builder.js +5 -5
- package/components/auth/storage.js +10 -9
- package/components/auth/token-validator.js +8 -15
- package/components/auth-dialog/auth-dialog.js +8 -8
- package/components/auth-dialog-service/auth-dialog-service.js +4 -4
- package/components/avatar/avatar.js +9 -7
- package/components/avatar/fallback-avatar.js +15 -12
- package/components/button/button.css +36 -25
- package/components/button/button.js +9 -9
- package/components/button/button__classes.d.ts +1 -1
- package/components/button/button__classes.js +3 -4
- package/components/button-group/button-group.css +25 -13
- package/components/button-group/caption.js +1 -1
- package/components/button-toolbar/button-toolbar.d.ts +1 -1
- package/components/button-toolbar/button-toolbar.js +2 -2
- package/components/caret/caret.js +8 -8
- package/components/checkbox/checkbox.css +8 -5
- package/components/checkbox/checkbox.js +1 -1
- package/components/clipboard/clipboard-fallback.js +2 -6
- package/components/clipboard/clipboard.js +5 -5
- package/components/code/code.d.ts +1 -1
- package/components/code/code.js +2 -2
- package/components/code/highlight.css +3 -1
- package/components/collapse/collapse-content.d.ts +1 -2
- package/components/collapse/collapse-content.js +25 -14
- package/components/collapse/collapse-context.js +1 -1
- package/components/collapse/collapse-control.js +5 -3
- package/components/collapse/collapse.css +21 -20
- package/components/collapse/collapse.js +2 -2
- package/components/confirm/confirm.d.ts +2 -2
- package/components/confirm/confirm.js +2 -2
- package/components/confirm-service/confirm-service.d.ts +1 -1
- package/components/confirm-service/confirm-service.js +6 -6
- package/components/content-layout/content-layout.css +6 -5
- package/components/content-layout/content-layout.js +7 -6
- package/components/content-layout/sidebar.js +5 -5
- package/components/contenteditable/contenteditable.d.ts +1 -1
- package/components/contenteditable/contenteditable.js +3 -4
- package/components/control-label/control-label.js +5 -3
- package/components/data-list/data-list.css +3 -3
- package/components/data-list/data-list.d.ts +2 -2
- package/components/data-list/data-list.js +6 -7
- package/components/data-list/data-list.mock.js +57 -47
- package/components/data-list/item.js +14 -16
- package/components/data-list/selection.js +5 -7
- package/components/data-list/title.js +5 -6
- package/components/date-picker/consts.js +2 -2
- package/components/date-picker/date-input.js +4 -4
- package/components/date-picker/date-picker.css +23 -18
- package/components/date-picker/date-picker.d.ts +2 -1
- package/components/date-picker/date-picker.js +13 -19
- package/components/date-picker/date-popup.js +30 -36
- package/components/date-picker/day.js +6 -9
- package/components/date-picker/formats.js +647 -1
- package/components/date-picker/month-names.js +6 -8
- package/components/date-picker/month-slider.js +2 -2
- package/components/date-picker/month.js +1 -3
- package/components/date-picker/months.js +2 -6
- package/components/date-picker/weekdays.js +2 -3
- package/components/date-picker/years.js +3 -3
- package/components/dialog/dialog.d.ts +1 -0
- package/components/dialog/dialog.js +20 -13
- package/components/dialog/dialog__body-scroll-preventer.js +1 -1
- package/components/dropdown/dropdown.css +2 -4
- package/components/dropdown/dropdown.d.ts +2 -2
- package/components/dropdown/dropdown.js +5 -5
- package/components/dropdown-menu/dropdown-menu.js +5 -5
- package/components/editable-heading/editable-heading.css +5 -2
- package/components/editable-heading/editable-heading.js +21 -19
- package/components/error-bubble/error-bubble.js +1 -1
- package/components/error-message/error-message.js +2 -4
- package/components/footer/footer.js +11 -15
- package/components/form/form.stories.js +45 -63
- package/components/global/create-stateful-context.js +2 -4
- package/components/global/data-tests.js +5 -6
- package/components/global/dom.js +8 -11
- package/components/global/focus-sensor-hoc.js +5 -6
- package/components/global/fuzzy-highlight.js +1 -1
- package/components/global/get-event-key.js +2 -2
- package/components/global/global.css +0 -3
- package/components/global/linear-function.js +1 -1
- package/components/global/normalize-indent.js +2 -6
- package/components/global/react-dom-renderer.js +2 -3
- package/components/global/theme.d.ts +4 -2
- package/components/global/theme.js +14 -12
- package/components/global/url.js +8 -8
- package/components/global/variables.css +1 -8
- package/components/global/variables_dark.css +0 -1
- package/components/grid/col.js +6 -6
- package/components/grid/grid.css +174 -173
- package/components/grid/grid.js +1 -1
- package/components/grid/row.js +13 -6
- package/components/group/group.js +1 -1
- package/components/header/header-icon.js +2 -2
- package/components/header/header.css +19 -15
- package/components/header/header.js +3 -5
- package/components/header/links.js +1 -1
- package/components/header/logo.js +1 -1
- package/components/header/profile.d.ts +2 -2
- package/components/header/profile.js +9 -9
- package/components/header/services-link.js +1 -1
- package/components/header/services.js +4 -5
- package/components/header/smart-profile.js +4 -3
- package/components/header/smart-services.js +9 -5
- package/components/header/tray.js +1 -1
- package/components/heading/heading.css +0 -1
- package/components/heading/heading.js +2 -2
- package/components/http/http.d.ts +3 -3
- package/components/http/http.js +25 -29
- package/components/http/http.mock.js +9 -6
- package/components/hub-source/hub-source.js +5 -7
- package/components/hub-source/hub-source__user.js +1 -1
- package/components/hub-source/hub-source__users-groups.js +6 -7
- package/components/i18n/README.md +3 -4
- package/components/i18n/i18n-context.js +2 -4
- package/components/icon/icon.css +1 -1
- package/components/icon/icon.js +7 -9
- package/components/icon/icon__svg.js +6 -6
- package/components/input/input.css +1 -1
- package/components/input/input.js +11 -14
- package/components/input-size/input-size.stories.js +42 -22
- package/components/island/adaptive-island-hoc.js +1 -1
- package/components/island/content.js +4 -6
- package/components/island/header.js +8 -10
- package/components/island/island.css +5 -5
- package/components/island/island.js +1 -1
- package/components/link/clickableLink.js +3 -1
- package/components/link/link.js +5 -3
- package/components/list/consts.js +1 -1
- package/components/list/list.d.ts +1 -1
- package/components/list/list.js +35 -57
- package/components/list/list__custom.js +3 -5
- package/components/list/list__hint.js +3 -1
- package/components/list/list__item.js +11 -9
- package/components/list/list__link.js +1 -1
- package/components/list/list__separator.js +2 -2
- package/components/list/list__title.js +7 -3
- package/components/list/list__users-groups-source.js +6 -8
- package/components/loader/loader.js +1 -1
- package/components/loader/loader__core.js +5 -5
- package/components/loader-inline/loader-inline.css +0 -3
- package/components/loader-inline/loader-inline.js +5 -7
- package/components/loader-screen/loader-screen.js +1 -1
- package/components/login-dialog/login-dialog.js +4 -4
- package/components/login-dialog/service.js +5 -5
- package/components/markdown/markdown.css +6 -6
- package/components/markdown/markdown.d.ts +2 -2
- package/components/markdown/markdown.js +4 -6
- package/components/message/message.css +2 -1
- package/components/message/message.js +30 -21
- package/components/old-browsers-message/old-browsers-message.js +2 -2
- package/components/old-browsers-message/white-list.js +2 -3
- package/components/pager/pager.js +28 -29
- package/components/permissions/permissions.js +8 -13
- package/components/permissions/permissions__cache.js +6 -7
- package/components/popup/popup.consts.js +8 -2
- package/components/popup/popup.js +27 -33
- package/components/popup/popup.target.js +4 -4
- package/components/popup/position.js +21 -28
- package/components/popup-menu/popup-menu.js +1 -1
- package/components/progress-bar/progress-bar.css +10 -8
- package/components/progress-bar/progress-bar.d.ts +2 -2
- package/components/progress-bar/progress-bar.js +2 -2
- package/components/query-assist/query-assist.css +0 -3
- package/components/query-assist/query-assist.js +73 -84
- package/components/query-assist/query-assist__suggestions.js +10 -9
- package/components/radio/radio.css +6 -2
- package/components/radio/radio.js +1 -3
- package/components/scrollable-section/scrollable-section.css +5 -6
- package/components/scrollable-section/scrollable-section.js +1 -1
- package/components/select/select.css +5 -7
- package/components/select/select.d.ts +1 -1
- package/components/select/select.js +96 -110
- package/components/select/select__filter.js +1 -1
- package/components/select/select__popup.js +40 -51
- package/components/shortcuts/core.js +8 -6
- package/components/shortcuts/shortcut-title.js +6 -6
- package/components/shortcuts/shortcuts.js +1 -1
- package/components/sidebar/sidebar.css +3 -1
- package/components/slider/slider.css +14 -14
- package/components/slider/slider.js +7 -7
- package/components/tab-trap/tab-trap.js +7 -9
- package/components/table/cell.js +3 -1
- package/components/table/disable-hover-hoc.js +2 -2
- package/components/table/header-cell.js +5 -3
- package/components/table/header.d.ts +2 -10
- package/components/table/header.js +10 -12
- package/components/table/multitable.js +5 -3
- package/components/table/row.d.ts +0 -1
- package/components/table/row.js +20 -27
- package/components/table/selection-adapter.js +1 -1
- package/components/table/selection-shortcuts-hoc.js +2 -2
- package/components/table/selection.d.ts +2 -3
- package/components/table/selection.js +4 -5
- package/components/table/simple-table.js +4 -4
- package/components/table/smart-table.js +5 -5
- package/components/table/table.css +8 -9
- package/components/table/table.d.ts +0 -1
- package/components/table/table.js +22 -23
- package/components/table/table.stories.json +45 -16
- package/components/tabs/collapsible-more.d.ts +1 -1
- package/components/tabs/collapsible-more.js +13 -16
- package/components/tabs/collapsible-tab.js +2 -2
- package/components/tabs/collapsible-tabs.d.ts +2 -2
- package/components/tabs/collapsible-tabs.js +13 -22
- package/components/tabs/dumb-tabs.js +6 -9
- package/components/tabs/smart-tabs.js +4 -4
- package/components/tabs/tab-link.js +1 -3
- package/components/tabs/tabs.css +7 -9
- package/components/tag/tag.css +7 -7
- package/components/tag/tag.d.ts +1 -1
- package/components/tag/tag.js +9 -12
- package/components/tags-input/tags-input.js +15 -19
- package/components/tags-list/tags-list.d.ts +2 -2
- package/components/tags-list/tags-list.js +6 -5
- package/components/text/text.js +5 -3
- package/components/toggle/toggle.css +12 -10
- package/components/toggle/toggle.d.ts +2 -2
- package/components/toggle/toggle.js +4 -3
- package/components/tooltip/tooltip.d.ts +4 -1
- package/components/tooltip/tooltip.js +19 -10
- package/components/user-agreement/service.js +15 -13
- package/components/user-agreement/user-agreement.js +3 -5
- package/components/user-card/card.js +10 -9
- package/components/user-card/smart-user-card-tooltip.js +5 -7
- package/components/user-card/tooltip.js +4 -4
- package/components/user-card/user-card.css +4 -0
- package/jslint-xml.js +20 -19
- package/package.json +66 -58
- package/postcss.config.js +3 -4
- package/typings.d.ts +2 -4
- package/webpack.config.js +20 -25
- package/components/badge/badge.css +0 -42
- package/components/badge/badge.d.ts +0 -14
- package/components/badge/badge.js +0 -29
- package/components/island-legacy/content-legacy.d.ts +0 -5
- package/components/island-legacy/content-legacy.js +0 -12
- package/components/island-legacy/header-legacy.d.ts +0 -5
- package/components/island-legacy/header-legacy.js +0 -14
- package/components/island-legacy/island-legacy.css +0 -98
- package/components/island-legacy/island-legacy.d.ts +0 -7
- package/components/island-legacy/island-legacy.js +0 -14
- package/components/table-legacy/table-legacy.css +0 -346
- package/components/table-legacy/table-legacy__toolbar.css +0 -25
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { Component, createContext } from 'react';
|
|
2
1
|
import * as React from 'react';
|
|
2
|
+
import { Component, createContext } from 'react';
|
|
3
3
|
import classNames from 'classnames';
|
|
4
4
|
import Popup from '../popup/popup';
|
|
5
5
|
import { Listeners } from '../global/dom';
|
|
6
6
|
import dataTests from '../global/data-tests';
|
|
7
7
|
import scheduleRAF from '../global/schedule-raf';
|
|
8
|
+
import Theme, { ThemeProvider } from '../global/theme';
|
|
8
9
|
import styles from './tooltip.css';
|
|
9
10
|
const scheduleScroll = scheduleRAF();
|
|
10
11
|
const TooltipContext = createContext(undefined);
|
|
@@ -15,11 +16,12 @@ export default class Tooltip extends Component {
|
|
|
15
16
|
static defaultProps = {
|
|
16
17
|
title: '',
|
|
17
18
|
selfOverflowOnly: false,
|
|
18
|
-
|
|
19
|
+
theme: Theme.DARK,
|
|
20
|
+
popupProps: {},
|
|
19
21
|
};
|
|
20
22
|
state = {
|
|
21
23
|
showPopup: false,
|
|
22
|
-
showNestedPopup: false
|
|
24
|
+
showNestedPopup: false,
|
|
23
25
|
};
|
|
24
26
|
componentDidMount() {
|
|
25
27
|
if (this.props.title) {
|
|
@@ -87,8 +89,13 @@ export default class Tooltip extends Component {
|
|
|
87
89
|
};
|
|
88
90
|
addListeners() {
|
|
89
91
|
if (this.containerNode != null) {
|
|
90
|
-
this.listeners.add(this.containerNode, '
|
|
91
|
-
this.listeners.add(this.containerNode, '
|
|
92
|
+
this.listeners.add(this.containerNode, 'mouseenter', this.tryToShowPopup);
|
|
93
|
+
this.listeners.add(this.containerNode, 'mouseleave', ev => {
|
|
94
|
+
if (ev.relatedTarget && this.popup?.container?.contains(ev.relatedTarget)) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
this.hidePopup();
|
|
98
|
+
});
|
|
92
99
|
}
|
|
93
100
|
this.listeners.add(document, 'scroll', () => scheduleScroll(this.hidePopup), { passive: true });
|
|
94
101
|
}
|
|
@@ -103,15 +110,17 @@ export default class Tooltip extends Component {
|
|
|
103
110
|
this.setState({ showNestedPopup: false });
|
|
104
111
|
};
|
|
105
112
|
render() {
|
|
106
|
-
const { children, 'data-test': dataTest, title, delay, selfOverflowOnly, popupProps, long, ...restProps } = this.props;
|
|
107
|
-
const ariaProps = typeof title === 'string' && !!title
|
|
108
|
-
? { 'aria-label': title, role: 'tooltip' }
|
|
109
|
-
: {};
|
|
113
|
+
const { children, 'data-test': dataTest, title, delay, theme, selfOverflowOnly, popupProps, long, ...restProps } = this.props;
|
|
114
|
+
const ariaProps = typeof title === 'string' && !!title ? { 'aria-label': title, role: 'tooltip' } : {};
|
|
110
115
|
const { onNestedTooltipShow, onNestedTooltipHide } = this;
|
|
111
116
|
return (<TooltipContext.Provider value={{ onNestedTooltipShow, onNestedTooltipHide }}>
|
|
112
117
|
<span {...ariaProps} {...restProps} ref={this.containerRef} data-test={dataTests('ring-tooltip', dataTest)} data-test-title={typeof title === 'string' ? title : undefined}>
|
|
113
118
|
{children}
|
|
114
|
-
<
|
|
119
|
+
<ThemeProvider theme={theme} passToPopups WrapperComponent={props => <span {...props}/>}>
|
|
120
|
+
<Popup trapFocus={false} anchorElement={this.containerNode} hidden={!this.state.showPopup || this.state.showNestedPopup} onCloseAttempt={this.hidePopup} maxHeight={400} className={classNames(styles.tooltip, { [styles.long]: long })} attached={false} onMouseOut={this.hidePopup} top={4} dontCloseOnAnchorClick ref={this.popupRef} {...popupProps}>
|
|
121
|
+
{title}
|
|
122
|
+
</Popup>
|
|
123
|
+
</ThemeProvider>
|
|
115
124
|
</span>
|
|
116
125
|
</TooltipContext.Provider>);
|
|
117
126
|
}
|
|
@@ -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 } =
|
|
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">
|
|
140
|
-
|
|
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,
|
|
184
|
+
preview,
|
|
185
|
+
...restOptions,
|
|
184
186
|
};
|
|
185
|
-
this.reactRoot.render(
|
|
186
|
-
|
|
187
|
-
|
|
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
|
|
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
|
-
|
|
40
|
-
|
|
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
|
-
|
|
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
|
-
|
|
53
|
-
|
|
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 = () =>
|
|
27
|
-
|
|
28
|
-
|
|
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 &&
|
|
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>
|
package/jslint-xml.js
CHANGED
|
@@ -1,33 +1,34 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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 '<';
|
|
7
|
+
case '>':
|
|
8
|
+
return '>';
|
|
9
|
+
case '&':
|
|
10
|
+
return '&';
|
|
11
|
+
case '"':
|
|
12
|
+
return '"';
|
|
13
|
+
case "'":
|
|
14
|
+
return ''';
|
|
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
|
|
3
|
+
"version": "7.0.0",
|
|
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 .
|
|
59
|
-
"stylelint": "stylelint --ignore-path .
|
|
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.
|
|
80
|
-
"@babel/eslint-parser": "^7.25.
|
|
81
|
-
"@
|
|
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
|
-
"@
|
|
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
|
-
"@
|
|
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
|
-
"@rollup/plugin-node-resolve": "^15.
|
|
90
|
-
"@rollup/plugin-replace": "^
|
|
91
|
-
"@storybook/addon-a11y": "8.
|
|
92
|
-
"@storybook/addon-docs": "8.
|
|
93
|
-
"@storybook/addon-essentials": "8.
|
|
94
|
-
"@storybook/addon-themes": "^8.
|
|
95
|
-
"@storybook/components": "8.
|
|
95
|
+
"@rollup/plugin-node-resolve": "^15.3.0",
|
|
96
|
+
"@rollup/plugin-replace": "^6.0.1",
|
|
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.
|
|
98
|
-
"@storybook/preview-api": "8.
|
|
99
|
-
"@storybook/react": "8.
|
|
100
|
-
"@storybook/react-webpack5": "8.
|
|
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.
|
|
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": "^
|
|
107
|
-
"@types/chai-as-promised": "^8.0.
|
|
112
|
+
"@types/chai": "^5.0.1",
|
|
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.
|
|
113
|
-
"@types/react-dom": "^18.3.
|
|
119
|
+
"@types/react": "^18.3.12",
|
|
120
|
+
"@types/react-dom": "^18.3.1",
|
|
114
121
|
"@types/sinon": "^17.0.3",
|
|
115
|
-
"@types/sinon-chai": "^
|
|
122
|
+
"@types/sinon-chai": "^4.0.0",
|
|
116
123
|
"@types/webpack-env": "^1.18.5",
|
|
117
|
-
"@
|
|
118
|
-
"@
|
|
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.
|
|
122
|
-
"axe-playwright": "^2.0.
|
|
127
|
+
"acorn": "^8.14.0",
|
|
128
|
+
"axe-playwright": "^2.0.3",
|
|
123
129
|
"babel-plugin-require-context-hook": "^1.0.0",
|
|
124
|
-
"caniuse-lite": "^1.0.
|
|
125
|
-
"chai": "^5.1.
|
|
130
|
+
"caniuse-lite": "^1.0.30001677",
|
|
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.
|
|
136
|
+
"core-js": "^3.39.0",
|
|
131
137
|
"cpy-cli": "^5.0.0",
|
|
132
138
|
"enzyme": "^3.11.0",
|
|
133
|
-
"eslint": "^
|
|
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-
|
|
136
|
-
"eslint-plugin-
|
|
137
|
-
"eslint-plugin-
|
|
138
|
-
"eslint-plugin-react": "^7.
|
|
139
|
-
"eslint-plugin-react-hooks": "^
|
|
140
|
-
"eslint-plugin-storybook": "^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
|
-
"
|
|
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.
|
|
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.
|
|
168
|
-
"stylelint": "^16.
|
|
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.
|
|
173
|
-
"
|
|
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.
|
|
185
|
+
"webpack": "^5.96.1",
|
|
177
186
|
"webpack-cli": "^5.1.4",
|
|
178
187
|
"xmlappend": "^1.0.4"
|
|
179
188
|
},
|
|
@@ -197,25 +206,24 @@
|
|
|
197
206
|
}
|
|
198
207
|
},
|
|
199
208
|
"dependencies": {
|
|
200
|
-
"@babel/core": "^7.
|
|
201
|
-
"@babel/preset-typescript": "^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.
|
|
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.
|
|
209
|
-
"
|
|
210
|
-
"babel-loader": "9.1.3",
|
|
217
|
+
"@types/util-deprecate": "^1.0.4",
|
|
218
|
+
"babel-loader": "9.2.1",
|
|
211
219
|
"babel-plugin-transform-define": "^2.1.4",
|
|
212
|
-
"browserslist": "^4.
|
|
220
|
+
"browserslist": "^4.24.2",
|
|
213
221
|
"change-case": "^4.1.1",
|
|
214
222
|
"classnames": "^2.5.1",
|
|
215
223
|
"combokeys": "^3.0.1",
|
|
216
224
|
"css-loader": "^7.1.2",
|
|
217
225
|
"csstype": "^3.1.3",
|
|
218
|
-
"date-fns": "^4.
|
|
226
|
+
"date-fns": "^4.1.0",
|
|
219
227
|
"dequal": "^2.0.3",
|
|
220
228
|
"element-resize-detector": "^1.2.4",
|
|
221
229
|
"es6-error": "^4.1.1",
|
|
@@ -231,7 +239,7 @@
|
|
|
231
239
|
"postcss-font-family-system-ui": "^5.0.0",
|
|
232
240
|
"postcss-loader": "^8.1.1",
|
|
233
241
|
"postcss-modules-values-replace": "^4.2.0",
|
|
234
|
-
"postcss-preset-env": "^10.0.
|
|
242
|
+
"postcss-preset-env": "^10.0.9",
|
|
235
243
|
"react-movable": "^3.3.1",
|
|
236
244
|
"react-virtualized": "^9.22.5",
|
|
237
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
|
}
|