@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.
Files changed (234) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +17 -15
  3. package/babel.config.js +3 -2
  4. package/components/alert/alert.js +9 -3
  5. package/components/alert/alert.test.js +21 -48
  6. package/components/alert/container.css +1 -1
  7. package/components/alert/container.test.js +3 -13
  8. package/components/alert-service/alert-service.examples.css +18 -0
  9. package/components/alert-service/alert-service.examples.js +21 -0
  10. package/components/alert-service/alert-service.js +10 -3
  11. package/components/analytics/analytics__fus-plugin.js +3 -3
  12. package/components/analytics/analytics__ga-plugin.js +2 -2
  13. package/components/auth/auth.test.js +14 -7
  14. package/components/auth/auth__core.js +64 -33
  15. package/components/auth-dialog/auth-dialog.css +2 -3
  16. package/components/auth-dialog/auth-dialog.js +4 -1
  17. package/components/auth-dialog/auth-dialog.test.js +3 -19
  18. package/components/avatar/avatar.css +4 -1
  19. package/components/avatar/avatar.examples.js +3 -2
  20. package/components/avatar/avatar.js +34 -6
  21. package/components/avatar/avatar.test.js +20 -17
  22. package/components/avatar/fallback-avatar.js +136 -0
  23. package/components/avatar-editor-ng/avatar-editor-ng.css +2 -2
  24. package/components/avatar-editor-ng/avatar-editor-ng.js +2 -1
  25. package/components/avatar-editor-ng/{avatar-editor-ng.html → avatar-editor-ng__template.js} +2 -2
  26. package/components/badge/badge.test.js +13 -20
  27. package/components/button/button.css +2 -2
  28. package/components/button/button.js +4 -1
  29. package/components/button/button.test.js +32 -33
  30. package/components/button-group/button-group.js +1 -1
  31. package/components/button-group/caption.js +1 -1
  32. package/components/button-ng/button-ng.js +1 -1
  33. package/components/button-set-ng/button-set-ng.js +3 -1
  34. package/components/checkbox/checkbox.css +1 -1
  35. package/components/code/code.js +2 -5
  36. package/components/confirm/confirm.js +1 -0
  37. package/components/confirm-service/confirm-service.js +5 -5
  38. package/components/content-layout/content-layout.css +1 -1
  39. package/components/data-list/data-list.css +1 -1
  40. package/components/date-picker/date-input.js +5 -4
  41. package/components/date-picker/date-picker.css +34 -22
  42. package/components/date-picker/date-picker.js +16 -14
  43. package/components/date-picker/date-popup.js +22 -7
  44. package/components/date-picker/month-names.js +8 -5
  45. package/components/date-picker/month.js +6 -2
  46. package/components/date-picker/weekdays.js +10 -2
  47. package/components/dialog/dialog.examples.js +3 -1
  48. package/components/dialog/dialog.js +10 -5
  49. package/components/dialog/dialog.test.js +1 -1
  50. package/components/dialog/dialog__body-scroll-preventer.js +51 -31
  51. package/components/dialog-ng/dialog-ng.js +10 -10
  52. package/components/dialog-ng/{dialog-ng.html → dialog-ng__template.js} +2 -2
  53. package/components/dropdown/dropdown.examples.js +36 -1
  54. package/components/dropdown/dropdown.test.js +2 -2
  55. package/components/dropdown-menu/dropdown-menu.examples.js +47 -0
  56. package/components/dropdown-menu/dropdown-menu.js +117 -0
  57. package/components/dropdown-menu/dropdown-menu.test.js +76 -0
  58. package/components/error-bubble/error-bubble-legacy.css +1 -1
  59. package/components/error-bubble/error-bubble.css +1 -1
  60. package/components/error-bubble/error-bubble.examples.js +1 -1
  61. package/components/error-page/error-page.css +2 -2
  62. package/components/footer-ng/footer-ng.js +13 -3
  63. package/components/form/form.css +2 -2
  64. package/components/form-ng/form-ng.js +3 -1
  65. package/components/global/global.css +1 -1
  66. package/components/global/theme.js +1 -1
  67. package/components/global/variables.css +8 -1
  68. package/components/grid/grid.css +10 -9
  69. package/components/header/header.css +1 -1
  70. package/components/header/header.examples.js +7 -8
  71. package/components/header/profile.js +10 -11
  72. package/components/http/http.js +1 -1
  73. package/components/icon/icon.css +5 -4
  74. package/components/input/input-legacy.css +7 -7
  75. package/components/island/header.js +2 -2
  76. package/components/island/island.css +8 -3
  77. package/components/island-legacy/island-legacy.css +3 -1
  78. package/components/list/list.js +6 -1
  79. package/components/list/list__custom.js +9 -3
  80. package/components/list/list__item.js +8 -2
  81. package/components/list/list__link.js +2 -1
  82. package/components/loader-inline/loader-inline.css +1 -1
  83. package/components/loader-screen/loader-screen.css +1 -1
  84. package/components/message/message.css +1 -1
  85. package/components/message/message.examples.js +8 -7
  86. package/components/pager/pager.js +5 -3
  87. package/components/permissions/permissions.js +1 -1
  88. package/components/popup/popup.js +1 -1
  89. package/components/popup/popup.test.js +15 -13
  90. package/components/progress-bar/progress-bar.css +1 -1
  91. package/components/progress-bar/progress-bar.examples.js +3 -3
  92. package/components/progress-bar/progress-bar.js +5 -2
  93. package/components/progress-bar/progress-bar.test.js +12 -13
  94. package/components/progress-bar-ng/progress-bar-ng.examples.js +3 -3
  95. package/components/query-assist/query-assist.css +13 -3
  96. package/components/query-assist/query-assist.examples.js +3 -4
  97. package/components/query-assist/query-assist.js +56 -12
  98. package/components/query-assist/query-assist.test.js +37 -5
  99. package/components/save-field-ng/save-field-ng.css +0 -3
  100. package/components/save-field-ng/save-field-ng.js +3 -1
  101. package/components/save-field-ng/{save-field-ng.html → save-field-ng__template.js} +2 -2
  102. package/components/select/select.css +12 -7
  103. package/components/select/select.examples.js +13 -0
  104. package/components/select/select.js +30 -43
  105. package/components/select/select.test.js +4 -5
  106. package/components/select/select__popup.js +1 -0
  107. package/components/shortcuts-hint-ng/shortcuts-hint-ng.css +1 -1
  108. package/components/shortcuts-hint-ng/shortcuts-hint-ng.js +1 -1
  109. package/components/shortcuts-hint-ng/{shortcuts-hint-ng.html → shortcuts-hint-ng__template.js} +2 -2
  110. package/components/sidebar/sidebar.css +1 -0
  111. package/components/sidebar-ng/sidebar-ng.js +6 -2
  112. package/components/sidebar-ng/{sidebar-ng__button.html → sidebar-ng__button-template.js} +2 -2
  113. package/components/sidebar-ng/{sidebar-ng.html → sidebar-ng__template.js} +2 -2
  114. package/components/table/header.js +9 -1
  115. package/components/table/row.js +2 -1
  116. package/components/table/table.css +2 -1
  117. package/components/table-legacy/table-legacy.css +2 -2
  118. package/components/table-legacy/table-legacy__toolbar.css +2 -2
  119. package/components/table-legacy-ng/table-legacy-ng.js +38 -5
  120. package/components/table-legacy-ng/table-legacy-ng__pager.js +7 -1
  121. package/components/tabs/collapsible-tab.js +2 -2
  122. package/components/tabs/collapsible-tabs.js +5 -9
  123. package/components/tabs/tab-link.js +4 -2
  124. package/components/tabs/tabs.css +32 -5
  125. package/components/tabs-ng/tabs-ng.js +4 -2
  126. package/components/tabs-ng/{tabs-ng.html → tabs-ng__template.js} +6 -2
  127. package/components/tag/tag.css +5 -2
  128. package/components/tag/tag.examples.js +3 -0
  129. package/components/tag/tag.js +19 -16
  130. package/components/tags-input/tag-input.examples.js +1 -1
  131. package/components/tags-input/tags-input.js +5 -2
  132. package/components/template-ng/template-ng.js +1 -1
  133. package/components/tooltip/tooltip.js +7 -2
  134. package/components/user-agreement/user-agreement.css +1 -5
  135. package/components/user-agreement/user-agreement.examples.js +7 -6
  136. package/components/user-agreement/user-agreement.js +11 -3
  137. package/package.json +85 -83
  138. package/webpack.config.js +14 -10
  139. package/components/button-set-ng/button-set-ng.html +0 -1
  140. package/components/footer-ng/footer-ng.html +0 -13
  141. package/components/form-ng/form-ng__error-bubble.html +0 -3
  142. package/components/table-legacy-ng/table-legacy-ng.html +0 -4
  143. package/components/table-legacy-ng/table-legacy-ng__column.html +0 -12
  144. package/components/table-legacy-ng/table-legacy-ng__header.html +0 -4
  145. package/components/table-legacy-ng/table-legacy-ng__pager.html +0 -7
  146. package/components/table-legacy-ng/table-legacy-ng__row.html +0 -12
  147. package/components/table-legacy-ng/table-legacy-ng__title.html +0 -9
  148. package/dist/_helpers/_rollupPluginBabelHelpers.js +0 -123
  149. package/dist/_helpers/background-flow.js +0 -232
  150. package/dist/_helpers/badge.js +0 -3
  151. package/dist/_helpers/button.js +0 -145
  152. package/dist/_helpers/clickableLink.js +0 -65
  153. package/dist/_helpers/data-tests.js +0 -15
  154. package/dist/_helpers/disable-hover-hoc.js +0 -407
  155. package/dist/_helpers/dom.js +0 -101
  156. package/dist/_helpers/get-uid.js +0 -15
  157. package/dist/_helpers/linear-function.js +0 -17
  158. package/dist/_helpers/list.js +0 -1327
  159. package/dist/_helpers/logo.js +0 -36
  160. package/dist/_helpers/memoize.js +0 -17
  161. package/dist/_helpers/popup.js +0 -691
  162. package/dist/_helpers/popup.target.js +0 -27
  163. package/dist/_helpers/rerender-hoc.js +0 -49
  164. package/dist/_helpers/schedule-raf.js +0 -31
  165. package/dist/_helpers/sniffer.js +0 -6
  166. package/dist/_helpers/theme.js +0 -40
  167. package/dist/_helpers/url.js +0 -125
  168. package/dist/alert-service.js +0 -149
  169. package/dist/alert.js +0 -284
  170. package/dist/analytics.js +0 -116
  171. package/dist/auth-dialog-service.js +0 -56
  172. package/dist/auth-dialog.js +0 -122
  173. package/dist/auth.js +0 -1744
  174. package/dist/avatar.js +0 -152
  175. package/dist/badge.js +0 -52
  176. package/dist/button-group.js +0 -48
  177. package/dist/button-set.js +0 -27
  178. package/dist/button-toolbar.js +0 -30
  179. package/dist/button.js +0 -12
  180. package/dist/caret.js +0 -262
  181. package/dist/checkbox.js +0 -108
  182. package/dist/confirm-service.js +0 -102
  183. package/dist/confirm.js +0 -113
  184. package/dist/content-layout.js +0 -184
  185. package/dist/contenteditable.js +0 -81
  186. package/dist/data-list.js +0 -466
  187. package/dist/date-picker.js +0 -1398
  188. package/dist/dialog.js +0 -223
  189. package/dist/dropdown.js +0 -250
  190. package/dist/error-bubble.js +0 -56
  191. package/dist/error-message.js +0 -53
  192. package/dist/footer.js +0 -124
  193. package/dist/grid.js +0 -148
  194. package/dist/group.js +0 -34
  195. package/dist/header.js +0 -658
  196. package/dist/heading.js +0 -76
  197. package/dist/http.js +0 -207
  198. package/dist/hub-source.js +0 -130
  199. package/dist/icon.js +0 -211
  200. package/dist/input.js +0 -228
  201. package/dist/island.js +0 -314
  202. package/dist/link.js +0 -117
  203. package/dist/list.js +0 -29
  204. package/dist/loader-inline.js +0 -165
  205. package/dist/loader-screen.js +0 -45
  206. package/dist/loader.js +0 -338
  207. package/dist/login-dialog.js +0 -173
  208. package/dist/logo.js +0 -8
  209. package/dist/message.js +0 -226
  210. package/dist/old-browsers-message.js +0 -129
  211. package/dist/pager.js +0 -325
  212. package/dist/panel.js +0 -34
  213. package/dist/permissions.js +0 -466
  214. package/dist/popup-menu.js +0 -93
  215. package/dist/popup.js +0 -16
  216. package/dist/progress-bar.js +0 -111
  217. package/dist/proxy-attrs.js +0 -19
  218. package/dist/query-assist.js +0 -1081
  219. package/dist/radio.js +0 -112
  220. package/dist/select.js +0 -1920
  221. package/dist/selection.js +0 -213
  222. package/dist/shortcuts.js +0 -307
  223. package/dist/storage.js +0 -373
  224. package/dist/style.css +0 -1
  225. package/dist/tab-trap.js +0 -174
  226. package/dist/table.js +0 -903
  227. package/dist/tabs.js +0 -721
  228. package/dist/tag.js +0 -187
  229. package/dist/tags-input.js +0 -440
  230. package/dist/tags-list.js +0 -91
  231. package/dist/text.js +0 -38
  232. package/dist/toggle.js +0 -80
  233. package/dist/tooltip.js +0 -202
  234. package/dist/user-card.js +0 -218
