@jetbrains/ring-ui 4.1.0-beta.3 → 4.1.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.
- package/CHANGELOG.md +13 -0
- package/README.md +17 -15
- package/babel.config.js +3 -2
- package/components/alert/alert.js +9 -3
- package/components/alert/alert.test.js +21 -48
- package/components/alert/container.css +1 -1
- package/components/alert/container.test.js +3 -13
- package/components/alert-service/alert-service.examples.css +18 -0
- package/components/alert-service/alert-service.examples.js +21 -0
- package/components/alert-service/alert-service.js +10 -3
- package/components/analytics/analytics__fus-plugin.js +3 -3
- package/components/analytics/analytics__ga-plugin.js +2 -2
- package/components/auth/auth.test.js +14 -7
- package/components/auth/auth__core.js +64 -33
- package/components/auth-dialog/auth-dialog.css +2 -3
- package/components/auth-dialog/auth-dialog.js +4 -1
- package/components/auth-dialog/auth-dialog.test.js +3 -19
- package/components/avatar/avatar.css +4 -1
- package/components/avatar/avatar.examples.js +3 -2
- package/components/avatar/avatar.js +34 -6
- package/components/avatar/avatar.test.js +20 -17
- package/components/avatar/fallback-avatar.js +136 -0
- package/components/avatar-editor-ng/avatar-editor-ng.css +2 -2
- package/components/avatar-editor-ng/avatar-editor-ng.js +2 -1
- package/components/avatar-editor-ng/{avatar-editor-ng.html → avatar-editor-ng__template.js} +2 -2
- package/components/badge/badge.test.js +13 -20
- package/components/button/button.css +2 -2
- package/components/button/button.js +4 -1
- package/components/button/button.test.js +32 -33
- package/components/button-group/button-group.js +1 -1
- package/components/button-group/caption.js +1 -1
- package/components/button-ng/button-ng.js +1 -1
- package/components/button-set-ng/button-set-ng.js +3 -1
- package/components/checkbox/checkbox.css +1 -1
- package/components/code/code.js +2 -5
- package/components/confirm/confirm.js +1 -0
- package/components/confirm-service/confirm-service.js +5 -5
- package/components/content-layout/content-layout.css +1 -1
- package/components/data-list/data-list.css +1 -1
- package/components/date-picker/date-input.js +5 -4
- package/components/date-picker/date-picker.css +34 -22
- package/components/date-picker/date-picker.js +16 -14
- package/components/date-picker/date-popup.js +22 -7
- package/components/date-picker/month-names.js +8 -5
- package/components/date-picker/month.js +6 -2
- package/components/date-picker/weekdays.js +10 -2
- package/components/dialog/dialog.examples.js +3 -1
- package/components/dialog/dialog.js +10 -5
- package/components/dialog/dialog.test.js +1 -1
- package/components/dialog/dialog__body-scroll-preventer.js +51 -31
- package/components/dialog-ng/dialog-ng.js +10 -10
- package/components/dialog-ng/{dialog-ng.html → dialog-ng__template.js} +2 -2
- package/components/dropdown/dropdown.examples.js +36 -1
- package/components/dropdown/dropdown.test.js +2 -2
- package/components/dropdown-menu/dropdown-menu.examples.js +47 -0
- package/components/dropdown-menu/dropdown-menu.js +117 -0
- package/components/dropdown-menu/dropdown-menu.test.js +76 -0
- package/components/error-bubble/error-bubble-legacy.css +1 -1
- package/components/error-bubble/error-bubble.css +1 -1
- package/components/error-bubble/error-bubble.examples.js +1 -1
- package/components/error-page/error-page.css +2 -2
- package/components/footer-ng/footer-ng.js +13 -3
- package/components/form/form.css +2 -2
- package/components/form-ng/form-ng.js +3 -1
- package/components/global/global.css +1 -1
- package/components/global/theme.js +1 -1
- package/components/global/variables.css +8 -1
- package/components/grid/grid.css +10 -9
- package/components/header/header.css +1 -1
- package/components/header/header.examples.js +7 -8
- package/components/header/profile.js +10 -11
- package/components/http/http.js +1 -1
- package/components/icon/icon.css +5 -4
- package/components/input/input-legacy.css +7 -7
- package/components/island/header.js +2 -2
- package/components/island/island.css +8 -3
- package/components/island-legacy/island-legacy.css +3 -1
- package/components/list/list.js +6 -1
- package/components/list/list__custom.js +9 -3
- package/components/list/list__item.js +8 -2
- package/components/list/list__link.js +2 -1
- package/components/loader-inline/loader-inline.css +1 -1
- package/components/loader-screen/loader-screen.css +1 -1
- package/components/message/message.css +1 -1
- package/components/message/message.examples.js +8 -7
- package/components/pager/pager.js +5 -3
- package/components/permissions/permissions.js +1 -1
- package/components/popup/popup.js +1 -1
- package/components/popup/popup.test.js +15 -13
- package/components/progress-bar/progress-bar.css +1 -1
- package/components/progress-bar/progress-bar.examples.js +3 -3
- package/components/progress-bar/progress-bar.js +5 -2
- package/components/progress-bar/progress-bar.test.js +12 -13
- package/components/progress-bar-ng/progress-bar-ng.examples.js +3 -3
- package/components/query-assist/query-assist.css +13 -3
- package/components/query-assist/query-assist.examples.js +3 -4
- package/components/query-assist/query-assist.js +56 -12
- package/components/query-assist/query-assist.test.js +37 -5
- package/components/save-field-ng/save-field-ng.css +0 -3
- package/components/save-field-ng/save-field-ng.js +3 -1
- package/components/save-field-ng/{save-field-ng.html → save-field-ng__template.js} +2 -2
- package/components/select/select.css +12 -7
- package/components/select/select.examples.js +13 -0
- package/components/select/select.js +30 -43
- package/components/select/select.test.js +4 -5
- package/components/select/select__popup.js +1 -0
- package/components/shortcuts-hint-ng/shortcuts-hint-ng.css +1 -1
- package/components/shortcuts-hint-ng/shortcuts-hint-ng.js +1 -1
- package/components/shortcuts-hint-ng/{shortcuts-hint-ng.html → shortcuts-hint-ng__template.js} +2 -2
- package/components/sidebar/sidebar.css +1 -0
- package/components/sidebar-ng/sidebar-ng.js +6 -2
- package/components/sidebar-ng/{sidebar-ng__button.html → sidebar-ng__button-template.js} +2 -2
- package/components/sidebar-ng/{sidebar-ng.html → sidebar-ng__template.js} +2 -2
- package/components/table/header.js +9 -1
- package/components/table/row.js +2 -1
- package/components/table/table.css +2 -1
- package/components/table-legacy/table-legacy.css +2 -2
- package/components/table-legacy/table-legacy__toolbar.css +2 -2
- package/components/table-legacy-ng/table-legacy-ng.js +38 -5
- package/components/table-legacy-ng/table-legacy-ng__pager.js +7 -1
- package/components/tabs/collapsible-tab.js +2 -2
- package/components/tabs/collapsible-tabs.js +5 -9
- package/components/tabs/tab-link.js +4 -2
- package/components/tabs/tabs.css +32 -5
- package/components/tabs-ng/tabs-ng.js +4 -2
- package/components/tabs-ng/{tabs-ng.html → tabs-ng__template.js} +6 -2
- package/components/tag/tag.css +5 -2
- package/components/tag/tag.examples.js +3 -0
- package/components/tag/tag.js +19 -16
- package/components/tags-input/tag-input.examples.js +1 -1
- package/components/tags-input/tags-input.js +5 -2
- package/components/template-ng/template-ng.js +1 -1
- package/components/tooltip/tooltip.js +7 -2
- package/components/user-agreement/user-agreement.css +1 -5
- package/components/user-agreement/user-agreement.examples.js +7 -6
- package/components/user-agreement/user-agreement.js +11 -3
- package/package.json +85 -83
- package/webpack.config.js +14 -10
- package/components/button-set-ng/button-set-ng.html +0 -1
- package/components/footer-ng/footer-ng.html +0 -13
- package/components/form-ng/form-ng__error-bubble.html +0 -3
- package/components/table-legacy-ng/table-legacy-ng.html +0 -4
- package/components/table-legacy-ng/table-legacy-ng__column.html +0 -12
- package/components/table-legacy-ng/table-legacy-ng__header.html +0 -4
- package/components/table-legacy-ng/table-legacy-ng__pager.html +0 -7
- package/components/table-legacy-ng/table-legacy-ng__row.html +0 -12
- package/components/table-legacy-ng/table-legacy-ng__title.html +0 -9
- package/dist/_helpers/_rollupPluginBabelHelpers.js +0 -123
- package/dist/_helpers/background-flow.js +0 -232
- package/dist/_helpers/badge.js +0 -3
- package/dist/_helpers/button.js +0 -145
- package/dist/_helpers/clickableLink.js +0 -65
- package/dist/_helpers/data-tests.js +0 -15
- package/dist/_helpers/disable-hover-hoc.js +0 -407
- package/dist/_helpers/dom.js +0 -101
- package/dist/_helpers/get-uid.js +0 -15
- package/dist/_helpers/linear-function.js +0 -17
- package/dist/_helpers/list.js +0 -1327
- package/dist/_helpers/logo.js +0 -36
- package/dist/_helpers/memoize.js +0 -17
- package/dist/_helpers/popup.js +0 -691
- package/dist/_helpers/popup.target.js +0 -27
- package/dist/_helpers/rerender-hoc.js +0 -49
- package/dist/_helpers/schedule-raf.js +0 -31
- package/dist/_helpers/sniffer.js +0 -6
- package/dist/_helpers/theme.js +0 -40
- package/dist/_helpers/url.js +0 -125
- package/dist/alert-service.js +0 -149
- package/dist/alert.js +0 -284
- package/dist/analytics.js +0 -116
- package/dist/auth-dialog-service.js +0 -56
- package/dist/auth-dialog.js +0 -122
- package/dist/auth.js +0 -1744
- package/dist/avatar.js +0 -152
- package/dist/badge.js +0 -52
- package/dist/button-group.js +0 -48
- package/dist/button-set.js +0 -27
- package/dist/button-toolbar.js +0 -30
- package/dist/button.js +0 -12
- package/dist/caret.js +0 -262
- package/dist/checkbox.js +0 -108
- package/dist/confirm-service.js +0 -102
- package/dist/confirm.js +0 -113
- package/dist/content-layout.js +0 -184
- package/dist/contenteditable.js +0 -81
- package/dist/data-list.js +0 -466
- package/dist/date-picker.js +0 -1398
- package/dist/dialog.js +0 -223
- package/dist/dropdown.js +0 -250
- package/dist/error-bubble.js +0 -56
- package/dist/error-message.js +0 -53
- package/dist/footer.js +0 -124
- package/dist/grid.js +0 -148
- package/dist/group.js +0 -34
- package/dist/header.js +0 -658
- package/dist/heading.js +0 -76
- package/dist/http.js +0 -207
- package/dist/hub-source.js +0 -130
- package/dist/icon.js +0 -211
- package/dist/input.js +0 -228
- package/dist/island.js +0 -314
- package/dist/link.js +0 -117
- package/dist/list.js +0 -29
- package/dist/loader-inline.js +0 -165
- package/dist/loader-screen.js +0 -45
- package/dist/loader.js +0 -338
- package/dist/login-dialog.js +0 -173
- package/dist/logo.js +0 -8
- package/dist/message.js +0 -226
- package/dist/old-browsers-message.js +0 -129
- package/dist/pager.js +0 -325
- package/dist/panel.js +0 -34
- package/dist/permissions.js +0 -466
- package/dist/popup-menu.js +0 -93
- package/dist/popup.js +0 -16
- package/dist/progress-bar.js +0 -111
- package/dist/proxy-attrs.js +0 -19
- package/dist/query-assist.js +0 -1081
- package/dist/radio.js +0 -112
- package/dist/select.js +0 -1920
- package/dist/selection.js +0 -213
- package/dist/shortcuts.js +0 -307
- package/dist/storage.js +0 -373
- package/dist/style.css +0 -1
- package/dist/tab-trap.js +0 -174
- package/dist/table.js +0 -903
- package/dist/tabs.js +0 -721
- package/dist/tag.js +0 -187
- package/dist/tags-input.js +0 -440
- package/dist/tags-list.js +0 -91
- package/dist/text.js +0 -38
- package/dist/toggle.js +0 -80
- package/dist/tooltip.js +0 -202
- package/dist/user-card.js +0 -218
|
@@ -5,7 +5,7 @@ const Theme = {
|
|
|
5
5
|
DARK: 'dark'
|
|
6
6
|
};
|
|
7
7
|
|
|
8
|
-
export const ThemeContext = createContext();
|
|
8
|
+
export const ThemeContext = createContext(null);
|
|
9
9
|
|
|
10
10
|
const getDisplayName = Component => (typeof Component === 'string' ? Component : (Component.name ?? Component.displayName ?? 'Component'));
|
|
11
11
|
|
|
@@ -87,7 +87,14 @@
|
|
|
87
87
|
--ring-ease: 0.3s ease-out;
|
|
88
88
|
--ring-fast-ease: 0.15s ease-out;
|
|
89
89
|
--ring-font-family: system-ui, Arial, sans-serif;
|
|
90
|
-
--ring-font-family-monospace:
|
|
90
|
+
--ring-font-family-monospace:
|
|
91
|
+
Menlo,
|
|
92
|
+
"Bitstream Vera Sans Mono",
|
|
93
|
+
"Ubuntu Mono",
|
|
94
|
+
Consolas,
|
|
95
|
+
"Courier New",
|
|
96
|
+
Courier,
|
|
97
|
+
monospace;
|
|
91
98
|
|
|
92
99
|
/* Common z-index-values */
|
|
93
100
|
|
package/components/grid/grid.css
CHANGED
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
@import "../global/variables.css";
|
|
2
2
|
|
|
3
|
-
@value unit, breakpoint-small, breakpoint-middle, breakpoint-large
|
|
3
|
+
@value unit, breakpoint-small, breakpoint-middle, breakpoint-large from "../global/global.css";
|
|
4
|
+
@value large-screen-media, middle-screen-media, small-screen-media from "../global/global.css";
|
|
4
5
|
@value gutterWidth: (unit*2);
|
|
5
6
|
@value gutterCompensation: calc(gutterWidth / -2);
|
|
6
7
|
@value outerMargin: calc(unit*2);
|
|
7
8
|
@value containerSmall: calc(breakpoint-small + gutterWidth);
|
|
8
9
|
@value containerMedium: calc(breakpoint-middle + gutterWidth);
|
|
9
10
|
@value containerLarge: calc(breakpoint-large + gutterWidth);
|
|
10
|
-
@value width-1: 8.
|
|
11
|
-
@value width-2: 16.
|
|
11
|
+
@value width-1: 8.3333%;
|
|
12
|
+
@value width-2: 16.6667%;
|
|
12
13
|
@value width-3: 25%;
|
|
13
|
-
@value width-4: 33.
|
|
14
|
-
@value width-5: 41.
|
|
14
|
+
@value width-4: 33.3333%;
|
|
15
|
+
@value width-5: 41.6667%;
|
|
15
16
|
@value width-6: 50%;
|
|
16
|
-
@value width-7: 58.
|
|
17
|
-
@value width-8: 66.
|
|
17
|
+
@value width-7: 58.3333%;
|
|
18
|
+
@value width-8: 66.6667%;
|
|
18
19
|
@value width-9: 75%;
|
|
19
|
-
@value width-10: 83.
|
|
20
|
-
@value width-11: 91.
|
|
20
|
+
@value width-10: 83.3333%;
|
|
21
|
+
@value width-11: 91.6667%;
|
|
21
22
|
@value width-12: 100%;
|
|
22
23
|
|
|
23
24
|
.container-fluid,
|
|
@@ -13,8 +13,7 @@ import hubConfig from '../../.storybook/hub-config';
|
|
|
13
13
|
import Link from '@jetbrains/ring-ui/components/link/link';
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
import
|
|
17
|
-
import Dropdown from '@jetbrains/ring-ui/components/dropdown/dropdown';
|
|
16
|
+
import DropdownMenu from '@jetbrains/ring-ui/components/dropdown-menu/dropdown-menu';
|
|
18
17
|
import showAuthDialog from '@jetbrains/ring-ui/components/auth-dialog-service/auth-dialog-service';
|
|
19
18
|
|
|
20
19
|
import Theme from '@jetbrains/ring-ui/components/global/theme';
|
|
@@ -77,13 +76,13 @@ export const header = ({isCompact, ...args}) => {
|
|
|
77
76
|
<TrayIcon title="Help" icon={helpIcon}/>
|
|
78
77
|
<TrayIcon title="What's new" icon={giftIcon}/>
|
|
79
78
|
<TrayIcon title="Search" icon={searchIcon}/>
|
|
80
|
-
<
|
|
81
|
-
|
|
82
|
-
|
|
79
|
+
<DropdownMenu
|
|
80
|
+
data={[{label: 'Test'}, {label: 'Test2'}]}
|
|
81
|
+
anchor={({active, pinned, ...ariaProps}) => (
|
|
82
|
+
<TrayIcon title="Settings" active={active} icon={settingsIcon} {...ariaProps}/>
|
|
83
83
|
)}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
</Dropdown>
|
|
84
|
+
menuProps={{top: -12}}
|
|
85
|
+
/>
|
|
87
86
|
<SmartServices auth={auth}/>
|
|
88
87
|
<SmartProfile auth={auth} hasUpdates LinkComponent={Comp}/>
|
|
89
88
|
</Tray>
|
|
@@ -4,7 +4,7 @@ import classNames from 'classnames';
|
|
|
4
4
|
|
|
5
5
|
import Avatar, {Size} from '../avatar/avatar';
|
|
6
6
|
import Button from '../button/button';
|
|
7
|
-
import
|
|
7
|
+
import DropdownMenu from '../dropdown-menu/dropdown-menu';
|
|
8
8
|
import PopupMenu from '../popup-menu/popup-menu';
|
|
9
9
|
|
|
10
10
|
import styles from './header.css';
|
|
@@ -162,21 +162,20 @@ export default class Profile extends PureComponent {
|
|
|
162
162
|
].filter(it => !!it);
|
|
163
163
|
|
|
164
164
|
return (
|
|
165
|
-
<
|
|
165
|
+
<DropdownMenu
|
|
166
166
|
{...props}
|
|
167
167
|
title={user.name}
|
|
168
168
|
anchor={anchor}
|
|
169
|
+
data={renderPopupItems(items)}
|
|
169
170
|
data-test="ring-profile"
|
|
170
171
|
className={classNames(styles.profile, className)}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
/>
|
|
179
|
-
</Dropdown>
|
|
172
|
+
menuProps={{
|
|
173
|
+
closeOnSelect,
|
|
174
|
+
left: -2,
|
|
175
|
+
top: -8,
|
|
176
|
+
sidePadding: 32
|
|
177
|
+
}}
|
|
178
|
+
/>
|
|
180
179
|
);
|
|
181
180
|
}
|
|
182
181
|
}
|
package/components/http/http.js
CHANGED
package/components/icon/icon.css
CHANGED
|
@@ -16,22 +16,22 @@
|
|
|
16
16
|
|
|
17
17
|
pointer-events: none;
|
|
18
18
|
|
|
19
|
-
&[width=
|
|
19
|
+
&[width="10"] {
|
|
20
20
|
vertical-align: -1px;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
&[width=
|
|
23
|
+
&[width="14"] {
|
|
24
24
|
margin-right: -2px;
|
|
25
25
|
margin-left: 0;
|
|
26
26
|
|
|
27
27
|
vertical-align: -3px;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
&[width=
|
|
30
|
+
&[width="16"] {
|
|
31
31
|
vertical-align: -3px;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
&[width=
|
|
34
|
+
&[width="20"] {
|
|
35
35
|
vertical-align: -2px;
|
|
36
36
|
}
|
|
37
37
|
|
|
@@ -44,6 +44,7 @@
|
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
/* HACK: This media query hack makes styles applied for WebKit browsers only */
|
|
47
|
+
/* stylelint-disable-next-line media-feature-name-no-vendor-prefix */
|
|
47
48
|
@media screen and (-webkit-min-device-pixel-ratio: 0) {
|
|
48
49
|
.glyph {
|
|
49
50
|
width: auto; /* Safari size bug workaround, see https://youtrack.jetbrains.com/issue/RG-1983 */
|
|
@@ -38,10 +38,10 @@ Input
|
|
|
38
38
|
appearance: none;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
:global(.ring-input:active,
|
|
42
|
-
.ring-input:focus,
|
|
43
|
-
.ring-input_active,
|
|
44
|
-
.ring-input_focus) {
|
|
41
|
+
:global(.ring-input:active),
|
|
42
|
+
:global(.ring-input:focus),
|
|
43
|
+
:global(.ring-input_active),
|
|
44
|
+
:global(.ring-input_focus) {
|
|
45
45
|
border-color: var(--ring-main-color);
|
|
46
46
|
outline: 0;
|
|
47
47
|
}
|
|
@@ -72,9 +72,9 @@ Input
|
|
|
72
72
|
border-left: 0;
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
-
:global(.ring-input.ring-input:disabled,
|
|
76
|
-
.ring-input.ring-input[disabled],
|
|
77
|
-
.ring-input.ring-input_disabled) {
|
|
75
|
+
:global(.ring-input.ring-input:disabled),
|
|
76
|
+
:global(.ring-input.ring-input[disabled]),
|
|
77
|
+
:global(.ring-input.ring-input_disabled) {
|
|
78
78
|
color: var(--ring-disabled-color);
|
|
79
79
|
border-color: var(--ring-border-disabled-color);
|
|
80
80
|
background-color: var(--ring-sidebar-background-color);
|
|
@@ -41,11 +41,15 @@
|
|
|
41
41
|
display: block;
|
|
42
42
|
float: left;
|
|
43
43
|
|
|
44
|
+
margin: 0;
|
|
45
|
+
|
|
44
46
|
transform-origin: 0 50%;
|
|
45
47
|
word-break: break-word;
|
|
46
48
|
|
|
47
49
|
color: var(--ring-heading-color);
|
|
48
50
|
|
|
51
|
+
font-size: inherit;
|
|
52
|
+
|
|
49
53
|
font-weight: bold;
|
|
50
54
|
}
|
|
51
55
|
|
|
@@ -92,12 +96,13 @@
|
|
|
92
96
|
width: 100%;
|
|
93
97
|
height: calc(unit * 3);
|
|
94
98
|
|
|
95
|
-
content:
|
|
99
|
+
content: "";
|
|
96
100
|
|
|
97
101
|
pointer-events: none;
|
|
98
102
|
|
|
99
103
|
opacity: 0.8;
|
|
100
|
-
|
|
104
|
+
|
|
105
|
+
background: linear-gradient(to top, gradientStart, gradientStop);
|
|
101
106
|
}
|
|
102
107
|
|
|
103
108
|
.contentWithTopFade:first-child::before {
|
|
@@ -115,7 +120,7 @@
|
|
|
115
120
|
width: 100%;
|
|
116
121
|
height: calc(unit * 3);
|
|
117
122
|
|
|
118
|
-
content:
|
|
123
|
+
content: "";
|
|
119
124
|
pointer-events: none;
|
|
120
125
|
|
|
121
126
|
opacity: 0.8;
|
|
@@ -70,7 +70,9 @@
|
|
|
70
70
|
|
|
71
71
|
:global(.ring-island__header-btn),
|
|
72
72
|
:global(.ring-island__header-button:hover) {
|
|
73
|
-
background:
|
|
73
|
+
background:
|
|
74
|
+
var(--ring-hover-background-color)
|
|
75
|
+
linear-gradient(to top, var(--ring-hover-background-color), var(--ring-content-background-color));
|
|
74
76
|
}
|
|
75
77
|
|
|
76
78
|
:global(.ring-island__header-btn),
|
package/components/list/list.js
CHANGED
|
@@ -570,7 +570,11 @@ export default class List extends Component {
|
|
|
570
570
|
)}
|
|
571
571
|
</CellMeasurer>
|
|
572
572
|
)
|
|
573
|
-
:
|
|
573
|
+
: (
|
|
574
|
+
<div role="row" id={itemId} key={itemKey}>
|
|
575
|
+
<div role="cell">{cloneElement(el)}</div>
|
|
576
|
+
</div>
|
|
577
|
+
);
|
|
574
578
|
};
|
|
575
579
|
|
|
576
580
|
addItemDataTestToProp = props => {
|
|
@@ -679,6 +683,7 @@ export default class List extends Component {
|
|
|
679
683
|
>
|
|
680
684
|
<div
|
|
681
685
|
aria-label={this.props.ariaLabel}
|
|
686
|
+
role="grid"
|
|
682
687
|
style={maxHeight
|
|
683
688
|
? {maxHeight: this.getVisibleListHeight(this.props)}
|
|
684
689
|
: null
|
|
@@ -24,6 +24,8 @@ export default class ListCustom extends PureComponent {
|
|
|
24
24
|
onMouseOver: PropTypes.func,
|
|
25
25
|
onMouseUp: PropTypes.func,
|
|
26
26
|
onCheckboxChange: PropTypes.func,
|
|
27
|
+
role: PropTypes.string,
|
|
28
|
+
tagName: PropTypes.string,
|
|
27
29
|
'data-test': PropTypes.string
|
|
28
30
|
};
|
|
29
31
|
|
|
@@ -51,6 +53,8 @@ export default class ListCustom extends PureComponent {
|
|
|
51
53
|
onCheckboxChange,
|
|
52
54
|
onMouseOver,
|
|
53
55
|
onMouseUp,
|
|
56
|
+
role,
|
|
57
|
+
tagName,
|
|
54
58
|
...restProps
|
|
55
59
|
} = this.props;
|
|
56
60
|
const classes = classNames(styles.item, className, {
|
|
@@ -65,9 +69,11 @@ export default class ListCustom extends PureComponent {
|
|
|
65
69
|
}, restProps['data-test']);
|
|
66
70
|
|
|
67
71
|
const content = (typeof template === 'function') ? template(this.props) : template;
|
|
72
|
+
const TagName = tagName || 'span';
|
|
73
|
+
|
|
68
74
|
return (
|
|
69
|
-
<
|
|
70
|
-
role=
|
|
75
|
+
<TagName
|
|
76
|
+
role={role || 'button'}
|
|
71
77
|
tabIndex={tabIndex}
|
|
72
78
|
onClick={onClick}
|
|
73
79
|
onKeyPress={this.handleKeyPress}
|
|
@@ -78,7 +84,7 @@ export default class ListCustom extends PureComponent {
|
|
|
78
84
|
data-test={dataTest}
|
|
79
85
|
>
|
|
80
86
|
{content}
|
|
81
|
-
</
|
|
87
|
+
</TagName>
|
|
82
88
|
);
|
|
83
89
|
}
|
|
84
90
|
}
|
|
@@ -35,6 +35,8 @@ export default class ListItem extends PureComponent {
|
|
|
35
35
|
PropTypes.element,
|
|
36
36
|
PropTypes.array
|
|
37
37
|
]),
|
|
38
|
+
showGeneratedAvatar: PropTypes.bool,
|
|
39
|
+
username: PropTypes.string,
|
|
38
40
|
avatar: PropTypes.string,
|
|
39
41
|
subavatar: PropTypes.string,
|
|
40
42
|
glyph: PropTypes.oneOfType([PropTypes.string, PropTypes.elementType]),
|
|
@@ -97,11 +99,14 @@ export default class ListItem extends PureComponent {
|
|
|
97
99
|
onMouseUp,
|
|
98
100
|
rightNodes,
|
|
99
101
|
leftNodes,
|
|
102
|
+
showGeneratedAvatar,
|
|
103
|
+
username,
|
|
100
104
|
...restProps
|
|
101
105
|
} = this.props;
|
|
102
106
|
|
|
103
107
|
const checkable = checkbox !== undefined;
|
|
104
|
-
const
|
|
108
|
+
const shouldShowGeneratedAvatar = showGeneratedAvatar && username != null;
|
|
109
|
+
const hasLeftNodes = leftNodes || glyph || avatar || shouldShowGeneratedAvatar;
|
|
105
110
|
const showCheckbox = checkable && (checkbox || !hasLeftNodes || (hover && !disabled));
|
|
106
111
|
|
|
107
112
|
const classes = classNames(styles.item, globalStyles.resetButton, className, {
|
|
@@ -177,12 +182,13 @@ export default class ListItem extends PureComponent {
|
|
|
177
182
|
size={this.props.iconSize}
|
|
178
183
|
/>
|
|
179
184
|
)}
|
|
180
|
-
{avatar && (
|
|
185
|
+
{(avatar || shouldShowGeneratedAvatar) && (
|
|
181
186
|
<Avatar
|
|
182
187
|
className={styles.avatar}
|
|
183
188
|
url={avatar}
|
|
184
189
|
size={AvatarSize.Size20}
|
|
185
190
|
subavatar={subavatar}
|
|
191
|
+
username={username}
|
|
186
192
|
/>
|
|
187
193
|
)}
|
|
188
194
|
</div>
|
|
@@ -17,7 +17,8 @@ export default class ListLink extends PureComponent {
|
|
|
17
17
|
description: PropTypes.string,
|
|
18
18
|
label: PropTypes.oneOfType([
|
|
19
19
|
PropTypes.element,
|
|
20
|
-
PropTypes.string
|
|
20
|
+
PropTypes.string,
|
|
21
|
+
PropTypes.func
|
|
21
22
|
]),
|
|
22
23
|
rgItemType: PropTypes.number,
|
|
23
24
|
scrolling: PropTypes.bool,
|
|
@@ -19,8 +19,6 @@ export default {
|
|
|
19
19
|
framework: 'react'
|
|
20
20
|
},
|
|
21
21
|
args: {
|
|
22
|
-
// https://github.com/storybookjs/storybook/issues/12635#issuecomment-703392498
|
|
23
|
-
...Message.defaultProps,
|
|
24
22
|
title: 'This is title',
|
|
25
23
|
direction: Directions.TOP_RIGHT,
|
|
26
24
|
children: 'This is long long long long long long long long long long long long long long long long long long description'
|
|
@@ -42,8 +40,10 @@ export const basic = args => (
|
|
|
42
40
|
|
|
43
41
|
basic.storyName = 'basic';
|
|
44
42
|
basic.args = {
|
|
45
|
-
tailOffset: 32
|
|
46
|
-
|
|
43
|
+
tailOffset: 32
|
|
44
|
+
};
|
|
45
|
+
basic.parameters = {
|
|
46
|
+
actions: {argTypesRegex: '^onClose$'}
|
|
47
47
|
};
|
|
48
48
|
|
|
49
49
|
export const withOnDissmiss = args => (
|
|
@@ -71,7 +71,8 @@ export const wishNarrowAnchor = args => (
|
|
|
71
71
|
|
|
72
72
|
wishNarrowAnchor.storyName = 'with narrow anchor';
|
|
73
73
|
wishNarrowAnchor.args = {
|
|
74
|
-
popupProps: {left: -8}
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
popupProps: {left: -8}
|
|
75
|
+
};
|
|
76
|
+
wishNarrowAnchor.parameters = {
|
|
77
|
+
actions: {argTypesRegex: null}
|
|
77
78
|
};
|
|
@@ -33,6 +33,7 @@ export default class Pager extends PureComponent {
|
|
|
33
33
|
className: PropTypes.string,
|
|
34
34
|
translations: PropTypes.object,
|
|
35
35
|
loader: PropTypes.bool,
|
|
36
|
+
loaderNavigation: PropTypes.bool,
|
|
36
37
|
hrefFunc: PropTypes.func //function which generates href for all pager's buttons based on pager state passed as a function parameter, either this function or onPageChange should be provided
|
|
37
38
|
};
|
|
38
39
|
|
|
@@ -53,6 +54,7 @@ export default class Pager extends PureComponent {
|
|
|
53
54
|
previousPage: 'Previous'
|
|
54
55
|
},
|
|
55
56
|
loader: false,
|
|
57
|
+
loaderNavigation: false,
|
|
56
58
|
onPageSizeChange: () => {},
|
|
57
59
|
onLoadPage: () => {}
|
|
58
60
|
};
|
|
@@ -109,7 +111,7 @@ export default class Pager extends PureComponent {
|
|
|
109
111
|
href={this.generateHref(page)}
|
|
110
112
|
key={key}
|
|
111
113
|
active={active}
|
|
112
|
-
disabled={this.props.loader && !active}
|
|
114
|
+
disabled={this.props.loader && !active && !this.props.loaderNavigation}
|
|
113
115
|
loader={this.props.loader && active}
|
|
114
116
|
{...this.getClickProps(this.handlePageChange(page))}
|
|
115
117
|
>
|
|
@@ -187,7 +189,7 @@ export default class Pager extends PureComponent {
|
|
|
187
189
|
|
|
188
190
|
return (
|
|
189
191
|
<div className={style.links}>
|
|
190
|
-
{prevLinkAvailable && !this.props.loader
|
|
192
|
+
{prevLinkAvailable && (!this.props.loader || this.props.loaderNavigation)
|
|
191
193
|
? (
|
|
192
194
|
<Link
|
|
193
195
|
href={prevLinkHref}
|
|
@@ -202,7 +204,7 @@ export default class Pager extends PureComponent {
|
|
|
202
204
|
)
|
|
203
205
|
}
|
|
204
206
|
|
|
205
|
-
{nextLinkAvailable && !this.props.loader
|
|
207
|
+
{nextLinkAvailable && (!this.props.loader || this.props.loaderNavigation)
|
|
206
208
|
? (
|
|
207
209
|
<Link
|
|
208
210
|
href={nextLinkHref}
|
|
@@ -251,7 +251,7 @@ export default class Popup extends PureComponent {
|
|
|
251
251
|
this._listenersEnabled = true;
|
|
252
252
|
this.listeners.add(window, 'resize', this._redraw);
|
|
253
253
|
this.listeners.add(window, 'scroll', this._redraw);
|
|
254
|
-
this.listeners.add(document, '
|
|
254
|
+
this.listeners.add(document, 'pointerdown', this._onDocumentClick, true);
|
|
255
255
|
let el = this._getAnchor();
|
|
256
256
|
while (el) {
|
|
257
257
|
this.listeners.add(el, 'scroll', this._redraw);
|
|
@@ -32,31 +32,33 @@ describe('Popup', () => {
|
|
|
32
32
|
onCloseAttempt.should.have.been.called;
|
|
33
33
|
});
|
|
34
34
|
|
|
35
|
-
describe('close by
|
|
36
|
-
const
|
|
37
|
-
|
|
35
|
+
describe('close by pointer down', () => {
|
|
36
|
+
const downEvent = new PointerEvent('pointerdown', {
|
|
37
|
+
bubbles: true,
|
|
38
|
+
cancelable: false
|
|
39
|
+
});
|
|
38
40
|
let clock;
|
|
39
41
|
|
|
40
42
|
beforeEach(() => {
|
|
41
43
|
clock = sandbox.useFakeTimers({toFake: ['setTimeout']});
|
|
42
44
|
});
|
|
43
45
|
|
|
44
|
-
it('should attempt to close by
|
|
46
|
+
it('should attempt to close by pointer down outside the element', () => {
|
|
45
47
|
const onCloseAttempt = sandbox.stub();
|
|
46
48
|
mountPopup({onCloseAttempt});
|
|
47
49
|
|
|
48
50
|
clock.tick();
|
|
49
|
-
document.body.dispatchEvent(
|
|
51
|
+
document.body.dispatchEvent(downEvent);
|
|
50
52
|
onCloseAttempt.should.have.been.called;
|
|
51
53
|
});
|
|
52
54
|
|
|
53
|
-
it('should pass event to onCloseAttempt callback when closing by
|
|
55
|
+
it('should pass event to onCloseAttempt callback when closing by document pointer down event', () => {
|
|
54
56
|
const onCloseAttempt = sandbox.stub();
|
|
55
57
|
mountPopup({onCloseAttempt});
|
|
56
58
|
|
|
57
59
|
clock.tick();
|
|
58
|
-
document.body.dispatchEvent(
|
|
59
|
-
onCloseAttempt.should.have.been.calledWith(sinon.match({type: '
|
|
60
|
+
document.body.dispatchEvent(downEvent);
|
|
61
|
+
onCloseAttempt.should.have.been.calledWith(sinon.match({type: 'pointerdown'}));
|
|
60
62
|
});
|
|
61
63
|
|
|
62
64
|
it('should not close popup if popup hidden', () => {
|
|
@@ -67,11 +69,11 @@ describe('Popup', () => {
|
|
|
67
69
|
});
|
|
68
70
|
|
|
69
71
|
clock.tick();
|
|
70
|
-
document.body.dispatchEvent(
|
|
72
|
+
document.body.dispatchEvent(downEvent);
|
|
71
73
|
onCloseAttempt.should.not.have.been.called;
|
|
72
74
|
});
|
|
73
75
|
|
|
74
|
-
it('should be closed by
|
|
76
|
+
it('should be closed by pointer down event outside the element after show', () => {
|
|
75
77
|
const onCloseAttempt = sandbox.stub();
|
|
76
78
|
const wrapper = mountPopup({
|
|
77
79
|
onCloseAttempt
|
|
@@ -79,17 +81,17 @@ describe('Popup', () => {
|
|
|
79
81
|
|
|
80
82
|
wrapper.setProps({hidden: false}, () => {
|
|
81
83
|
clock.tick();
|
|
82
|
-
document.body.dispatchEvent(
|
|
84
|
+
document.body.dispatchEvent(downEvent);
|
|
83
85
|
onCloseAttempt.should.have.been.called;
|
|
84
86
|
});
|
|
85
87
|
});
|
|
86
88
|
|
|
87
|
-
it('shouldn\'t be closed by
|
|
89
|
+
it('shouldn\'t be closed by pointer down event inside the element', () => {
|
|
88
90
|
const onCloseAttempt = sandbox.stub();
|
|
89
91
|
const instance = mountPopup({onCloseAttempt}).instance();
|
|
90
92
|
|
|
91
93
|
clock.tick();
|
|
92
|
-
instance.popup.dispatchEvent(
|
|
94
|
+
instance.popup.dispatchEvent(downEvent);
|
|
93
95
|
onCloseAttempt.should.not.have.been.called;
|
|
94
96
|
});
|
|
95
97
|
});
|
|
@@ -35,15 +35,15 @@ export const basic = () => {
|
|
|
35
35
|
return (
|
|
36
36
|
<div>
|
|
37
37
|
<div style={{height: '25px', paddingTop: '25px'}}>
|
|
38
|
-
<ProgressBar value={value} style={{width: 288}}/>
|
|
38
|
+
<ProgressBar label="Progress" value={value} style={{width: 288}}/>
|
|
39
39
|
</div>
|
|
40
40
|
|
|
41
41
|
<div style={{height: '25px', paddingTop: '25px', background: '#000'}}>
|
|
42
|
-
<ProgressBar value={value} theme={Theme.DARK} style={{width: 288}}/>
|
|
42
|
+
<ProgressBar label="Progress" value={value} theme={Theme.DARK} style={{width: 288}}/>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
<div style={{height: '25px', paddingTop: '25px', background: '#F0F0F0'}}>
|
|
46
|
-
<ProgressBar value={value} style={{width: 288}}/>
|
|
46
|
+
<ProgressBar label="Progress" value={value} style={{width: 288}}/>
|
|
47
47
|
</div>
|
|
48
48
|
</div>
|
|
49
49
|
);
|