@carbon/react 1.30.0 → 1.31.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 (121) hide show
  1. package/es/components/Accordion/Accordion.js +3 -1
  2. package/es/components/AspectRatio/AspectRatio.d.ts +67 -0
  3. package/es/components/AspectRatio/AspectRatio.js +2 -2
  4. package/es/components/AspectRatio/index.d.ts +7 -0
  5. package/es/components/Button/Button.js +6 -1
  6. package/es/components/Checkbox/Checkbox.js +2 -2
  7. package/es/components/CodeSnippet/CodeSnippet.js +1 -0
  8. package/es/components/ComboButton/index.js +6 -5
  9. package/es/components/ContainedList/ContainedList.js +12 -4
  10. package/es/components/ContainedList/ContainedListItem/ContainedListItem.js +6 -1
  11. package/es/components/ContentSwitcher/ContentSwitcher.js +10 -1
  12. package/es/components/CopyButton/CopyButton.js +8 -2
  13. package/es/components/DataTable/DataTable.js +8 -2
  14. package/es/components/DataTable/Table.d.ts +6 -1
  15. package/es/components/DataTable/Table.js +78 -3
  16. package/es/components/DataTable/TableHeader.js +2 -1
  17. package/es/components/DataTableSkeleton/DataTableSkeleton.js +1 -2
  18. package/es/components/DataTableSkeleton/index.d.ts +9 -0
  19. package/es/components/ExpandableSearch/ExpandableSearch.d.ts +1 -1
  20. package/es/components/ExpandableSearch/ExpandableSearch.js +6 -2
  21. package/es/components/FileUploader/FileUploaderButton.js +2 -1
  22. package/es/components/IconButton/index.js +10 -2
  23. package/es/components/Layout/index.js +118 -0
  24. package/es/components/Link/Link.d.ts +53 -0
  25. package/es/components/Link/Link.js +4 -3
  26. package/es/components/Link/index.d.ts +9 -0
  27. package/es/components/ListBox/ListBoxPropTypes.d.ts +1 -1
  28. package/es/components/Menu/MenuItem.js +2 -1
  29. package/es/components/MenuButton/index.js +7 -4
  30. package/es/components/OverflowMenu/index.js +9 -1
  31. package/es/components/OverflowMenu/next/index.js +98 -0
  32. package/es/components/OverflowMenuV2/index.js +15 -73
  33. package/es/components/RadioButtonGroup/RadioButtonGroup.js +0 -1
  34. package/es/components/Search/Search.d.ts +4 -0
  35. package/es/components/Search/Search.js +8 -2
  36. package/es/components/Select/Select.d.ts +1 -1
  37. package/es/components/Tabs/Tabs.js +5 -1
  38. package/es/components/Tag/Tag.js +2 -0
  39. package/es/components/TextArea/TextArea.Skeleton.js +1 -2
  40. package/es/components/TextArea/TextArea.js +1 -2
  41. package/es/components/TextArea/index.d.ts +10 -0
  42. package/es/components/TextInput/PasswordInput.js +1 -2
  43. package/es/components/TextInput/TextInput.Skeleton.js +1 -2
  44. package/es/components/TextInput/TextInput.js +5 -4
  45. package/es/components/TextInput/index.d.ts +4 -0
  46. package/es/components/TimePicker/TimePicker.d.ts +8 -0
  47. package/es/components/TimePicker/TimePicker.js +26 -6
  48. package/es/components/Tooltip/Tooltip.js +4 -2
  49. package/es/components/UIShell/HeaderMenuItem.d.ts +22 -0
  50. package/es/components/UIShell/HeaderMenuItem.js +4 -3
  51. package/es/components/UIShell/HeaderPanel.js +3 -11
  52. package/es/components/UIShell/Link.d.ts +48 -0
  53. package/es/components/UIShell/Link.js +30 -19
  54. package/es/components/UIShell/SideNav.d.ts +2 -1
  55. package/es/components/UIShell/SideNav.js +25 -7
  56. package/es/index.d.ts +21 -20
  57. package/es/index.js +30 -28
  58. package/lib/components/Accordion/Accordion.js +3 -1
  59. package/lib/components/AspectRatio/AspectRatio.d.ts +67 -0
  60. package/lib/components/AspectRatio/AspectRatio.js +2 -2
  61. package/lib/components/AspectRatio/index.d.ts +7 -0
  62. package/lib/components/Button/Button.js +6 -1
  63. package/lib/components/Checkbox/Checkbox.js +2 -2
  64. package/lib/components/CodeSnippet/CodeSnippet.js +1 -0
  65. package/lib/components/ComboButton/index.js +6 -5
  66. package/lib/components/ContainedList/ContainedList.js +12 -4
  67. package/lib/components/ContainedList/ContainedListItem/ContainedListItem.js +6 -1
  68. package/lib/components/ContentSwitcher/ContentSwitcher.js +10 -1
  69. package/lib/components/CopyButton/CopyButton.js +8 -2
  70. package/lib/components/DataTable/DataTable.js +8 -2
  71. package/lib/components/DataTable/Table.d.ts +6 -1
  72. package/lib/components/DataTable/Table.js +78 -2
  73. package/lib/components/DataTable/TableHeader.js +2 -1
  74. package/lib/components/DataTableSkeleton/DataTableSkeleton.js +1 -2
  75. package/lib/components/DataTableSkeleton/index.d.ts +9 -0
  76. package/lib/components/ExpandableSearch/ExpandableSearch.d.ts +1 -1
  77. package/lib/components/ExpandableSearch/ExpandableSearch.js +6 -2
  78. package/lib/components/FileUploader/FileUploaderButton.js +2 -1
  79. package/lib/components/IconButton/index.js +10 -2
  80. package/lib/components/Layout/index.js +129 -0
  81. package/lib/components/Link/Link.d.ts +53 -0
  82. package/lib/components/Link/Link.js +4 -3
  83. package/lib/components/Link/index.d.ts +9 -0
  84. package/lib/components/ListBox/ListBoxPropTypes.d.ts +1 -1
  85. package/lib/components/Menu/MenuItem.js +2 -1
  86. package/lib/components/MenuButton/index.js +7 -4
  87. package/lib/components/OverflowMenu/index.js +13 -1
  88. package/lib/components/OverflowMenu/next/index.js +108 -0
  89. package/lib/components/OverflowMenuV2/index.js +14 -74
  90. package/lib/components/RadioButtonGroup/RadioButtonGroup.js +0 -1
  91. package/lib/components/Search/Search.d.ts +4 -0
  92. package/lib/components/Search/Search.js +8 -2
  93. package/lib/components/Select/Select.d.ts +1 -1
  94. package/lib/components/Tabs/Tabs.js +5 -1
  95. package/lib/components/Tag/Tag.js +2 -0
  96. package/lib/components/TextArea/TextArea.Skeleton.js +1 -2
  97. package/lib/components/TextArea/TextArea.js +1 -2
  98. package/lib/components/TextArea/index.d.ts +10 -0
  99. package/lib/components/TextInput/PasswordInput.js +1 -2
  100. package/lib/components/TextInput/TextInput.Skeleton.js +1 -2
  101. package/lib/components/TextInput/TextInput.js +5 -4
  102. package/lib/components/TextInput/index.d.ts +4 -0
  103. package/lib/components/TimePicker/TimePicker.d.ts +8 -0
  104. package/lib/components/TimePicker/TimePicker.js +26 -6
  105. package/lib/components/Tooltip/Tooltip.js +4 -2
  106. package/lib/components/UIShell/HeaderMenuItem.d.ts +22 -0
  107. package/lib/components/UIShell/HeaderMenuItem.js +3 -2
  108. package/lib/components/UIShell/HeaderPanel.js +3 -11
  109. package/lib/components/UIShell/Link.d.ts +48 -0
  110. package/lib/components/UIShell/Link.js +29 -18
  111. package/lib/components/UIShell/SideNav.d.ts +2 -1
  112. package/lib/components/UIShell/SideNav.js +24 -6
  113. package/lib/index.d.ts +21 -20
  114. package/lib/index.js +92 -89
  115. package/package.json +10 -9
  116. /package/es/components/{Layout → LayoutDirection}/LayoutDirection.js +0 -0
  117. /package/es/components/{Layout → LayoutDirection}/LayoutDirectionContext.js +0 -0
  118. /package/es/components/{Layout → LayoutDirection}/useLayoutDirection.js +0 -0
  119. /package/lib/components/{Layout → LayoutDirection}/LayoutDirection.js +0 -0
  120. /package/lib/components/{Layout → LayoutDirection}/LayoutDirectionContext.js +0 -0
  121. /package/lib/components/{Layout → LayoutDirection}/useLayoutDirection.js +0 -0