@@ -11,7 +11,7 @@ Also it won't form in FF47 https://bugzilla.mozilla.org/show_bug.cgi?id=594933
11
11
  display: block;
12
12
  clear: both;
13
13
 
14
- content: '';
14
+ content: "";
15
15
  }
16
16
  }
17
17
 
@@ -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: Menlo, "Bitstream Vera Sans Mono", "Ubuntu Mono", Consolas, "Courier New", Courier, 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
 
@@ -1,23 +1,24 @@
1
1
  @import "../global/variables.css";
2
2
 
3
- @value unit, breakpoint-small, breakpoint-middle, breakpoint-large, large-screen-media, middle-screen-media, small-screen-media from '../global/global.css';
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.33333333%;
11
- @value width-2: 16.66666667%;
11
+ @value width-1: 8.3333%;
12
+ @value width-2: 16.6667%;
12
13
  @value width-3: 25%;
13
- @value width-4: 33.33333333%;
14
- @value width-5: 41.66666667%;
14
+ @value width-4: 33.3333%;
15
+ @value width-5: 41.6667%;
15
16
  @value width-6: 50%;
16
- @value width-7: 58.33333333%;
17
- @value width-8: 66.66666667%;
17
+ @value width-7: 58.3333%;
18
+ @value width-8: 66.6667%;
18
19
  @value width-9: 75%;
