baseui 10.0.0 → 10.3.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.
Files changed (162) hide show
  1. package/app-nav-bar/index.d.ts +24 -0
  2. package/app-nav-bar/mobile-menu.js +5 -3
  3. package/app-nav-bar/mobile-menu.js.flow +3 -2
  4. package/app-nav-bar/user-menu.js +5 -3
  5. package/app-nav-bar/user-menu.js.flow +3 -2
  6. package/block/index.d.ts +7 -0
  7. package/combobox/combobox.js +4 -9
  8. package/combobox/combobox.js.flow +4 -3
  9. package/combobox/index.d.ts +1 -1
  10. package/data-table/filter-menu.js +5 -3
  11. package/data-table/filter-menu.js.flow +3 -2
  12. package/data-table/header-cell.js +1 -1
  13. package/data-table/header-cell.js.flow +1 -1
  14. package/datepicker/calendar.js +6 -1
  15. package/datepicker/calendar.js.flow +4 -0
  16. package/datepicker/datepicker.js +1 -1
  17. package/datepicker/datepicker.js.flow +5 -2
  18. package/datepicker/index.d.ts +9 -1
  19. package/datepicker/month.js +2 -1
  20. package/datepicker/month.js.flow +8 -1
  21. package/datepicker/types.js.flow +13 -6
  22. package/es/app-nav-bar/mobile-menu.js +5 -5
  23. package/es/app-nav-bar/user-menu.js +5 -5
  24. package/es/combobox/combobox.js +4 -3
  25. package/es/data-table/filter-menu.js +3 -2
  26. package/es/data-table/header-cell.js +1 -1
  27. package/es/datepicker/calendar.js +6 -1
  28. package/es/datepicker/datepicker.js +1 -1
  29. package/es/datepicker/month.js +2 -1
  30. package/es/form-control/form-control.js +6 -14
  31. package/es/helper/helper.js +10 -6
  32. package/es/helpers/base-provider.js +4 -1
  33. package/es/input/input.js +9 -5
  34. package/es/layer/layer.js +5 -1
  35. package/es/layout-grid/grid.js +16 -10
  36. package/es/layout-grid/styled-components.js +24 -12
  37. package/es/list/index.js +1 -0
  38. package/es/list/list-heading.js +77 -0
  39. package/es/list/list-item.js +1 -1
  40. package/es/list/menu-adapter.js +4 -2
  41. package/es/list/styled-components.js +101 -4
  42. package/es/menu/stateful-container.js +41 -27
  43. package/es/phone-input/base-country-picker.js +2 -0
  44. package/es/popover/popover.js +21 -10
  45. package/es/select/select-component.js +34 -22
  46. package/es/table-semantic/styled-components.js +8 -10
  47. package/es/table-semantic/table-builder.js +3 -2
  48. package/es/table-semantic/table.js +1 -0
  49. package/es/tag/index.js +1 -1
  50. package/es/tag/styled-components.js +2 -4
  51. package/es/tag/tag.js +16 -16
  52. package/es/textarea/textarea.js +1 -2
  53. package/es/themes/dark-theme/color-semantic-tokens.js +18 -8
  54. package/es/themes/light-theme/color-semantic-tokens.js +14 -4
  55. package/es/tokens/colors.js +3 -3
  56. package/es/tree-view/tree-view.js +0 -2
  57. package/esm/app-nav-bar/mobile-menu.js +5 -3
  58. package/esm/app-nav-bar/user-menu.js +5 -3
  59. package/esm/combobox/combobox.js +4 -7
  60. package/esm/data-table/filter-menu.js +4 -3
  61. package/esm/data-table/header-cell.js +1 -1
  62. package/esm/datepicker/calendar.js +6 -1
  63. package/esm/datepicker/datepicker.js +1 -1
  64. package/esm/datepicker/month.js +2 -1
  65. package/esm/form-control/form-control.js +21 -33
  66. package/esm/helper/helper.js +10 -6
  67. package/esm/helpers/base-provider.js +4 -1
  68. package/esm/input/input.js +9 -5
  69. package/esm/layer/layer.js +5 -1
  70. package/esm/layout-grid/grid.js +20 -10
  71. package/esm/layout-grid/styled-components.js +52 -35
  72. package/esm/list/index.js +1 -0
  73. package/esm/list/list-heading.js +116 -0
  74. package/esm/list/list-item.js +1 -1
  75. package/esm/list/menu-adapter.js +4 -2
  76. package/esm/list/styled-components.js +99 -3
  77. package/esm/menu/stateful-container.js +56 -40
  78. package/esm/phone-input/base-country-picker.js +2 -0
  79. package/esm/popover/popover.js +25 -16
  80. package/esm/select/select-component.js +87 -79
  81. package/esm/table-semantic/styled-components.js +8 -10
  82. package/esm/table-semantic/table-builder.js +3 -2
  83. package/esm/table-semantic/table.js +1 -0
  84. package/esm/tag/index.js +1 -1
  85. package/esm/tag/styled-components.js +2 -4
  86. package/esm/tag/tag.js +18 -16
  87. package/esm/textarea/textarea.js +1 -2
  88. package/esm/themes/dark-theme/color-semantic-tokens.js +18 -8
  89. package/esm/themes/light-theme/color-semantic-tokens.js +14 -4
  90. package/esm/tokens/colors.js +3 -3
  91. package/esm/tree-view/tree-view.js +0 -2
  92. package/form-control/form-control.js +21 -35
  93. package/form-control/form-control.js.flow +37 -35
  94. package/helper/helper.js +10 -6
  95. package/helper/helper.js.flow +1 -0
  96. package/helpers/base-provider.js +5 -1
  97. package/helpers/base-provider.js.flow +4 -1
  98. package/index.d.ts +1 -0
  99. package/input/input.js +9 -5
  100. package/input/input.js.flow +9 -5
  101. package/layer/layer.js +5 -1
  102. package/layer/layer.js.flow +3 -1
  103. package/layer/types.js.flow +4 -0
  104. package/layout-grid/grid.js +19 -9
  105. package/layout-grid/grid.js.flow +52 -26
  106. package/layout-grid/index.d.ts +1 -0
  107. package/layout-grid/styled-components.js +54 -36
  108. package/layout-grid/styled-components.js.flow +48 -24
  109. package/layout-grid/types.js.flow +12 -0
  110. package/list/index.js +9 -0
  111. package/list/index.js.flow +1 -0
  112. package/list/list-heading.js +124 -0
  113. package/list/list-heading.js.flow +138 -0
  114. package/list/list-item.js +1 -1
  115. package/list/list-item.js.flow +1 -1
  116. package/list/menu-adapter.js +5 -2
  117. package/list/menu-adapter.js.flow +21 -11
  118. package/list/styled-components.js +108 -5
  119. package/list/styled-components.js.flow +103 -2
  120. package/list/types.js.flow +22 -0
  121. package/menu/stateful-container.js +57 -42
  122. package/menu/stateful-container.js.flow +38 -26
  123. package/package.json +1 -1
  124. package/phone-input/base-country-picker.js +2 -0
  125. package/phone-input/base-country-picker.js.flow +2 -0
  126. package/popover/popover.js +26 -17
  127. package/popover/popover.js.flow +19 -7
  128. package/select/select-component.js +87 -79
  129. package/select/select-component.js.flow +119 -103
  130. package/snackbar/index.d.ts +3 -3
  131. package/snackbar/types.js.flow +1 -1
  132. package/table-semantic/index.d.ts +1 -0
  133. package/table-semantic/styled-components.js +8 -10
  134. package/table-semantic/styled-components.js.flow +20 -20
  135. package/table-semantic/table-builder.js +3 -2
  136. package/table-semantic/table-builder.js.flow +3 -2
  137. package/table-semantic/table.js +1 -0
  138. package/table-semantic/table.js.flow +1 -0
  139. package/tag/index.d.ts +0 -1
  140. package/tag/index.js +0 -6
  141. package/tag/index.js.flow +0 -1
  142. package/tag/styled-components.js +3 -6
  143. package/tag/styled-components.js.flow +0 -2
  144. package/tag/tag.js +19 -14
  145. package/tag/tag.js.flow +13 -19
  146. package/textarea/textarea.js +1 -2
  147. package/textarea/textarea.js.flow +0 -1
  148. package/theme.ts +12 -0
  149. package/themes/dark-theme/color-semantic-tokens.js +18 -8
  150. package/themes/dark-theme/color-semantic-tokens.js.flow +18 -7
  151. package/themes/light-theme/color-semantic-tokens.js +14 -4
  152. package/themes/light-theme/color-semantic-tokens.js.flow +14 -3
  153. package/themes/types.js.flow +11 -0
  154. package/toast/index.d.ts +1 -0
  155. package/tokens/colors.js +3 -3
  156. package/tokens/colors.js.flow +3 -3
  157. package/tree-view/tree-view.js +0 -2
  158. package/tree-view/tree-view.js.flow +0 -1
  159. package/es/utils/get-bui-id.js +0 -33
  160. package/esm/utils/get-bui-id.js +0 -33
  161. package/utils/get-bui-id.js +0 -41
  162. package/utils/get-bui-id.js.flow +0 -39
