@carbon/react 1.30.0 → 1.31.0-rc.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 (79) hide show
  1. package/es/components/Accordion/Accordion.js +3 -1
  2. package/es/components/Button/Button.js +6 -1
  3. package/es/components/Checkbox/Checkbox.js +2 -2
  4. package/es/components/CodeSnippet/CodeSnippet.js +1 -0
  5. package/es/components/ComboButton/index.js +6 -5
  6. package/es/components/ContainedList/ContainedList.js +12 -4
  7. package/es/components/ContainedList/ContainedListItem/ContainedListItem.js +6 -1
  8. package/es/components/ContentSwitcher/ContentSwitcher.js +10 -1
  9. package/es/components/CopyButton/CopyButton.js +8 -2
  10. package/es/components/DataTableSkeleton/DataTableSkeleton.js +1 -2
  11. package/es/components/DataTableSkeleton/index.d.ts +9 -0
  12. package/es/components/FileUploader/FileUploaderButton.js +2 -1
  13. package/es/components/IconButton/index.js +10 -2
  14. package/es/components/Layout/index.js +118 -0
  15. package/es/components/ListBox/ListBoxPropTypes.d.ts +1 -1
  16. package/es/components/Menu/MenuItem.js +2 -1
  17. package/es/components/MenuButton/index.js +7 -4
  18. package/es/components/OverflowMenu/index.js +9 -1
  19. package/es/components/OverflowMenu/next/index.js +98 -0
  20. package/es/components/OverflowMenuV2/index.js +15 -73
  21. package/es/components/Tabs/Tabs.js +5 -1
  22. package/es/components/Tag/Tag.js +2 -0
  23. package/es/components/TextArea/TextArea.Skeleton.js +1 -2
  24. package/es/components/TextArea/TextArea.js +1 -2
  25. package/es/components/TextArea/index.d.ts +10 -0
  26. package/es/components/TextInput/PasswordInput.js +1 -2
  27. package/es/components/TextInput/TextInput.Skeleton.js +1 -2
  28. package/es/components/TextInput/TextInput.js +5 -4
  29. package/es/components/TextInput/index.d.ts +4 -0
  30. package/es/components/TimePicker/TimePicker.d.ts +8 -0
  31. package/es/components/TimePicker/TimePicker.js +26 -6
  32. package/es/components/Tooltip/Tooltip.js +4 -2
  33. package/es/components/UIShell/SideNav.d.ts +2 -1
  34. package/es/components/UIShell/SideNav.js +25 -7
  35. package/es/index.d.ts +21 -20
  36. package/es/index.js +28 -26
  37. package/lib/components/Accordion/Accordion.js +3 -1
  38. package/lib/components/Button/Button.js +6 -1
  39. package/lib/components/Checkbox/Checkbox.js +2 -2
  40. package/lib/components/CodeSnippet/CodeSnippet.js +1 -0
  41. package/lib/components/ComboButton/index.js +6 -5
  42. package/lib/components/ContainedList/ContainedList.js +12 -4
  43. package/lib/components/ContainedList/ContainedListItem/ContainedListItem.js +6 -1
  44. package/lib/components/ContentSwitcher/ContentSwitcher.js +10 -1
  45. package/lib/components/CopyButton/CopyButton.js +8 -2
  46. package/lib/components/DataTableSkeleton/DataTableSkeleton.js +1 -2
  47. package/lib/components/DataTableSkeleton/index.d.ts +9 -0
  48. package/lib/components/FileUploader/FileUploaderButton.js +2 -1
  49. package/lib/components/IconButton/index.js +10 -2
  50. package/lib/components/Layout/index.js +129 -0
  51. package/lib/components/ListBox/ListBoxPropTypes.d.ts +1 -1
  52. package/lib/components/Menu/MenuItem.js +2 -1
  53. package/lib/components/MenuButton/index.js +7 -4
  54. package/lib/components/OverflowMenu/index.js +13 -1
  55. package/lib/components/OverflowMenu/next/index.js +108 -0
  56. package/lib/components/OverflowMenuV2/index.js +14 -74
  57. package/lib/components/Tabs/Tabs.js +5 -1
  58. package/lib/components/Tag/Tag.js +2 -0
  59. package/lib/components/TextArea/TextArea.Skeleton.js +1 -2
  60. package/lib/components/TextArea/TextArea.js +1 -2
  61. package/lib/components/TextArea/index.d.ts +10 -0
  62. package/lib/components/TextInput/PasswordInput.js +1 -2
  63. package/lib/components/TextInput/TextInput.Skeleton.js +1 -2
  64. package/lib/components/TextInput/TextInput.js +5 -4
  65. package/lib/components/TextInput/index.d.ts +4 -0
  66. package/lib/components/TimePicker/TimePicker.d.ts +8 -0
  67. package/lib/components/TimePicker/TimePicker.js +26 -6
  68. package/lib/components/Tooltip/Tooltip.js +4 -2
  69. package/lib/components/UIShell/SideNav.d.ts +2 -1
  70. package/lib/components/UIShell/SideNav.js +24 -6
  71. package/lib/index.d.ts +21 -20
  72. package/lib/index.js +88 -85
  73. package/package.json +8 -8
  74. /package/es/components/{Layout → LayoutDirection}/LayoutDirection.js +0 -0
  75. /package/es/components/{Layout → LayoutDirection}/LayoutDirectionContext.js +0 -0
  76. /package/es/components/{Layout → LayoutDirection}/useLayoutDirection.js +0 -0
  77. /package/lib/components/{Layout → LayoutDirection}/LayoutDirection.js +0 -0
  78. /package/lib/components/{Layout → LayoutDirection}/LayoutDirectionContext.js +0 -0
  79. /package/lib/components/{Layout → LayoutDirection}/useLayoutDirection.js +0 -0