19
- @value width-10: 83.33333333%;
20
- @value width-11: 91.66666667%;
20
+ @value width-10: 83.3333%;
21
+ @value width-11: 91.6667%;
21
22
  @value width-12: 100%;
22
23
 
23
24
  .container-fluid,
@@ -152,7 +152,7 @@
152
152
  width: unit;
153
153
  height: unit;
154
154
 
155
- content: '';
155
+ content: "";
156
156
 
157
157
  border: 1px solid var(--ring-dark-text-color);
158
158
  border-radius: 50%;
@@ -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 PopupMenu from '@jetbrains/ring-ui/components/popup-menu/popup-menu';
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
- <Dropdown
81
- anchor={({active}) => (
82
- <TrayIcon title="Settings" active={active} icon={settingsIcon}/>
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
- <PopupMenu top={-12} closeOnSelect data={[{label: 'Test'}, {label: 'Test2'}]}/>
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 Dropdown from '../dropdown/dropdown';
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
- <Dropdown
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
- <PopupMenu
173
- closeOnSelect={closeOnSelect}
174
- data={renderPopupItems(items)}
175
- left={-2}
176
- top={-8}
177
- sidePadding={32}
178
- />
179
- </Dropdown>
172
+ menuProps={{
173
+ closeOnSelect,
174
+ left: -2,
175
+ top: -8,
176
+ sidePadding: 32
177
+ }}
178
+ />
180
179
  );
181
180
  }