@@ -29,12 +29,16 @@ export function Helper(props) {
29
29
  }
30
30
  }
31
31
  }, overrides);
32
- return /*#__PURE__*/React.createElement(Popover, _extends({
33
- "data-baseweb": "helper"
34
- }, restProps, {
35
- placement: placement,
36
- overrides: mergedOverrides
37
- }));
32
+ return (
33
+ /*#__PURE__*/
34
+ //$FlowFixMe
35
+ React.createElement(Popover, _extends({
36
+ "data-baseweb": "helper"
37
+ }, restProps, {
38
+ placement: placement,
39
+ overrides: mergedOverrides
40
+ }))
41
+ );
38
42
  }
39
43
  Helper.defaultProps = { ...Popover.defaultProps,
40
44
  placement: PLACEMENT.bottom,
@@ -5,6 +5,7 @@ This source code is licensed under the MIT license found in the
5
5
  LICENSE file in the root directory of this source tree.
6
6
  */
7
7
  import * as React from 'react';
8
+ import { UIDReset } from 'react-uid';
8
9
  import { LayersManager } from '../layer/index.js';
9
10
  import { ThemeProvider } from '../styles/index.js';
10
11
 
@@ -18,9 +19,11 @@ const BaseProvider = props => {
18
19
  return /*#__PURE__*/React.createElement(LayersManager, {
19
20
  zIndex: zIndex,
20
21
  overrides: overrides
22
+ }, /*#__PURE__*/React.createElement(UIDReset, {
23
+ prefix: "bui"
21
24
  }, /*#__PURE__*/React.createElement(ThemeProvider, {
22
25
  theme: theme
23
- }, children));
26
+ }, children)));
24
27
  };
25
28
 
26
29
  export default BaseProvider;