@@ -34,7 +34,7 @@ const TextInput = /*#__PURE__*/React__default.forwardRef(function TextInput(_ref
34
34
  onClick = () => {},
35
35
  placeholder,
36
36
  readOnly,
37
- size = 'md',
37
+ size,
38
38
  type = 'text',
39
39
  warn = false,
40
40
  warnText,
@@ -61,7 +61,9 @@ const TextInput = /*#__PURE__*/React__default.forwardRef(function TextInput(_ref
61
61
  [`${prefix}--text-input--light`]: light,
62
62
  [`${prefix}--text-input--invalid`]: normalizedProps.invalid,
63
63
  [`${prefix}--text-input--warning`]: normalizedProps.warn,
64
- [`${prefix}--text-input--${size}`]: size
64
+ [`${prefix}--text-input--${size}`]: size,
65
+ // TODO: V12 - Remove this class
66
+ [`${prefix}--layout--size-${size}`]: size
65
67
  });
66
68
  const sharedTextInputProps = {
67
69
  id,
@@ -260,6 +262,5 @@ TextInput.propTypes = {
260
262
  */
261
263
  warnText: PropTypes.node
262
264
  };
263
- var TextInput$1 = TextInput;
264
265
 
265
- export { TextInput$1 as default };
266
+ export { TextInput as default };
@@ -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
@@ -11,6 +11,7 @@ import PropTypes from 'prop-types';
11
11
  import React__default from 'react';
12
12
  import { usePrefix } from '../../internal/usePrefix.js';
13
13
  import deprecate from '../../prop-types/deprecate.js';
14
+ import { WarningFilled, WarningAltFilled } from '@carbon/icons-react';
14
15
 
15
16
  const TimePicker = /*#__PURE__*/React__default.forwardRef(function TimePicker(_ref, ref) {
16
17
  let {
@@ -21,6 +22,8 @@ const TimePicker = /*#__PURE__*/React__default.forwardRef(function TimePicker(_r
21
22
  id,
22
23
  invalidText = 'Invalid time format.',
23
24
  invalid = false,
25
+ warningText = 'Warning message.',
26
+ warning = false,
24
27
  labelText,
25
28
  light = false,
26
29
  maxLength = 5,
@@ -65,12 +68,14 @@ const TimePicker = /*#__PURE__*/React__default.forwardRef(function TimePicker(_r
65
68
  }
66
69
  }
67
70
  const timePickerInputClasses = cx(`${prefix}--time-picker__input-field`, `${prefix}--text-input`, [className], {
68
- [`${prefix}--text-input--light`]: light
71
+ [`${prefix}--text-input--light`]: light,
72
+ [`${prefix}--time-picker__input-field-error`]: invalid || warning
69
73
  });
70
74
  const timePickerClasses = cx({
71
75
  [`${prefix}--time-picker`]: true,
72
76
  [`${prefix}--time-picker--light`]: light,
73
77
  [`${prefix}--time-picker--invalid`]: invalid,
78
+ [`${prefix}--time-picker--warning`]: warning,
74
79
  [`${prefix}--time-picker--readonly`]: readOnly,
75
80
  [`${prefix}--time-picker--${size}`]: size,
76
81
  ...(className && {
@@ -85,9 +90,6 @@ const TimePicker = /*#__PURE__*/React__default.forwardRef(function TimePicker(_r
85
90
  htmlFor: id,
86
91
  className: labelClasses
87
92
  }, labelText) : null;
88
- const error = invalid ? /*#__PURE__*/React__default.createElement("div", {
89
- className: `${prefix}--form-requirement`
90
- }, invalidText) : null;
91
93
  function getInternalPickerSelects() {
92
94
  const readOnlyEventHandlers = {
93
95
  onMouseDown: evt => {
@@ -140,7 +142,17 @@ const TimePicker = /*#__PURE__*/React__default.forwardRef(function TimePicker(_r
140
142
  ref: ref,
141
143
  type: type,
142
144
  value: value
143
- }, rest, readOnlyProps))), getInternalPickerSelects()), error);
145
+ }, rest, readOnlyProps)), (invalid || warning) && /*#__PURE__*/React__default.createElement("div", {
146
+ className: `${prefix}--time-picker__error__icon`
147
+ }, invalid ? /*#__PURE__*/React__default.createElement(WarningFilled, {
148
+ className: `${prefix}--checkbox__invalid-icon`,
149
+ size: 16
150
+ }) : /*#__PURE__*/React__default.createElement(WarningAltFilled, {
151
+ className: `${prefix}--text-input__invalid-icon--warning`,
152
+ size: 16
153
+ }))), getInternalPickerSelects()), (invalid || warning) && /*#__PURE__*/React__default.createElement("div", {
154
+ className: `${prefix}--form-requirement`
155
+ }, invalid ? invalidText : warningText));
144
156
  });
145
157
  TimePicker.propTypes = {
146
158
  /**
@@ -222,7 +234,15 @@ TimePicker.propTypes = {
222
234
  /**
223
235
  * Specify the value of the `<input>`
224
236
  */
225
- value: PropTypes.string
237
+ value: PropTypes.string,
238
+ /**
239
+ * Specify a warning message
240
+ */
241
+ warning: PropTypes.bool,
242
+ /**
243
+ * Provide the text that is displayed when the control is in an warning state
244
+ */
245
+ warningText: PropTypes.node
226
246
  };
227
247
  var TimePicker$1 = TimePicker;
228
248
 
@@ -94,10 +94,12 @@ function Tooltip(_ref) {
94
94
  onMouseLeave: onMouseLeave,
95
95
  open: open,
96
96
  ref: containerRef
97
- }), child !== undefined ? /*#__PURE__*/React__default.cloneElement(child, {
97
+ }), /*#__PURE__*/React__default.createElement("div", {
98
+ className: `${prefix}--tooltip-trigger__wrapper`
99
+ }, child !== undefined ? /*#__PURE__*/React__default.cloneElement(child, {
98
100
  ...triggerProps,
99
101
  ...getChildEventHandlers(child.props)
100
- }) : null, /*#__PURE__*/React__default.createElement(PopoverContent, {
102
+ }) : null), /*#__PURE__*/React__default.createElement(PopoverContent, {
101
103
  "aria-hidden": "true",
102
104
  className: `${prefix}--tooltip-content`,
103
105
  id: id,
@@ -0,0 +1,22 @@
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 React, { type ComponentProps, type ReactNode, ElementType } from 'react';
8
+ import { LinkProps } from './Link';
9
+ type HeaderMenuItemProps<E extends ElementType> = LinkProps<E> & {
10
+ className?: string | undefined;
11
+ isActive?: boolean | undefined;
12
+ isCurrentPage?: boolean | undefined;
13
+ 'aria-current'?: string | undefined;
14
+ children: ReactNode;
15
+ role?: ComponentProps<'li'>['role'];
16
+ tabIndex?: number | undefined;
17
+ };
18
+ declare const HeaderMenuItem: (<E extends React.ElementType<any> = "a">(props: HeaderMenuItemProps<E>) => JSX.Element) & {
19
+ displayName?: string | undefined;
20
+ propTypes?: React.WeakValidationMap<HeaderMenuItemProps<any>> | undefined;
21
+ };
22
+ export default HeaderMenuItem;
@@ -7,13 +7,13 @@
7
7
 
8
8
  import { extends as _extends } from '../../_virtual/_rollupPluginBabelHelpers.js';
9
9
  import PropTypes from 'prop-types';
10
- import React__default from 'react';
10
+ import React__default, { forwardRef } from 'react';
11
11
  import cx from 'classnames';
12
12
  import Link, { LinkPropTypes } from './Link.js';
13
13
  import { usePrefix } from '../../internal/usePrefix.js';
14
14
  import deprecate from '../../prop-types/deprecate.js';
15
15
 
16
- const HeaderMenuItem = /*#__PURE__*/React__default.forwardRef(function HeaderMenuItem(_ref, ref) {
16
+ function HeaderMenuItemRenderFunction(_ref, ref) {
17
17
  let {
18
18
  className,
19
19
  isActive,
@@ -45,7 +45,8 @@ const HeaderMenuItem = /*#__PURE__*/React__default.forwardRef(function HeaderMen
45
45
  }), /*#__PURE__*/React__default.createElement("span", {
46
46
  className: `${prefix}--text-truncate--end`
47
47
  }, children)));
48
- });
48
+ }
49
+ const HeaderMenuItem = /*#__PURE__*/forwardRef(HeaderMenuItemRenderFunction);
49
50
  HeaderMenuItem.displayName = 'HeaderMenuItem';
50
51
  HeaderMenuItem.propTypes = {
51
52
  /**
@@ -9,38 +9,30 @@ import { extends as _extends } from '../../_virtual/_rollupPluginBabelHelpers.js
9
9
  import React__default from 'react';
10
10
  import cx from 'classnames';
11
11
  import PropTypes from 'prop-types';
12
- import { AriaLabelPropType } from '../../prop-types/AriaPropTypes.js';
13
12
  import { usePrefix } from '../../internal/usePrefix.js';
14
13
 
15
14
  const HeaderPanel = /*#__PURE__*/React__default.forwardRef(function HeaderPanel(_ref, ref) {
16
15
  let {
17
- 'aria-label': ariaLabel,
18
- 'aria-labelledby': ariaLabelledBy,
19
16
  children,
20
17
  className: customClassName,
21
18
  expanded,
22
19
  ...other
23
20
  } = _ref;
24
21
  const prefix = usePrefix();
25
- const accessibilityLabel = {
26
- 'aria-label': ariaLabel,
27
- 'aria-labelledby': ariaLabelledBy
28
- };
29
22
  const className = cx(`${prefix}--header-panel`, {
30
23
  [`${prefix}--header-panel--expanded`]: expanded,
31
24
  [customClassName]: !!customClassName
32
25
  });
33
26
  return /*#__PURE__*/React__default.createElement("div", _extends({}, other, {
34
- className: className
35
- }, accessibilityLabel, {
27
+ className: className,
36
28
  ref: ref
37
29
  }), children);
38
30
  });
39
31
  HeaderPanel.propTypes = {
40
32
  /**
41
- * Required props for accessibility label on the underlying menu
33
+ * The content that will render inside of the `HeaderPanel`
42
34
  */
43
- ...AriaLabelPropType,
35
+ children: PropTypes.node,
44
36
  /**
45
37
  * Optionally provide a custom class to apply to the underlying `<li>` node
46
38
  */
@@ -0,0 +1,48 @@
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 PropTypes from 'prop-types';
8
+ import React, { type ElementType, type Ref } from 'react';
9
+ import { type PolymorphicProps } from '../../types/common';
10
+ type LinkBaseProps<E extends ElementType> = {
11
+ /**
12
+ * @deprecated Use `as` instead
13
+ */
14
+ element?: E | undefined;
15
+ ref?: Ref<E>;
16
+ };
17
+ export type LinkProps<E extends ElementType> = PolymorphicProps<E, LinkBaseProps<E>>;
18
+ /**
19
+ * Link is a custom component that allows us to supporting rendering elements
20
+ * other than `a` in our markup. The goal is to allow users to support passing
21
+ * in their own components to support use-cases like `react-router` or
22
+ * `@reach/router`
23
+ */
24
+ declare const Link: (<E extends React.ElementType<any> = "a">(props: LinkProps<E>) => JSX.Element) & {
25
+ displayName?: string | undefined;
26
+ propTypes?: React.WeakValidationMap<LinkProps<any>> | undefined;
27
+ };
28
+ declare const LinkPropTypes: {
29
+ /**
30
+ * Provide a custom element or component to render the top-level node for the
31
+ * component.
32
+ */
33
+ as: PropTypes.Requireable<PropTypes.ReactComponentLike>;
34
+ /**
35
+ * The base element to use to build the link. Defaults to `a`, can also accept
36
+ * alternative tag names or custom components like `Link` from `react-router`.
37
+ * @deprecated Use `as` instead
38
+ *
39
+ */
40
+ element: (props: any, propName: any, componentName: any, ...rest: any[]) => any;
41
+ /**
42
+ * Property to indicate if the side nav container is open (or not). Use to
43
+ * keep local state and styling in step with the SideNav expansion state.
44
+ */
45
+ isSideNavExpanded: PropTypes.Requireable<boolean>;
46
+ };
47
+ export { LinkPropTypes };
48
+ export default Link;
@@ -5,8 +5,27 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
+ import { extends as _extends } from '../../_virtual/_rollupPluginBabelHelpers.js';
8
9
  import PropTypes from 'prop-types';
9
- import React__default from 'react';
10
+ import React__default, { forwardRef } from 'react';
11
+ import deprecate from '../../prop-types/deprecate.js';
12
+
13
+ // Note: Maybe we should use `as` instead of `element`? `as` appears to be
14
+ // standard and is used in other places in this project.
15
+ function LinkRenderFunction(_ref, ref) {
16
+ let {
17
+ element,
18
+ as: BaseComponent,
19
+ // Captured here to prevent it from being passed into the created element.
20
+ // See https://github.com/carbon-design-system/carbon/issues/3970
21
+ isSideNavExpanded: _isSideNavExpanded,
22
+ ...rest
23
+ } = _ref;
24
+ const BaseComponentAsAny = BaseComponent ?? element ?? 'a';
25
+ return /*#__PURE__*/React__default.createElement(BaseComponentAsAny, _extends({
26
+ ref: ref
27
+ }, rest));
28
+ }
10
29
 
11
30
  /**
12
31
  * Link is a custom component that allows us to supporting rendering elements
@@ -14,24 +33,20 @@ import React__default from 'react';
14
33
  * in their own components to support use-cases like `react-router` or
15
34
  * `@reach/router`
16
35
  */
17
- const Link = /*#__PURE__*/React__default.forwardRef(function Link(props, ref) {
18
- const {
19
- element,
20
- isSideNavExpanded,
21
- // eslint-disable-line no-unused-vars
22
- ...rest
23
- } = props;
24
- return /*#__PURE__*/React__default.createElement(element, {
25
- ...rest,
26
- ref
27
- });
28
- });
36
+ const Link = /*#__PURE__*/forwardRef(LinkRenderFunction);
29
37
  const LinkPropTypes = {
38
+ /**
39
+ * Provide a custom element or component to render the top-level node for the
40
+ * component.
41
+ */
42
+ as: PropTypes.elementType,
30
43
  /**
31
44
  * The base element to use to build the link. Defaults to `a`, can also accept
32
45
  * alternative tag names or custom components like `Link` from `react-router`.
46
+ * @deprecated Use `as` instead
47
+ *
33
48
  */
34
- element: PropTypes.elementType,
49
+ element: deprecate(PropTypes.elementType, 'The `element` prop for `Link` has been deprecated. Please use `as` ' + 'instead. This will be removed in the next major release.'),
35
50
  /**
36
51
  * Property to indicate if the side nav container is open (or not). Use to
37
52
  * keep local state and styling in step with the SideNav expansion state.
@@ -40,9 +55,5 @@ const LinkPropTypes = {
40
55
  };
41
56
  Link.displayName = 'Link';
42
57
  Link.propTypes = LinkPropTypes;
43
- Link.defaultProps = {
44
- element: 'a'
45
- };
46
- var Link$1 = Link;
47
58
 
48
- export { LinkPropTypes, Link$1 as default };
59
+ export { LinkPropTypes, Link as default };
@@ -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;
@@ -6,7 +6,7 @@
6
6
  */
7
7
 
8
8
  import { extends as _extends } from '../../_virtual/_rollupPluginBabelHelpers.js';
9
- import React__default, { useRef, useState, isValidElement } from 'react';
9
+ import React__default, { useRef, isValidElement } from 'react';
10
10
  import cx from 'classnames';
11
11
  import PropTypes from 'prop-types';
12
12
  import { AriaLabelPropType } from '../../prop-types/AriaPropTypes.js';
@@ -14,6 +14,7 @@ import { CARBON_SIDENAV_ITEMS } from './_utils.js';
14
14
  import { usePrefix } from '../../internal/usePrefix.js';
15
15
  import { useMergedRefs } from '../../internal/useMergedRefs.js';
16
16
  import { useWindowEvent } from '../../internal/useEvent.js';
17
+ import { useDelayedState } from '../../internal/useDelayedState.js';
17
18
  import { match } from '../../internal/keyboard/match.js';
18
19
  import { Tab, Escape } from '../../internal/keyboard/keys.js';
19
20
 
@@ -39,27 +40,28 @@ function SideNavRenderFunction(_ref, ref) {
39
40
  addMouseListeners = true,
40
41
  onOverlayClick,
41
42
  onSideNavBlur,
43
+ enterDelayMs = 100,
42
44
  ...other
43
45
  } = _ref;
44
46
  const prefix = usePrefix();
45
47
  const {
46
48
  current: controlled
47
49
  } = useRef(expandedProp !== undefined);
48
- const [expandedState, setExpandedState] = useState(defaultExpanded);
49
- const [expandedViaHoverState, setExpandedViaHoverState] = useState(defaultExpanded);
50
+ const [expandedState, setExpandedState] = useDelayedState(defaultExpanded);
51
+ const [expandedViaHoverState, setExpandedViaHoverState] = useDelayedState(defaultExpanded);
50
52
  const expanded = controlled ? expandedProp : expandedState;
51
53
  const sideNavRef = useRef(null);
52
54
  const navRef = useMergedRefs([sideNavRef, ref]);
53
55
  const handleToggle = function (event) {
54
56
  let value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : !expanded;
55
57
  if (!controlled) {
56
- setExpandedState(value);
58
+ setExpandedState(value, enterDelayMs);
57
59
  }
58
60
  if (onToggle) {
59
61
  onToggle(event, value);
60
62
  }
61
63
  if (controlled || isRail) {
62
- setExpandedViaHoverState(value);
64
+ setExpandedViaHoverState(value, enterDelayMs);
63
65
  }
64
66
  };
65
67
  const accessibilityLabel = {
@@ -130,8 +132,20 @@ function SideNavRenderFunction(_ref, ref) {
130
132
  };
131
133
  }
132
134
  if (addMouseListeners && isRail) {
133
- eventHandlers.onMouseEnter = () => handleToggle(true, true);
134
- eventHandlers.onMouseLeave = () => handleToggle(false, false);
135
+ eventHandlers.onMouseEnter = () => {
136
+ handleToggle(true, true);
137
+ };
138
+ eventHandlers.onMouseLeave = () => {
139
+ setExpandedState(false);
140
+ setExpandedViaHoverState(false);
141
+ handleToggle(false, false);
142
+ };
143
+ eventHandlers.onClick = () => {
144
+ //if delay is enabled, and user intentionally clicks it to see it expanded immediately
145
+ setExpandedState(true);
146
+ setExpandedViaHoverState(true);
147
+ handleToggle(true, true);
148
+ };
135
149
  }
136
150
  useWindowEvent('keydown', event => {
137
151
  const focusedElement = document.activeElement;
@@ -174,6 +188,10 @@ SideNav.propTypes = {
174
188
  * If `true`, the SideNav will be open on initial render.
175
189
  */
176
190
  defaultExpanded: PropTypes.bool,
191
+ /**
192
+ * Specify the duration in milliseconds to delay before displaying the sidenavigation
193
+ */
194
+ enterDelayMs: PropTypes.number,
177
195
  /**
178
196
  * If `true`, the SideNav will be expanded, otherwise it will be collapsed.
179
197
  * Using this prop causes SideNav to become a controled component.
package/es/index.d.ts CHANGED
@@ -16,30 +16,37 @@ export * from './components/CheckboxGroup';
16
16
  export * from './components/ClassPrefix';
17
17
  export * from './components/CodeSnippet';
18
18
  export * from './components/ComboBox';
19
+ export * from './components/ComboButton';
19
20
  export * from './components/ComposedModal';
20
21
  export * from './components/ContainedList';
21
22
  export * from './components/ContentSwitcher';
23
+ export * from './components/ContextMenu';
22
24
  export * from './components/Copy';
23
25
  export * from './components/CopyButton';
24
26
  export * from './components/DangerButton';
25
27
  export * from './components/DataTable';
28
+ export * from './components/DataTableSkeleton';
26
29
  export * from './components/DatePicker';
27
30
  export * from './components/DatePickerInput';
28
31
  export * from './components/Dropdown';
29
32
  export * from './components/ErrorBoundary';
33
+ export * from './components/ExpandableSearch';
30
34
  export * from './components/FileUploader';
31
35
  export * from './components/FilterableMultiSelect';
32
- export * from './components/Form';
33
36
  export * from './components/FluidForm';
37
+ export * from './components/Form';
34
38
  export * from './components/FormGroup';
35
39
  export * from './components/FormItem';
36
40
  export * from './components/FormLabel';
37
41
  export * from './components/Grid';
42
+ export * from './components/Icon/Icon.Skeleton';
38
43
  export * from './components/IdPrefix';
39
44
  export * from './components/InlineLoading';
40
45
  export * from './components/Link';
41
46
  export * from './components/ListItem';
42
47
  export * from './components/Loading';
48
+ export * from './components/Menu';
49
+ export * from './components/MenuButton';
43
50
  export * from './components/Modal';
44
51
  export * from './components/ModalWrapper';
45
52
  export * from './components/MultiSelect';
@@ -49,48 +56,44 @@ export * from './components/OrderedList';
49
56
  export * from './components/OverflowMenu';
50
57
  export * from './components/OverflowMenuItem';
51
58
  export * from './components/Pagination';
59
+ export * from './components/Pagination/Pagination.Skeleton';
52
60
  export * from './components/PaginationNav';
53
61
  export * from './components/PasswordInput';
54
62
  export * from './components/PrimaryButton';
55
63
  export * from './components/ProgressIndicator';
56
64
  export * from './components/RadioButton';
65
+ export * from './components/RadioButton/RadioButton.Skeleton';
57
66
  export * from './components/RadioButtonGroup';
67
+ export * from './components/RadioTile';
58
68
  export * from './components/Search';
59
- export * from './components/ExpandableSearch';
60
69
  export * from './components/SecondaryButton';
61
70
  export * from './components/Select';
62
71
  export * from './components/SelectItem';
63
72
  export * from './components/SelectItemGroup';
64
- export * from './components/Switch';
73
+ export * from './components/SkeletonIcon';
74
+ export * from './components/SkeletonPlaceholder';
75
+ export * from './components/SkeletonText';
65
76
  export * from './components/Slider';
66
77
  export * from './components/StructuredList';
78
+ export * from './components/Switch';
67
79
  export * from './components/Tab';
68
80
  export * from './components/TabContent';
69
81
  export * from './components/Tabs';
70
82
  export * from './components/Tag';
83
+ export * from './components/Tag/Tag.Skeleton';
71
84
  export * from './components/TextArea';
72
85
  export * from './components/TextInput';
73
86
  export * from './components/Tile';
74
- export * from './components/RadioTile';
75
87
  export * from './components/TileGroup';
76
88
  export * from './components/TimePicker';
77
89
  export * from './components/TimePickerSelect';
78
90
  export * from './components/Toggle';
79
- export * from './components/Toggletip';
80
- export * from './components/TreeView';
81
- export * from './components/UnorderedList';
82
- export * from './components/SkeletonText';
83
- export * from './components/SkeletonPlaceholder';
84
- export * from './components/SkeletonIcon';
85
- export * from './components/DataTableSkeleton';
86
- export * from './components/Pagination/Pagination.Skeleton';
87
- export * from './components/RadioButton/RadioButton.Skeleton';
88
- export * from './components/Tag/Tag.Skeleton';
89
91
  export * from './components/Toggle/Toggle.Skeleton';
90
92
  export * from './components/ToggleSmall/ToggleSmall.Skeleton';
91
- export * from './components/Icon/Icon.Skeleton';
93
+ export * from './components/Toggletip';
94
+ export * from './components/TreeView';
92
95
  export * from './components/UIShell';
93
- export { useContextMenu as unstable_useContextMenu } from './components/ContextMenu';
96
+ export * from './components/UnorderedList';
94
97
  export { FeatureFlags as unstable_FeatureFlags, useFeatureFlag as unstable_useFeatureFlag, useFeatureFlags as unstable_useFeatureFlags, } from './components/FeatureFlags';
95
98
  export { FluidComboBox as unstable__FluidComboBox, FluidComboBoxSkeleton as unstable__FluidComboBoxSkeleton, } from './components/FluidComboBox';
96
99
  export { FluidDatePicker as unstable__FluidDatePicker, FluidDatePickerSkeleton as unstable__FluidDatePickerSkeleton, } from './components/FluidDatePicker';
@@ -105,11 +108,9 @@ export { FluidTimePickerSelect as unstable__FluidTimePickerSelect } from './comp
105
108
  export * from './components/Heading';
106
109
  export * from './components/IconButton';
107
110
  export * from './components/Layer';
108
- export { LayoutDirection as unstable_LayoutDirection, useLayoutDirection as unstable_useLayoutDirection, } from './components/Layout';
109
- export { Menu as unstable_Menu, MenuItem as unstable_MenuItem, MenuItemDivider as unstable_MenuItemDivider, MenuItemGroup as unstable_MenuItemGroup, MenuItemRadioGroup as unstable_MenuItemRadioGroup, MenuItemSelectable as unstable_MenuItemSelectable, } from './components/Menu';
111
+ export { Layout as unstable_Layout } from './components/Layout';
112
+ export { LayoutDirection as unstable_LayoutDirection, useLayoutDirection as unstable_useLayoutDirection, } from './components/LayoutDirection';
110
113
  export { OverflowMenuV2 as unstable_OverflowMenuV2 } from './components/OverflowMenuV2';
111
- export { ComboButton as unstable_ComboButton } from './components/ComboButton';
112
- export { MenuButton as unstable_MenuButton } from './components/MenuButton';
113
114
  export { PageSelector as unstable_PageSelector, Pagination as unstable_Pagination, } from './components/Pagination/experimental';
114
115
  export * from './components/Popover';
115
116
  export * from './components/ProgressBar';