182
181
  }
@@ -192,5 +192,5 @@ export default class HTTP {
192
192
  method: 'POST',
193
193
  ...params
194
194
  })
195
- )
195
+ );
196
196
  }
@@ -16,22 +16,22 @@
16
16
 
17
17
  pointer-events: none;
18
18
 
19
- &[width='10'] {
19
+ &[width="10"] {
20
20
  vertical-align: -1px;
21
21
  }
22
22
 
23
- &[width='14'] {
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='16'] {
30
+ &[width="16"] {
31
31
  vertical-align: -3px;
32
32
  }
33
33
 
34
- &[width='20'] {
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);
@@ -75,12 +75,12 @@ class Header extends Component {
75
75
  >
76
76
  {wrapWithTitle &&
77
77
  (
78
- <div
78
+ <h2
79
79
  className={styles.title}
80
80
  style={titleStyle}
81
81
  >
82
82
  {children}
83
- </div>
83
+ </h2>
84
84
  )}
85
85
 
86
86
  {!wrapWithTitle && children}
@@ -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
- background: linear-gradient(to top, gradientStart, gradientStop); /* stylelint-disable-line function-linear-gradient-no-nonstandard-direction */
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: var(--ring-hover-background-color) linear-gradient(to top, var(--ring-hover-background-color), var(--ring-content-background-color));
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),
@@ -570,7 +570,11 @@ export default class List extends Component {
570
570
  )}
571
571
  </CellMeasurer>
572
572
  )