package/es/input/input.js CHANGED
@@ -67,14 +67,14 @@ class Input extends React.Component {
67
67
  }, sharedProps, rootProps, {
68
68
  $adjoined: getAdjoinedProp(startEnhancer, endEnhancer),
69
69
  $hasIconTrailing: this.props.clearable || this.props.type == 'password'
70
- }), startEnhancer && /*#__PURE__*/React.createElement(StartEnhancer, _extends({}, sharedProps, startEnhancerProps, {
70
+ }), isEnhancer(startEnhancer) && /*#__PURE__*/React.createElement(StartEnhancer, _extends({}, sharedProps, startEnhancerProps, {
71
71
  $position: ENHANCER_POSITION.start
72
72
  }), typeof startEnhancer === 'function' ? startEnhancer(sharedProps) : startEnhancer), /*#__PURE__*/React.createElement(BaseInput, _extends({}, restProps, {
73
73
  overrides: restOverrides,
74
74
  adjoined: getAdjoinedProp(startEnhancer, endEnhancer),
75
75
  onFocus: this.onFocus,
76
76
  onBlur: this.onBlur
77
- })), endEnhancer && /*#__PURE__*/React.createElement(EndEnhancer, _extends({}, sharedProps, endEnhancerProps, {
77
+ })), isEnhancer(endEnhancer) && /*#__PURE__*/React.createElement(EndEnhancer, _extends({}, sharedProps, endEnhancerProps, {
78
78
  $position: ENHANCER_POSITION.end
79
79
  }), typeof endEnhancer === 'function' ? endEnhancer(sharedProps) : endEnhancer));
80
80
  }
@@ -98,15 +98,19 @@ _defineProperty(Input, "defaultProps", {
98
98
  });
99
99
 