@@ -9,10 +9,22 @@
9
9
 
10
10
  Object.defineProperty(exports, '__esModule', { value: true });
11
11
 
12
+ var React = require('react');
13
+ var index = require('../FeatureFlags/index.js');
14
+ var index$1 = require('./next/index.js');
12
15
  var OverflowMenu$1 = require('./OverflowMenu.js');
13
16
  var createClassWrapper = require('../../internal/createClassWrapper.js');
14
17
 
15
- const OverflowMenu = createClassWrapper.createClassWrapper(OverflowMenu$1.OverflowMenu);
18
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
19
+
20
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
21
+
22
+ const OverflowMenuV11 = createClassWrapper.createClassWrapper(OverflowMenu$1.OverflowMenu);
23
+ function OverflowMenu(props) {
24
+ const enableV12OverflowMenu = index.useFeatureFlag('enable-v12-overflowmenu');
25
+ return enableV12OverflowMenu ? /*#__PURE__*/React__default["default"].createElement(index$1.OverflowMenu, props) : /*#__PURE__*/React__default["default"].createElement(OverflowMenuV11, props);
26
+ }
27
+ OverflowMenu.displayName = 'OverflowMenu';
16
28
 
17
29
  exports.OverflowMenu = OverflowMenu;
18
30
  exports["default"] = OverflowMenu;
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Copyright IBM Corp. 2016, 2023
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ 'use strict';
9
+
10
+ Object.defineProperty(exports, '__esModule', { value: true });
11
+
12
+ var _rollupPluginBabelHelpers = require('../../../_virtual/_rollupPluginBabelHelpers.js');
13
+ var React = require('react');
14
+ var PropTypes = require('prop-types');
15
+ var cx = require('classnames');
16
+ var iconsReact = require('@carbon/icons-react');
17
+ var index = require('../../IconButton/index.js');
18
+ var Menu = require('../../Menu/Menu.js');
19
+ var useId = require('../../../internal/useId.js');
20
+ var usePrefix = require('../../../internal/usePrefix.js');
21
+ var useAttachedMenu = require('../../../internal/useAttachedMenu.js');
22
+
23
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
24
+
25
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
26
+ var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
27
+ var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
28
+
29
+ const defaultSize = 'md';
30
+ const OverflowMenu = /*#__PURE__*/React__default["default"].forwardRef(function OverflowMenu(_ref, forwardRef) {
31
+ let {
32
+ children,
33
+ className,
34
+ label = 'Options',
35
+ renderIcon: IconElement = iconsReact.OverflowMenuVertical,
36
+ size = defaultSize,
37
+ tooltipAlignment,
38
+ ...rest
39
+ } = _ref;
40
+ const id = useId.useId('overflowmenu');
41
+ const prefix = usePrefix.usePrefix();
42
+ const triggerRef = React.useRef(null);
43
+ const {
44
+ open,
45
+ x,
46
+ y,
47
+ handleClick,
48
+ handleMousedown,
49
+ handleClose
50
+ } = useAttachedMenu.useAttachedMenu(triggerRef);
51
+ const containerClasses = cx__default["default"](className, `${prefix}--overflow-menu__container`);
52
+ const triggerClasses = cx__default["default"](`${prefix}--overflow-menu`, {
53
+ [`${prefix}--overflow-menu--open`]: open
54
+ }, size !== defaultSize && `${prefix}--overflow-menu--${size}`);
55
+ return /*#__PURE__*/React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({}, rest, {
56
+ className: containerClasses,
57
+ "aria-owns": open ? id : null,
58
+ ref: forwardRef
59
+ }), /*#__PURE__*/React__default["default"].createElement(index.IconButton, {
60
+ "aria-controls": open ? id : null,
61
+ "aria-haspopup": true,
62
+ "aria-expanded": open,
63
+ className: triggerClasses,
64
+ onClick: handleClick,
65
+ onMouseDown: handleMousedown,
66
+ ref: triggerRef,
67
+ label: label,
68
+ align: tooltipAlignment
69
+ }, /*#__PURE__*/React__default["default"].createElement(IconElement, {
70
+ className: `${prefix}--overflow-menu__icon`
71
+ })), /*#__PURE__*/React__default["default"].createElement(Menu.Menu, {
72
+ id: id,
73
+ size: size,
74
+ open: open,
75
+ onClose: handleClose,
76
+ x: x,
77
+ y: y,
78
+ label: label
79
+ }, children));
80
+ });
81
+ OverflowMenu.propTypes = {
82
+ /**
83
+ * A collection of MenuItems to be rendered within this OverflowMenu.
84
+ */
85
+ children: PropTypes__default["default"].node,
86
+ /**
87
+ * Additional CSS class names for the trigger button.
88
+ */
89
+ className: PropTypes__default["default"].string,
90
+ /**
91
+ * A label describing the options available. Is used in the trigger tooltip and as the menu's accessible label.
92
+ */
93
+ label: PropTypes__default["default"].string,
94
+ /**
95
+ * Otionally provide a custom icon to be rendered on the trigger button.
96
+ */
97
+ renderIcon: PropTypes__default["default"].oneOfType([PropTypes__default["default"].func, PropTypes__default["default"].object]),
98
+ /**
99
+ * Specify the size of the menu, from a list of available sizes.
100
+ */
101
+ size: PropTypes__default["default"].oneOf(['sm', 'md', 'lg']),
102
+ /**
103
+ * Specify how the trigger tooltip should be aligned.
104
+ */
105
+ tooltipAlignment: PropTypes__default["default"].oneOf(['top', 'top-left', 'top-right', 'bottom', 'bottom-left', 'bottom-right', 'left', 'right'])
106
+ };
107
+
108
+ exports.OverflowMenu = OverflowMenu;
@@ -9,86 +9,26 @@
9
9
 