573
- : cloneElement(el, {key: itemKey});
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
- <span
70
- role="button"
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
- </span>
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 hasLeftNodes = leftNodes || glyph || avatar;
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,
@@ -49,7 +49,7 @@
49
49
  width: calc(unit * 2);
50
50
  height: calc(unit * 2);
51
51
 
52
- content: '';
52
+ content: "";
53
53
  animation: pulse 0.85s cubic-bezier(0.68, 0, 0.74, 0.74) infinite alternate;
54
54
  }
55
55
  }
@@ -14,7 +14,7 @@
14
14
 
15
15
  height: 100%;
16
16
 
17
- content: '';
17
+ content: "";
18
18
 
19
19
  vertical-align: middle;
20
20
  }
@@ -28,7 +28,7 @@
28
28
  bottom: 0;
29
29
  left: 0;
30
30
 
31
- content: '';
31
+ content: "";
32
32
 
33
33
  border-radius: var(--ring-border-radius);
34
34
 
@@ -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
- onDismiss: null
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
- onClose: null,
76
- onDismiss: null
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}
@@ -54,7 +54,7 @@ export default class Permissions {
54
54
  query
55
55
  }
56
56
  })
57
- )
57
+ );
58
58
 
59
59
  /**
60
60
  * Returns function, which cuts off prefix from server-side permission name
@@ -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, 'click', this._onDocumentClick, true);
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 click', () => {
36
- const click = document.createEvent('MouseEvent');
37
- click.initEvent('click', true, false);
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 click outside the element', () => {
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(click);
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 clicking by document', () => {
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(click);
59
- onCloseAttempt.should.have.been.calledWith(sinon.match({type: 'click'}));
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(click);
72
+ document.body.dispatchEvent(downEvent);
71
73
  onCloseAttempt.should.not.have.been.called;
72
74
  });
73
75
 
74
- it('should be closed by click outside the element after show', () => {
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(click);
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 click inside the element', () => {
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(click);
94
+ instance.popup.dispatchEvent(downEvent);
93
95
  onCloseAttempt.should.not.have.been.called;
94
96
  });
95
97
  });
@@ -61,7 +61,7 @@
61
61
  bottom: 0;
62
62
  left: 0;
63
63
 
64
- content: '';
64
+ content: "";
65
65
  animation: progress-bar 2500ms linear infinite;
66
66
 
67
67
  background-image: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(255, 255, 255, 0.6), rgba(0, 0, 0, 0));
@@ -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
  );