100
100
  function getAdjoinedProp(startEnhancer, endEnhancer) {
101
- if (startEnhancer && endEnhancer) {
101
+ if (isEnhancer(startEnhancer) && isEnhancer(endEnhancer)) {
102
102
  return ADJOINED.both;
103
- } else if (startEnhancer) {
103
+ } else if (isEnhancer(startEnhancer)) {
104
104
  return ADJOINED.left;
105
- } else if (endEnhancer) {
105
+ } else if (isEnhancer(endEnhancer)) {
106
106
  return ADJOINED.right;
107
107
  }
108
108
 
109
109
  return ADJOINED.none;
110
110
  }
111
111
 
112
+ function isEnhancer(enhancer) {
113
+ return Boolean(enhancer || enhancer === 0);
114
+ }
115
+
112
116
  export default Input;
package/es/layer/layer.js CHANGED
@@ -48,7 +48,11 @@ class LayerComponent extends React.Component {
48
48
 
49
49
  componentDidMount() {
50
50
  this.context.addEscapeHandler(this.onEscape);
51
- this.context.addDocClickHandler(this.onDocumentClick);
51
+
52
+ if (!this.props.isHoverLayer) {
53
+ this.context.addDocClickHandler(this.onDocumentClick);
54
+ }
55
+
52
56
  const {
53
57
  onMount,
54
58
  mountNode,
@@ -9,7 +9,7 @@ LICENSE file in the root directory of this source tree.
9
9
  import * as React from 'react';
10
10
  import { getOverrides } from '../helpers/overrides.js';
11
11
  import { STYLE, STYLE_VALUES } from './constants.js';
12
- import { StyledGrid as DefaultStyledGrid } from './styled-components.js';
12
+ import { StyledGrid as DefaultStyledGrid, StyledGridWrapper as DefaultStyledGridWrapper } from './styled-components.js';
13
13
  export const GridContext = /*#__PURE__*/React.createContext({});
14
14
  export default function Grid({
15
15
  align,
@@ -25,27 +25,33 @@ export default function Grid({
25
25
  overrides = {}
26
26
  }) {
27
27
  const [StyledGrid, overrideProps] = getOverrides(overrides.Grid, DefaultStyledGrid);
28
+ const [StyledGridWrapper, wrapperProps] = getOverrides(overrides.GridWrapper, DefaultStyledGridWrapper);
28
29
  const presetStyleValues = STYLE_VALUES[gridStyle];
29
- const gridStyleValues = presetStyleValues && {
30
+ const gridStyleValues = presetStyleValues ? {
30
31
  $gridGutters: presetStyleValues.gutters,
31
32
  $gridMargins: presetStyleValues.margins,
32
33
  $gridMaxWidth: presetStyleValues.maxWidth,
33
34
  $gridUnit: presetStyleValues.unit
34
- };
35
+ } : {};
35
36
  const gridContextStyleValues = presetStyleValues && {
36
37
  gridColumns: presetStyleValues.columns,
37
38
  gridGaps: presetStyleValues.gaps,
38
39
  gridGutters: presetStyleValues.gutters,
39
40
  gridUnit: presetStyleValues.unit
40
41
  };
41
- return /*#__PURE__*/React.createElement(StyledGrid, _extends({
42
+ return /*#__PURE__*/React.createElement(StyledGridWrapper, _extends({
43
+ $behavior: behavior,
44
+ $gridMargins: gridMargins != null ? gridMargins : gridStyleValues.$gridMargins,
45
+ $gridMaxWidth: gridMaxWidth != null ? gridMaxWidth : gridStyleValues.$gridMaxWidth,
46
+ $gridUnit: gridUnit != null ? gridUnit : gridStyleValues.$gridUnit
47
+ }, wrapperProps), /*#__PURE__*/React.createElement(StyledGrid, _extends({
42
48
  $align: align,
43
49
  $behavior: behavior,
44
- $gridGutters: gridGutters,
45
- $gridMargins: gridMargins,
46
- $gridMaxWidth: gridMaxWidth,
47
- $gridUnit: gridUnit
48
- }, gridStyleValues, overrideProps), /*#__PURE__*/React.createElement(GridContext.Provider, {
50
+ $gridGutters: gridGutters != null ? gridGutters : gridStyleValues.$gridGutters,
51
+ $gridMargins: gridMargins != null ? gridMargins : gridStyleValues.$gridMargins,
52
+ $gridMaxWidth: gridMaxWidth != null ? gridMaxWidth : gridStyleValues.$gridMaxWidth,
53
+ $gridUnit: gridUnit != null ? gridUnit : gridStyleValues.$gridUnit
54
+ }, overrideProps), /*#__PURE__*/React.createElement(GridContext.Provider, {
49
55
  value: {
50
56
  gridColumns,
51
57
  gridGaps,
@@ -53,5 +59,5 @@ export default function Grid({
53
59
  gridUnit,
54
60
  ...gridContextStyleValues
55
61
  }
56
- }, children));
62
+ }, children)));
57
63
  }
@@ -7,6 +7,17 @@ LICENSE file in the root directory of this source tree.
7
7
  import { styled } from '../styles/index.js';
8
8
  import { getMediaQueries } from '../helpers/responsive-helpers.js';
9
9
  import { BEHAVIOR } from './constants.js';
10
+ export const StyledGridWrapper = styled('div', ({
11
+ $theme,
12
+ $behavior = BEHAVIOR.fixed,
13
+ $gridMargins = $theme.grid.margins,
14
+ $gridMaxWidth = $theme.grid.maxWidth,
15
+ $gridUnit = $theme.grid.unit
16
+ }) => ({
17
+ margin: 'auto',
18
+ maxWidth: $behavior === BEHAVIOR.fixed ? `${$gridMaxWidth + 2 * getResponsiveNumber($gridMargins, Infinity) - 1}${$gridUnit}` : null
19
+ }));
20
+ StyledGridWrapper.displayName = "StyledGridWrapper";
10
21
  export const StyledGrid = styled('div', ({
11
22
  $theme,
12
23
  $align = null,
@@ -20,22 +31,24 @@ export const StyledGrid = styled('div', ({
20
31
  const gridStyles = mediaQueries.reduce((acc, cur, idx) => {
21
32
  return { ...acc,
22
33
  [cur]: {
23
- paddingLeft: `${getResponsiveNumber($gridMargins, idx) - getResponsiveNumber($gridGutters, idx) / 2 - 0.5}${$gridUnit}`,
24
- paddingRight: `${getResponsiveNumber($gridMargins, idx) - getResponsiveNumber($gridGutters, idx) / 2 - 0.5}${$gridUnit}`,
34
+ paddingLeft: `${getResponsiveNumber($gridMargins, idx)}${$gridUnit}`,
35
+ paddingRight: `${getResponsiveNumber($gridMargins, idx)}${$gridUnit}`,
36
+ marginLeft: `-${getResponsiveNumber($gridGutters, idx) / 2}${$gridUnit}`,
37
+ marginRight: `-${getResponsiveNumber($gridGutters, idx) / 2}${$gridUnit}`,
25
38
  alignItems: getResponsiveValue($align, idx)
26
39
  }
27
40
  };
28
41
  }, {
29
- paddingLeft: `${getResponsiveNumber($gridMargins, 0) - getResponsiveNumber($gridGutters, 0) / 2 - 0.5}${$gridUnit}`,
30
- paddingRight: `${getResponsiveNumber($gridMargins, 0) - getResponsiveNumber($gridGutters, 0) / 2 - 0.5}${$gridUnit}`,
42
+ paddingLeft: `${getResponsiveNumber($gridMargins, 0)}${$gridUnit}`,
43
+ paddingRight: `${getResponsiveNumber($gridMargins, 0)}${$gridUnit}`,
44
+ marginLeft: `-${getResponsiveNumber($gridGutters, 0) / 2}${$gridUnit}`,
45
+ marginRight: `-${getResponsiveNumber($gridGutters, 0) / 2}${$gridUnit}`,
31
46
  alignItems: getResponsiveValue($align, 0)
32
47
  });
33
48
  return {
34
49
  boxSizing: 'border-box',
35
50
  display: 'flex',
36
51
  flexWrap: 'wrap',
37
- marginLeft: 'auto',
38
- marginRight: 'auto',
39
52
  maxWidth: $behavior === BEHAVIOR.fixed ? `${$gridMaxWidth + 2 * getResponsiveNumber($gridMargins, Infinity) - 1}${$gridUnit}` : null,
40
53
  ...gridStyles
41
54
  };
@@ -70,10 +83,9 @@ export const StyledCell = styled('div', ({
70
83
  return { ...acc,
71
84
  [cur]: {
72
85
  display: 'block',
73
- width: `${100 / getResponsiveNumber($gridColumns, idx) * Math.min(getResponsiveNumber($span, idx), getResponsiveNumber($gridColumns, idx))}%`,
74
- marginLeft: `${100 / getResponsiveNumber($gridColumns, idx) * Math.min(getResponsiveNumber($skip, idx), getResponsiveNumber($gridColumns, idx) - 1)}%`,
75
- paddingLeft: `${getResponsiveNumber($gridGutters, idx) / 2}${$gridUnit}`,
76
- paddingRight: `${getResponsiveNumber($gridGutters, idx) / 2}${$gridUnit}`,
86
+ width: `calc(${100 / getResponsiveNumber($gridColumns, idx) * Math.min(getResponsiveNumber($span, idx), getResponsiveNumber($gridColumns, idx))}% - ${getResponsiveNumber($gridGutters, idx)}${$gridUnit})`,
87
+ marginLeft: `calc(${100 / getResponsiveNumber($gridColumns, idx) * Math.min(getResponsiveNumber($skip, idx), getResponsiveNumber($gridColumns, idx) - 1)}% + ${getResponsiveNumber($gridGutters, idx) / 2}${$gridUnit})`,
88
+ marginRight: `${getResponsiveNumber($gridGutters, idx) / 2}${$gridUnit}`,
77
89
  marginBottom: `${getResponsiveNumber($gridGaps, idx)}${$gridUnit}`,
78
90
  alignSelf: getResponsiveValue($align, idx),
79
91
  order: getResponsiveNumber($order, idx)
@@ -81,8 +93,8 @@ export const StyledCell = styled('div', ({
81
93
  };
82
94
  }, {
83
95
  width: '100%',
84
- paddingLeft: `${getResponsiveNumber($gridGutters, 0) / 2}${$gridUnit}`,
85
- paddingRight: `${getResponsiveNumber($gridGutters, 0) / 2}${$gridUnit}`,
96
+ marginLeft: `${getResponsiveNumber($gridGutters, 0) / 2}${$gridUnit}`,
97
+ marginRight: `${getResponsiveNumber($gridGutters, 0) / 2}${$gridUnit}`,
86
98
  marginBottom: `${getResponsiveNumber($gridGaps, 0)}${$gridUnit}`,
87
99
  alignSelf: getResponsiveValue($align, 0),
88
100
  order: getResponsiveNumber($order, 0)
package/es/list/index.js CHANGED
@@ -6,6 +6,7 @@ LICENSE file in the root directory of this source tree.
6
6
  */
7
7
  export { default as ListItem } from './list-item.js';
8
8
  export { default as ListItemLabel } from './list-item-label.js';
9
+ export { default as ListHeading } from './list-heading.js';
9
10
  export { default as MenuAdapter } from './menu-adapter.js';
10
11
  export { ARTWORK_SIZES, SHAPE } from './constants.js';
11
12
  export * from './styled-components.js';
@@ -0,0 +1,77 @@
1
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+
3
+ /*
4
+ Copyright (c) Uber Technologies, Inc.
5
+
6
+ This source code is licensed under the MIT license found in the
7
+ LICENSE file in the root directory of this source tree.
8
+ */
9
+ import React from 'react';
10
+ import ReactIs from 'react-is';
11
+ import { getOverrides } from '../helpers/overrides.js';
12
+ import { StyledHeadingRoot, StyledHeadingContent, StyledHeadingContentRow, StyledHeadingEndEnhancerContainer, StyledHeadingEndEnhancerDescriptionContainer, StyledHeadingMainHeading, StyledHeadingSubHeading } from './styled-components.js';
13
+
14
+ function RenderNode(props) {
15
+ const {
16
+ component,
17
+ ...restProps
18
+ } = props;
19
+ const Component = component;
20
+
21
+ if (!Component) {
22
+ return null;
23
+ }
24
+
25
+ if (typeof Component === 'string') {
26
+ return Component;
27
+ }
28
+
29
+ if (ReactIs.isValidElementType(Component)) {
30
+ // $FlowFixMe
31
+ return /*#__PURE__*/React.createElement(Component, restProps);
32
+ } // $FlowFixMe
33
+
34
+
35
+ return Component;
36
+ }
37
+
38
+ const ListHeading = /*#__PURE__*/React.forwardRef((props, ref) => {
39
+ const {
40
+ overrides = {}
41
+ } = props;
42
+ const EndEnhancer = props.endEnhancer;
43
+ const EndEnhancerDescription = props.endEnhancerDescription;
44
+ const SubHeading = props.subHeading;
45
+ const [Root, rootProps] = getOverrides(overrides.Root, StyledHeadingRoot);
46
+ const [Content, contentProps] = getOverrides(overrides.Content, StyledHeadingContent);
47
+ const [HeadingContainer, headingContainerProps] = getOverrides(overrides.HeadingContainer, StyledHeadingMainHeading);
48
+ const [SubHeadingContainer, subHeadingContainerProps] = getOverrides(overrides.SubHeadingContainer, StyledHeadingSubHeading);
49
+ const [EndEnhancerContainer, endEnhancerContainerProps] = getOverrides(overrides.EndEnhancerContainer, StyledHeadingEndEnhancerContainer);
50
+ const [EndEnhancerDescriptionContainer, endEnhancerDescriptionContainerProps] = getOverrides(overrides.EndEnhancerDescriptionContainer, StyledHeadingEndEnhancerDescriptionContainer);
51
+ const isEndEnhancerString = typeof EndEnhancer === 'string';
52
+
53
+ if (isEndEnhancerString && EndEnhancerDescription) {
54
+ console.warn('endEnhancerDescription will not be rendered if endEnhancer is not a string');
55
+ }
56
+
57
+ return /*#__PURE__*/React.createElement(Root // eslint-disable-next-line flowtype/no-weak-types
58
+ , _extends({
59
+ ref: ref
60
+ }, rootProps), /*#__PURE__*/React.createElement(Content, contentProps, /*#__PURE__*/React.createElement(StyledHeadingContentRow, null, /*#__PURE__*/React.createElement(HeadingContainer, _extends({
61
+ $maxLines: props.maxLines
62
+ }, headingContainerProps), /*#__PURE__*/React.createElement(RenderNode, {
63
+ component: props.heading
64
+ })), EndEnhancer && /*#__PURE__*/React.createElement(EndEnhancerContainer, _extends({
65
+ $isText: isEndEnhancerString
66
+ }, endEnhancerContainerProps), /*#__PURE__*/React.createElement(RenderNode, {
67
+ component: EndEnhancer
68
+ }))), (SubHeading || EndEnhancerDescription) && /*#__PURE__*/React.createElement(StyledHeadingContentRow, null, /*#__PURE__*/React.createElement(SubHeadingContainer, _extends({
69
+ $maxLines: props.maxLines
70
+ }, subHeadingContainerProps), /*#__PURE__*/React.createElement(RenderNode, {
71
+ component: SubHeading
72
+ })), EndEnhancerDescription && isEndEnhancerString && /*#__PURE__*/React.createElement(EndEnhancerDescriptionContainer, endEnhancerDescriptionContainerProps, /*#__PURE__*/React.createElement(RenderNode, {
73
+ component: EndEnhancerDescription
74
+ })))));
75
+ });
76
+ ListHeading.displayName = 'ListHeading';
77
+ export default ListHeading;
@@ -50,7 +50,7 @@ const ListItem = /*#__PURE__*/React.forwardRef((props, ref) => {
50
50
  })), /*#__PURE__*/React.createElement(Content, _extends({
51
51
  $mLeft: !Artwork,
52
52
  $sublist: !!props.sublist
53
- }, contentProps), props.children, EndEnhancer && /*#__PURE__*/React.createElement(EndEnhancerContainer, endEnhancerContainerProps, /*#__PURE__*/React.createElement(EndEnhancer, null))));
53
+ }, contentProps), props.children, EndEnhancer && EndEnhancer !== 0 && /*#__PURE__*/React.createElement(EndEnhancerContainer, endEnhancerContainerProps, /*#__PURE__*/React.createElement(EndEnhancer, null))));
54
54
  });
55
55
  ListItem.displayName = 'ListItem';
56
56
  export default ListItem;
@@ -6,6 +6,7 @@ LICENSE file in the root directory of this source tree.
6
6
  */
7
7
  import * as React from 'react';
8
8
  import ListItem from './list-item.js';
9
+ import { mergeOverrides } from '../helpers/overrides.js';
9
10
  const MenuAdapter = /*#__PURE__*/React.forwardRef((props, ref) => {
10
11
  return /*#__PURE__*/React.createElement(ListItem, {
11
12
  ref: ref,
@@ -13,7 +14,8 @@ const MenuAdapter = /*#__PURE__*/React.forwardRef((props, ref) => {
13
14
  artwork: props.artwork,
14
15
  artworkSize: props.artworkSize,
15
16
  endEnhancer: props.endEnhancer,
16
- overrides: {
17
+ overrides: // $FlowFixMe
18
+ mergeOverrides({
17
19
  Root: {
18
20
  props: {
19
21
  onMouseEnter: props.onMouseEnter,
@@ -26,7 +28,7 @@ const MenuAdapter = /*#__PURE__*/React.forwardRef((props, ref) => {
26
28
  cursor: props.$disabled ? 'not-allowed' : 'pointer'
27
29
  })
28
30
  }
29
- }
31
+ }, props.overrides)
30
32
  }, props.children);
31
33
  });
32
34
  MenuAdapter.displayName = 'MenuAdapter';
@@ -37,7 +37,7 @@ export const StyledContent = styled('div', ({
37
37
  borderLeftStyle: 'none',
38
38
  display: 'flex',
39
39
  flexGrow: 1,
40
- minHeight: $sublist ? '48px' : '72px',
40
+ minHeight: $sublist ? 'initial' : $theme.sizing.scale1600,
41
41
  justifyContent: 'space-between',
42
42
  ...($theme.direction === 'rtl' ? {
43
43
  paddingLeft: $theme.sizing.scale600,
@@ -101,8 +101,105 @@ StyledLabelDescription.displayName = "StyledLabelDescription";
101
101
  export const StyledLabelSublistContent = styled('p', ({
102
102
  $theme
103
103
  }) => {
104
- return { ...$theme.typography.ParagraphMedium,
105
- color: $theme.colors.contentPrimary
104
+ return { ...$theme.typography.LabelMedium,
105
+ color: $theme.colors.contentPrimary,
106
+ marginTop: $theme.sizing.scale500,
107
+ marginBottom: $theme.sizing.scale500
108
+ };
109
+ });
110
+ StyledLabelSublistContent.displayName = "StyledLabelSublistContent";
111
+ export const StyledHeadingRoot = styled('div', ({
112
+ $theme
113
+ }) => {
114
+ return {
115
+ display: 'flex',
116
+ alignItems: 'center',
117
+ width: '100%',
118
+ backgroundColor: $theme.colors.backgroundPrimary,
119
+ overflow: 'hidden',
120
+ minHeight: $theme.sizing.scale1600
121
+ };
122
+ });
123
+ StyledHeadingRoot.displayName = "StyledHeadingRoot";
124
+ export const StyledHeadingContent = styled('div', ({
125
+ $theme
126
+ }) => {
127
+ return {
128
+ flexGrow: 1,
129
+ width: '100%',
130
+ minWidth: 0,
131
+ paddingTop: $theme.sizing.scale600,
132
+ paddingBottom: $theme.sizing.scale300,
133
+ ...($theme.direction === 'rtl' ? {
134
+ paddingLeft: $theme.sizing.scale600,
135
+ marginRight: $theme.sizing.scale600
136
+ } : {
137
+ paddingRight: $theme.sizing.scale600,
138
+ marginLeft: $theme.sizing.scale600
139
+ })
140
+ };
141
+ });
142
+ StyledHeadingContent.displayName = "StyledHeadingContent";
143
+ export const StyledHeadingContentRow = styled('div', {
144
+ display: 'flex',
145
+ justifyContent: 'space-between',
146
+ width: '100%'
147
+ });
148
+ StyledHeadingContentRow.displayName = "StyledHeadingContentRow";
149
+ export const StyledHeadingMainHeading = styled('p', // $FlowFixMe - suppressing due to webkit properties
150
+ ({
151
+ $maxLines = 1,
152
+ $theme
153
+ }) => {
154
+ return { ...$theme.typography.HeadingSmall,
155
+ color: $theme.colors.contentPrimary,
156
+ marginTop: 0,
157
+ marginBottom: 0,
158
+ marginRight: $theme.sizing.scale600,
159
+ display: '-webkit-box',
160
+ '-webkit-line-clamp': $maxLines,
161
+ '-webkit-box-orient': 'vertical',
162
+ overflow: 'hidden'
163
+ };
164
+ });
165
+ StyledHeadingMainHeading.displayName = "StyledHeadingMainHeading";
166
+ export const StyledHeadingSubHeading = styled('p', // $FlowFixMe - suppressing due to webkit properties
167
+ ({
168
+ $maxLines = 1,
169
+ $theme
170
+ }) => {
171
+ return { ...$theme.typography.ParagraphLarge,
172
+ color: $theme.colors.contentPrimary,
173
+ marginTop: 0,
174
+ marginBottom: 0,
175
+ marginRight: $theme.sizing.scale600,
176
+ display: '-webkit-box',
177
+ '-webkit-line-clamp': $maxLines,
178
+ '-webkit-box-orient': 'vertical',
179
+ overflow: 'hidden'
106
180
  };
107
181
  });
108
- StyledLabelSublistContent.displayName = "StyledLabelSublistContent";
182
+ StyledHeadingSubHeading.displayName = "StyledHeadingSubHeading";
183
+ export const StyledHeadingEndEnhancerContainer = styled('div', ({
184
+ $isText,
185
+ $theme
186
+ }) => ({ ...$theme.typography.LabelMedium,
187
+ display: 'flex',
188
+ alignItems: $isText ? 'flex-end' : 'center',
189
+ whiteSpace: 'nowrap',
190
+ overflow: 'hidden',
191
+ textOverflow: 'ellipsis'
192
+ }));
193
+ StyledHeadingEndEnhancerContainer.displayName = "StyledHeadingEndEnhancerContainer";
194
+ export const StyledHeadingEndEnhancerDescriptionContainer = styled('p', ({
195
+ $theme
196
+ }) => ({ ...$theme.typography.ParagraphMedium,
197
+ marginTop: 0,
198
+ marginBottom: 0,
199
+ display: 'flex',
200
+ alignItems: 'flex-start',
201
+ whiteSpace: 'nowrap',
202
+ overflow: 'hidden',
203
+ textOverflow: 'ellipsis'
204
+ }));
205
+ StyledHeadingEndEnhancerDescriptionContainer.displayName = "StyledHeadingEndEnhancerDescriptionContainer";
@@ -1,3 +1,5 @@
1
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+
1
3
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
4
 
3
5
  /*
@@ -8,11 +10,34 @@ LICENSE file in the root directory of this source tree.
8
10
  */
9
11
  import * as React from 'react'; // Files
10
12
 
11
- import getBuiId from '../utils/get-bui-id.js';
12
13
  import { STATE_CHANGE_TYPES, KEY_STRINGS } from './constants.js';
13
14
  import { scrollItemIntoView } from './utils.js'; // Types
14
15
 
15
- export default class MenuStatefulContainer extends React.Component {
16
+ import { useUIDSeed } from 'react-uid';
17
+ const DEFAULT_PROPS = {
18
+ // keeping it in defaultProps to satisfy Flow
19
+ initialState: {
20
+ // We start the index at -1 to indicate that no highlighting exists initially
21
+ highlightedIndex: -1,
22
+ isFocused: false
23
+ },
24
+ typeAhead: true,
25
+ keyboardControlNode: {
26
+ current: null
27
+ },
28
+ stateReducer: (changeType, changes) => changes,
29
+ onItemSelect: () => {},
30
+ getRequiredItemProps: () => ({}),
31
+ children: () => null,
32
+ // from nested-menus context
33
+ addMenuToNesting: () => {},
34
+ removeMenuFromNesting: () => {},
35
+ getParentMenu: () => {},
36
+ getChildMenu: () => {},
37
+ forceHighlight: false
38
+ };
39
+
40
+ class MenuStatefulContainerInner extends React.Component {
16
41
  constructor(...args) {
17
42
  super(...args);
18
43
 
@@ -215,7 +240,7 @@ export default class MenuStatefulContainer extends React.Component {
215
240
  if (!itemRef) {
216
241
  itemRef = /*#__PURE__*/React.createRef();
217
242
  this.refList[index] = itemRef;
218
- this.optionIds[index] = getBuiId();
243
+ this.optionIds[index] = this.props.uidSeed(index);
219
244
  }
220
245
 
221
246
  const {
@@ -377,7 +402,7 @@ export default class MenuStatefulContainer extends React.Component {
377
402
  return this.props.children({ ...restProps,
378
403
  rootRef: this.props.rootRef ? this.props.rootRef : this.rootRef,
379
404
  activedescendantId: this.optionIds[this.state.highlightedIndex],
380
- getRequiredItemProps: this.getRequiredItemProps,
405
+ getRequiredItemProps: (item, index) => this.getRequiredItemProps(item, index),
381
406
  handleMouseLeave: this.handleMouseLeave,
382
407
  highlightedIndex: this.state.highlightedIndex,
383
408
  isFocused: this.state.isFocused,
@@ -387,27 +412,16 @@ export default class MenuStatefulContainer extends React.Component {
387
412
  });
388
413
  }
389
414
 
390
- }
415
+ } // Remove when MenuStatefulContainer is converted to a functional component.
391
416
 
392
- _defineProperty(MenuStatefulContainer, "defaultProps", {
393
- // keeping it in defaultProps to satisfy Flow
394
- initialState: {
395
- // We start the index at -1 to indicate that no highlighting exists initially
396
- highlightedIndex: -1,
397
- isFocused: false
398
- },
399
- typeAhead: true,
400
- keyboardControlNode: {
401
- current: null
402
- },
403
- stateReducer: (changeType, changes) => changes,
404
- onItemSelect: () => {},
405
- getRequiredItemProps: () => ({}),
406
- children: () => null,
407
- // from nested-menus context
408
- addMenuToNesting: () => {},
409
- removeMenuFromNesting: () => {},
410
- getParentMenu: () => {},
411
- getChildMenu: () => {},
412
- forceHighlight: false
413
- });
417
+
418
+ _defineProperty(MenuStatefulContainerInner, "defaultProps", DEFAULT_PROPS);
419
+
420
+ const MenuStatefulContainer = props => {
421
+ return /*#__PURE__*/React.createElement(MenuStatefulContainerInner, _extends({
422
+ uidSeed: useUIDSeed()
423
+ }, props));
424
+ };
425
+
426
+ MenuStatefulContainer.defaultProps = DEFAULT_PROPS;
427
+ export default MenuStatefulContainer;
@@ -75,6 +75,8 @@ export default function CountryPicker(props) {
75
75
  width: 0
76
76
  },
77
77
  props: {
78
+ // https://github.com/uber/baseweb/issues/3846
79
+ autoComplete: 'chrome-off',
78
80
  'aria-label': 'Select country'
79
81
  }
80
82
  },
@@ -15,14 +15,14 @@ LICENSE file in the root directory of this source tree.
15
15
  import * as React from 'react';
16
16
  import FocusLock from 'react-focus-lock';
17
17
  import { getOverride, getOverrideProps } from '../helpers/overrides.js';
18
- import getBuiId from '../utils/get-bui-id.js';
19
18
  import { ACCESSIBILITY_TYPE, PLACEMENT, TRIGGER_TYPE, ANIMATE_OUT_TIME, ANIMATE_IN_TIME, POPOVER_MARGIN } from './constants.js';
20
19
  import { Layer, TetherBehavior } from '../layer/index.js';
21
20
  import { Arrow as StyledArrow, Body as StyledBody, Inner as StyledInner, Hidden } from './styled-components.js';
22
21
  import { fromPopperPlacement } from './utils.js';
23
22
  import defaultProps from './default-props.js';
23
+ import { useUID } from 'react-uid';
24
24
 
25
- class Popover extends React.Component {
25
+ class PopoverInner extends React.Component {
26
26
  constructor(...args) {
27
27
  super(...args);
28
28
 
@@ -36,8 +36,6 @@ class Popover extends React.Component {
36
36
 
37
37
  _defineProperty(this, "onMouseLeaveTimer", void 0);
38
38
 
39
- _defineProperty(this, "generatedId", '');
40
-
41
39
  _defineProperty(this, "anchorRef", /*#__PURE__*/React.createRef());
42
40
 
43
41
  _defineProperty(this, "popperRef", /*#__PURE__*/React.createRef());
@@ -150,7 +148,6 @@ class Popover extends React.Component {
150
148
  }
151
149
 
152
150
  componentDidMount() {
153
- this.generatedId = getBuiId();
154
151
  this.setState({
155
152
  isMounted: true
156
153
  });
@@ -270,7 +267,7 @@ class Popover extends React.Component {
270
267
  }
271
268
 
272
269
  getPopoverIdAttr() {
273
- return this.props.id || this.generatedId || null;
270
+ return this.props.id || null;
274
271
  }
275
272
 
276
273
  getAnchorProps() {
@@ -419,7 +416,8 @@ class Popover extends React.Component {
419
416
  const defaultPopperOptions = {
420
417
  modifiers: {
421
418
  preventOverflow: {
422
- enabled: !this.props.ignoreBoundary
419
+ enabled: !this.props.ignoreBoundary,
420
+ padding: 0
423
421
  }
424
422
  }
425
423
  }; // Only render popover on the browser (portals aren't supported server-side)
@@ -430,7 +428,8 @@ class Popover extends React.Component {
430
428
  key: "new-layer",
431
429
  mountNode: this.props.mountNode,
432
430
  onEscape: this.props.onEsc,
433
- onDocumentClick: this.onDocumentClick,
431
+ onDocumentClick: this.isHoverTrigger() ? undefined : this.onDocumentClick,
432
+ isHoverLayer: this.isHoverTrigger(),
434
433
  onMount: () => this.setState({
435
434
  isLayerMounted: true
436
435
  }),
@@ -465,9 +464,21 @@ class Popover extends React.Component {
465
464
  return rendered;
466
465
  }
467
466
 
468
- }
467
+ } // Remove when Popover is converted to a functional component.
468
+
469
+
470
+ _defineProperty(PopoverInner, "defaultProps", defaultProps);
469
471
 
470
- _defineProperty(Popover, "defaultProps", defaultProps);
472
+ const Popover = props => {
473
+ const {
474
+ innerRef
475
+ } = props;
476
+ return /*#__PURE__*/React.createElement(PopoverInner, _extends({
477
+ id: props.id || useUID(),
478
+ ref: innerRef
479
+ }, props));
480
+ };
471
481
 
482
+ Popover.defaultProps = defaultProps;
472
483
  export default Popover;
473
484
  /* eslint-enable react/no-find-dom-node */