10
10
  Object.defineProperty(exports, '__esModule', { value: true });
11
11
 
12
- var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelpers.js');
13
12
  var React = require('react');
14
- var PropTypes = require('prop-types');
15
- var cx = require('classnames');
16
- var iconsReact = require('@carbon/icons-react');
17
- var Menu = require('../Menu/Menu.js');
18
- var useId = require('../../internal/useId.js');
19
- var usePrefix = require('../../internal/usePrefix.js');
20
- var useAttachedMenu = require('../../internal/useAttachedMenu.js');
13
+ var warning = require('../../internal/warning.js');
14
+ var index = require('../FeatureFlags/index.js');
15
+ var index$1 = require('../OverflowMenu/index.js');
21
16
 
22
17
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
23
18
 
24
19
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
25
- var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
26
- var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
27
20
 
28
- const defaultSize = 'md';
29
- function OverflowMenuV2(_ref) {
30
- let {
31
- children,
32
- className,
33
- renderIcon: IconElement = iconsReact.OverflowMenuVertical,
34
- size = defaultSize,
35
- ...rest
36
- } = _ref;
37
- const id = useId.useId('overflowmenu');
38
- const prefix = usePrefix.usePrefix();
39
- const triggerRef = React.useRef(null);
40
- const {
41
- open,
42
- x,
43
- y,
44
- handleClick,
45
- handleMousedown,
46
- handleClose
47
- } = useAttachedMenu.useAttachedMenu(triggerRef);
48
- const containerClasses = cx__default["default"](`${prefix}--overflow-menu__container`);
49
- const triggerClasses = cx__default["default"](`${prefix}--overflow-menu`, {
50
- [`${prefix}--overflow-menu--open`]: open,
51
- [className]: className
52
- }, size !== defaultSize && `${prefix}--overflow-menu--${size}`);
53
- return /*#__PURE__*/React__default["default"].createElement("div", {
54
- className: containerClasses,
55
- "aria-owns": id
56
- }, /*#__PURE__*/React__default["default"].createElement("button", _rollupPluginBabelHelpers["extends"]({}, rest, {
57
- type: "button",
58
- "aria-haspopup": true,
59
- "aria-expanded": open,
60
- className: triggerClasses,
61
- onClick: handleClick,
62
- onMouseDown: handleMousedown,
63
- ref: triggerRef
64
- }), /*#__PURE__*/React__default["default"].createElement(IconElement, {
65
- className: `${prefix}--overflow-menu__icon`
66
- })), /*#__PURE__*/React__default["default"].createElement(Menu.Menu, {
67
- id: id,
68
- size: size,
69
- open: open,
70
- onClose: handleClose,
71
- x: x,
72
- y: y
73
- }, children));
21
+ let didWarnAboutDeprecation = false;
22
+ function OverflowMenuV2(props) {
23
+ if (process.env.NODE_ENV !== "production") {
24
+ process.env.NODE_ENV !== "production" ? warning.warning(didWarnAboutDeprecation, '`<OverflowMenuV2>` is deprecated and will be removed in the next major version. Use `<OverflowMenu>` with the `enable-v12-overflowmenu` feature flag instead.') : void 0;
25
+ didWarnAboutDeprecation = true;
26
+ }
27
+ return /*#__PURE__*/React__default["default"].createElement(index.FeatureFlags, {
28
+ flags: {
29
+ 'enable-v12-overflowmenu': true
30
+ }
31
+ }, /*#__PURE__*/React__default["default"].createElement(index$1["default"], props));
74
32
  }
75
- OverflowMenuV2.propTypes = {
76
- /**
77
- * A collection of MenuItems to be rendered within this OverflowMenu.
78
- */
79
- children: PropTypes__default["default"].node,
80
- /**
81
- * Additional CSS class names for the trigger button.
82
- */
83
- className: PropTypes__default["default"].string,
84
- /**
85
- * Otionally provide a custom icon to be rendered on the trigger button.
86
- */
87
- renderIcon: PropTypes__default["default"].oneOfType([PropTypes__default["default"].func, PropTypes__default["default"].object]),
88
- /**
89
- * Specify the size of the menu, from a list of available sizes.
90
- */
91
- size: PropTypes__default["default"].oneOf(['sm', 'md', 'lg'])
92
- };
93
33
 
94
34
  exports.OverflowMenuV2 = OverflowMenuV2;
@@ -552,7 +552,11 @@ const Tab = /*#__PURE__*/React__default["default"].forwardRef(function Tab(_ref5
552
552
  type: "button"
553
553
  }), /*#__PURE__*/React__default["default"].createElement("div", {
554
554
  className: `${prefix}--tabs__nav-item-label-wrapper`
555
- }, /*#__PURE__*/React__default["default"].createElement("span", {
555
+ }, dismissable && Icon && /*#__PURE__*/React__default["default"].createElement("div", {
556
+ className: `${prefix}--tabs__nav-item--icon-left`
557
+ }, /*#__PURE__*/React__default["default"].createElement(Icon, {
558
+ size: 16
559
+ })), /*#__PURE__*/React__default["default"].createElement("span", {
556
560
  className: `${prefix}--tabs__nav-item-label`
557
561
  }, children), /*#__PURE__*/React__default["default"].createElement("div", {
558
562
  className: cx__default["default"](`${prefix}--tabs__nav-item--icon`, {
@@ -59,6 +59,8 @@ const Tag = _ref => {
59
59
  [`${prefix}--tag--disabled`]: disabled,
60
60
  [`${prefix}--tag--filter`]: filter,
61
61
  [`${prefix}--tag--${size}`]: size,
62
+ // TODO: V12 - Remove this class
63
+ [`${prefix}--layout--size-${size}`]: size,
62
64
  [`${prefix}--tag--${type}`]: type,
63
65
  [`${prefix}--tag--interactive`]: other.onClick && !filter
64
66
  });
@@ -46,7 +46,6 @@ TextAreaSkeleton.propTypes = {
46
46
  */
47
47
  hideLabel: PropTypes__default["default"].bool
48
48
  };
49
- var TextAreaSkeleton$1 = TextAreaSkeleton;
50
49
 
51
50
  exports.TextAreaSkeleton = TextAreaSkeleton;
52
- exports["default"] = TextAreaSkeleton$1;
51
+ exports["default"] = TextAreaSkeleton;
@@ -279,6 +279,5 @@ TextArea.defaultProps = {
279
279
  warn: false,
280
280
  warnText: ''
281
281
  };
282
- var TextArea$1 = TextArea;
283
282
 
284
- exports["default"] = TextArea$1;
283
+ exports["default"] = TextArea;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Copyright IBM Corp. 2016, 2023
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import TextArea from './TextArea';
8
+ export { default as TextAreaSkeleton } from './TextArea.Skeleton';
9
+ export default TextArea;
10
+ export { TextArea };
@@ -285,6 +285,5 @@ PasswordInput.propTypes = {
285
285
  */
286
286
  warnText: PropTypes__default["default"].node
287
287
  };
288
- var PasswordInput$1 = PasswordInput;
289
288
 
290
- exports["default"] = PasswordInput$1;
289
+ exports["default"] = PasswordInput;
@@ -46,7 +46,6 @@ TextInputSkeleton.propTypes = {
46
46
  */
47
47
  hideLabel: PropTypes__default["default"].bool
48
48
  };
49
- var TextInputSkeleton$1 = TextInputSkeleton;
50
49
 
51
50
  exports.TextInputSkeleton = TextInputSkeleton;
52
- exports["default"] = TextInputSkeleton$1;
51
+ exports["default"] = TextInputSkeleton;
@@ -44,7 +44,7 @@ const TextInput = /*#__PURE__*/React__default["default"].forwardRef(function Tex
44
44
  onClick = () => {},
45
45
  placeholder,
46
46
  readOnly,
47
- size = 'md',
47
+ size,
48
48
  type = 'text',
49
49
  warn = false,
50
50
  warnText,
@@ -71,7 +71,9 @@ const TextInput = /*#__PURE__*/React__default["default"].forwardRef(function Tex
71
71
  [`${prefix}--text-input--light`]: light,
72
72
  [`${prefix}--text-input--invalid`]: normalizedProps.invalid,
73
73
  [`${prefix}--text-input--warning`]: normalizedProps.warn,
74
- [`${prefix}--text-input--${size}`]: size
74
+ [`${prefix}--text-input--${size}`]: size,
75
+ // TODO: V12 - Remove this class
76
+ [`${prefix}--layout--size-${size}`]: size
75
77
  });
76
78
  const sharedTextInputProps = {
77
79
  id,
@@ -270,6 +272,5 @@ TextInput.propTypes = {
270
272
  */
271
273
  warnText: PropTypes__default["default"].node
272
274
  };
273
- var TextInput$1 = TextInput;
274
275
 
275
- exports["default"] = TextInput$1;
276
+ exports["default"] = TextInput;
@@ -0,0 +1,4 @@
1
+ import TextInput from './TextInput';
2
+ export { default as TextInputSkeleton } from './TextInput.Skeleton';
3
+ export default TextInput;
4
+ export { TextInput };
@@ -36,6 +36,14 @@ export interface TimePickerProps extends Omit<ReactAttr<HTMLInputElement>, Exclu
36
36
  * Provide the text that is displayed when the control is in an invalid state
37
37
  */
38
38
  invalidText?: React.ReactNode;
39
+ /**
40
+ * Specify a warning message
41
+ */
42
+ warning?: boolean;
43
+ /**
44
+ * Provide the text that is displayed when the control is in an warning state
45
+ */
46
+ warningText?: React.ReactNode;
39
47
  /**
40
48
  * Provide the text that will be read by a screen reader when visiting this
41
49
  * control
@@ -15,6 +15,7 @@ var PropTypes = require('prop-types');
15
15
  var React = require('react');
16
16
  var usePrefix = require('../../internal/usePrefix.js');
17
17
  var deprecate = require('../../prop-types/deprecate.js');
18
+ var iconsReact = require('@carbon/icons-react');
18
19
 
19
20
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
20
21
 
@@ -31,6 +32,8 @@ const TimePicker = /*#__PURE__*/React__default["default"].forwardRef(function Ti
31
32
  id,
32
33
  invalidText = 'Invalid time format.',
33
34
  invalid = false,
35
+ warningText = 'Warning message.',
36
+ warning = false,
34
37
  labelText,
35
38
  light = false,
36
39
  maxLength = 5,
@@ -75,12 +78,14 @@ const TimePicker = /*#__PURE__*/React__default["default"].forwardRef(function Ti
75
78
  }
76
79
  }
77
80
  const timePickerInputClasses = cx__default["default"](`${prefix}--time-picker__input-field`, `${prefix}--text-input`, [className], {
78
- [`${prefix}--text-input--light`]: light
81
+ [`${prefix}--text-input--light`]: light,
82
+ [`${prefix}--time-picker__input-field-error`]: invalid || warning
79
83
  });
80
84
  const timePickerClasses = cx__default["default"]({
81
85
  [`${prefix}--time-picker`]: true,
82
86
  [`${prefix}--time-picker--light`]: light,
83
87
  [`${prefix}--time-picker--invalid`]: invalid,
88
+ [`${prefix}--time-picker--warning`]: warning,
84
89
  [`${prefix}--time-picker--readonly`]: readOnly,
85
90
  [`${prefix}--time-picker--${size}`]: size,
86
91
  ...(className && {
@@ -95,9 +100,6 @@ const TimePicker = /*#__PURE__*/React__default["default"].forwardRef(function Ti
95
100
  htmlFor: id,
96
101
  className: labelClasses
97
102
  }, labelText) : null;
98
- const error = invalid ? /*#__PURE__*/React__default["default"].createElement("div", {
99
- className: `${prefix}--form-requirement`
100
- }, invalidText) : null;
101
103
  function getInternalPickerSelects() {
102
104
  const readOnlyEventHandlers = {
103
105
  onMouseDown: evt => {
@@ -150,7 +152,17 @@ const TimePicker = /*#__PURE__*/React__default["default"].forwardRef(function Ti
150
152
  ref: ref,
151
153
  type: type,
152
154
  value: value
153
- }, rest, readOnlyProps))), getInternalPickerSelects()), error);
155
+ }, rest, readOnlyProps)), (invalid || warning) && /*#__PURE__*/React__default["default"].createElement("div", {
156
+ className: `${prefix}--time-picker__error__icon`
157
+ }, invalid ? /*#__PURE__*/React__default["default"].createElement(iconsReact.WarningFilled, {
158
+ className: `${prefix}--checkbox__invalid-icon`,
159
+ size: 16
160
+ }) : /*#__PURE__*/React__default["default"].createElement(iconsReact.WarningAltFilled, {
161
+ className: `${prefix}--text-input__invalid-icon--warning`,
162
+ size: 16
163
+ }))), getInternalPickerSelects()), (invalid || warning) && /*#__PURE__*/React__default["default"].createElement("div", {
164
+ className: `${prefix}--form-requirement`
165
+ }, invalid ? invalidText : warningText));
154
166
  });
155
167
  TimePicker.propTypes = {
156
168
  /**
@@ -232,7 +244,15 @@ TimePicker.propTypes = {
232
244
  /**
233
245
  * Specify the value of the `<input>`
234
246
  */
235
- value: PropTypes__default["default"].string
247
+ value: PropTypes__default["default"].string,
248
+ /**
249
+ * Specify a warning message
250
+ */
251
+ warning: PropTypes__default["default"].bool,
252
+ /**
253
+ * Provide the text that is displayed when the control is in an warning state
254
+ */
255
+ warningText: PropTypes__default["default"].node
236
256
  };
237
257
  var TimePicker$1 = TimePicker;
238
258
 
@@ -104,10 +104,12 @@ function Tooltip(_ref) {
104
104
  onMouseLeave: onMouseLeave,
105
105
  open: open,
106
106
  ref: containerRef
107
- }), child !== undefined ? /*#__PURE__*/React__default["default"].cloneElement(child, {
107
+ }), /*#__PURE__*/React__default["default"].createElement("div", {
108
+ className: `${prefix}--tooltip-trigger__wrapper`
109
+ }, child !== undefined ? /*#__PURE__*/React__default["default"].cloneElement(child, {
108
110
  ...triggerProps,
109
111
  ...getChildEventHandlers(child.props)
110
- }) : null, /*#__PURE__*/React__default["default"].createElement(index.PopoverContent, {
112
+ }) : null), /*#__PURE__*/React__default["default"].createElement(index.PopoverContent, {
111
113
  "aria-hidden": "true",
112
114
  className: `${prefix}--tooltip-content`,
113
115
  id: id,
@@ -18,6 +18,7 @@ interface SideNavProps extends ComponentProps<'nav'> {
18
18
  addMouseListeners?: boolean | undefined;
19
19
  onOverlayClick?: MouseEventHandler<HTMLDivElement> | undefined;
20
20
  onSideNavBlur?: () => void | undefined;
21
+ enterDelayMs?: number;
21
22
  }
22
- declare const SideNav: React.ForwardRefExoticComponent<Pick<SideNavProps, "children" | "className" | "slot" | "style" | "title" | "dir" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "onToggle" | "key" | "id" | "onAnimationEnd" | "aria-controls" | "aria-expanded" | "onClick" | "onKeyDown" | "contentEditable" | "contextMenu" | "draggable" | "hidden" | "lang" | "placeholder" | "spellCheck" | "tabIndex" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "href" | "expanded" | "defaultExpanded" | "isChildOfHeader" | "isFixedNav" | "isRail" | "isPersistent" | "addFocusListeners" | "addMouseListeners" | "onOverlayClick" | "onSideNavBlur"> & React.RefAttributes<HTMLElement>>;
23
+ declare const SideNav: React.ForwardRefExoticComponent<Pick<SideNavProps, "children" | "className" | "slot" | "style" | "title" | "dir" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "onToggle" | "key" | "id" | "onAnimationEnd" | "aria-controls" | "aria-expanded" | "onClick" | "onKeyDown" | "contentEditable" | "contextMenu" | "draggable" | "hidden" | "lang" | "placeholder" | "spellCheck" | "tabIndex" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "href" | "enterDelayMs" | "expanded" | "defaultExpanded" | "isChildOfHeader" | "isFixedNav" | "isRail" | "isPersistent" | "addFocusListeners" | "addMouseListeners" | "onOverlayClick" | "onSideNavBlur"> & React.RefAttributes<HTMLElement>>;
23
24
  export default SideNav;
@@ -18,6 +18,7 @@ var _utils = require('./_utils.js');
18
18
  var usePrefix = require('../../internal/usePrefix.js');
19
19
  var useMergedRefs = require('../../internal/useMergedRefs.js');
20
20
  var useEvent = require('../../internal/useEvent.js');
21
+ var useDelayedState = require('../../internal/useDelayedState.js');
21
22
  var match = require('../../internal/keyboard/match.js');
22
23
  var keys = require('../../internal/keyboard/keys.js');
23
24
 
@@ -49,27 +50,28 @@ function SideNavRenderFunction(_ref, ref) {
49
50
  addMouseListeners = true,
50
51
  onOverlayClick,
51
52
  onSideNavBlur,
53
+ enterDelayMs = 100,
52
54
  ...other
53
55
  } = _ref;
54
56
  const prefix = usePrefix.usePrefix();
55
57
  const {
56
58
  current: controlled
57
59
  } = React.useRef(expandedProp !== undefined);
58
- const [expandedState, setExpandedState] = React.useState(defaultExpanded);
59
- const [expandedViaHoverState, setExpandedViaHoverState] = React.useState(defaultExpanded);
60
+ const [expandedState, setExpandedState] = useDelayedState.useDelayedState(defaultExpanded);
61
+ const [expandedViaHoverState, setExpandedViaHoverState] = useDelayedState.useDelayedState(defaultExpanded);
60
62
  const expanded = controlled ? expandedProp : expandedState;
61
63
  const sideNavRef = React.useRef(null);
62
64
  const navRef = useMergedRefs.useMergedRefs([sideNavRef, ref]);
63
65
  const handleToggle = function (event) {
64
66
  let value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : !expanded;
65
67
  if (!controlled) {
66
- setExpandedState(value);
68
+ setExpandedState(value, enterDelayMs);
67
69
  }
68
70
  if (onToggle) {
69
71
  onToggle(event, value);
70
72
  }
71
73
  if (controlled || isRail) {
72
- setExpandedViaHoverState(value);
74
+ setExpandedViaHoverState(value, enterDelayMs);
73
75
  }
74
76
  };
75
77
  const accessibilityLabel = {
@@ -140,8 +142,20 @@ function SideNavRenderFunction(_ref, ref) {
140
142
  };
141
143
  }
142
144
  if (addMouseListeners && isRail) {
143
- eventHandlers.onMouseEnter = () => handleToggle(true, true);
144
- eventHandlers.onMouseLeave = () => handleToggle(false, false);
145
+ eventHandlers.onMouseEnter = () => {
146
+ handleToggle(true, true);
147
+ };
148
+ eventHandlers.onMouseLeave = () => {
149
+ setExpandedState(false);
150
+ setExpandedViaHoverState(false);
151
+ handleToggle(false, false);
152
+ };
153
+ eventHandlers.onClick = () => {
154
+ //if delay is enabled, and user intentionally clicks it to see it expanded immediately
155
+ setExpandedState(true);
156
+ setExpandedViaHoverState(true);
157
+ handleToggle(true, true);
158
+ };
145
159
  }
146
160
  useEvent.useWindowEvent('keydown', event => {
147
161
  const focusedElement = document.activeElement;
@@ -184,6 +198,10 @@ SideNav.propTypes = {
184
198
  * If `true`, the SideNav will be open on initial render.
185
199
  */
186
200
  defaultExpanded: PropTypes__default["default"].bool,
201
+ /**
202
+ * Specify the duration in milliseconds to delay before displaying the sidenavigation
203
+ */
204
+ enterDelayMs: PropTypes__default["default"].number,
187
205
  /**
188
206
  * If `true`, the SideNav will be expanded, otherwise it will be collapsed.
189
207
  * Using this prop causes SideNav to become a controled component.