@carbon/react 1.28.0 → 1.29.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 (41) hide show
  1. package/es/components/Checkbox/Checkbox.d.ts +2 -2
  2. package/es/components/Heading/index.d.ts +51 -0
  3. package/es/components/Heading/index.js +5 -9
  4. package/es/components/Slider/Slider.d.ts +26 -2
  5. package/es/components/Slider/Slider.js +36 -8
  6. package/es/components/StructuredList/StructuredList.Skeleton.js +2 -10
  7. package/es/components/StructuredList/StructuredList.js +2 -2
  8. package/es/components/Theme/index.d.ts +62 -0
  9. package/es/components/Theme/index.js +4 -4
  10. package/es/components/UIShell/HeaderContainer.js +8 -0
  11. package/es/components/UIShell/HeaderMenuButton.d.ts +38 -0
  12. package/es/components/UIShell/HeaderMenuButton.js +7 -12
  13. package/es/components/UIShell/HeaderNavigation.d.ts +24 -0
  14. package/es/components/UIShell/HeaderNavigation.js +8 -13
  15. package/es/components/UIShell/HeaderSideNavItems.d.ts +33 -0
  16. package/es/components/UIShell/HeaderSideNavItems.js +4 -9
  17. package/es/components/UIShell/SideNav.d.ts +21 -0
  18. package/es/components/UIShell/SideNav.js +37 -38
  19. package/es/index.js +1 -1
  20. package/es/types/common.d.ts +11 -0
  21. package/lib/components/Checkbox/Checkbox.d.ts +2 -2
  22. package/lib/components/Heading/index.d.ts +51 -0
  23. package/lib/components/Heading/index.js +5 -9
  24. package/lib/components/Slider/Slider.d.ts +26 -2
  25. package/lib/components/Slider/Slider.js +36 -8
  26. package/lib/components/StructuredList/StructuredList.Skeleton.js +2 -10
  27. package/lib/components/StructuredList/StructuredList.js +2 -2
  28. package/lib/components/Theme/index.d.ts +62 -0
  29. package/lib/components/Theme/index.js +4 -4
  30. package/lib/components/UIShell/HeaderContainer.js +8 -0
  31. package/lib/components/UIShell/HeaderMenuButton.d.ts +38 -0
  32. package/lib/components/UIShell/HeaderMenuButton.js +7 -12
  33. package/lib/components/UIShell/HeaderNavigation.d.ts +24 -0
  34. package/lib/components/UIShell/HeaderNavigation.js +7 -13
  35. package/lib/components/UIShell/HeaderSideNavItems.d.ts +33 -0
  36. package/lib/components/UIShell/HeaderSideNavItems.js +4 -9
  37. package/lib/components/UIShell/SideNav.d.ts +21 -0
  38. package/lib/components/UIShell/SideNav.js +36 -37
  39. package/lib/index.js +2 -2
  40. package/lib/types/common.d.ts +11 -0
  41. package/package.json +4 -4
@@ -0,0 +1,38 @@
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 { type ComponentProps } from 'react';
8
+ import PropTypes from 'prop-types';
9
+ type HeaderMenuButtonBaseProps = Omit<ComponentProps<'button'>, 'title' | 'type'>;
10
+ interface HeaderMenuButtonProps extends HeaderMenuButtonBaseProps {
11
+ 'aria-label'?: string;
12
+ 'aria-labelledby'?: string;
13
+ className?: string;
14
+ renderMenuIcon?: JSX.Element;
15
+ renderCloseIcon?: JSX.Element;
16
+ isActive?: boolean;
17
+ isCollapsible?: boolean;
18
+ }
19
+ declare function HeaderMenuButton({ 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, className: customClassName, renderMenuIcon, renderCloseIcon, isActive, isCollapsible, ...rest }: HeaderMenuButtonProps): JSX.Element;
20
+ declare namespace HeaderMenuButton {
21
+ var propTypes: {
22
+ /**
23
+ * Optionally provide a custom class name that is applied to the underlying
24
+ * button
25
+ */
26
+ className: PropTypes.Requireable<string>;
27
+ /**
28
+ * Specify whether the menu button is "active".
29
+ */
30
+ isActive: PropTypes.Requireable<boolean>;
31
+ /**
32
+ * Optionally provide an onClick handler that is called when the underlying
33
+ * button fires it's onclick event
34
+ */
35
+ onClick: PropTypes.Requireable<(...args: any[]) => any>;
36
+ };
37
+ }
38
+ export default HeaderMenuButton;
@@ -24,7 +24,6 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
24
24
  var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
25
25
 
26
26
  var _Menu, _Close;
27
-
28
27
  function HeaderMenuButton(_ref) {
29
28
  let {
30
29
  'aria-label': ariaLabel,
@@ -32,38 +31,34 @@ function HeaderMenuButton(_ref) {
32
31
  className: customClassName,
33
32
  renderMenuIcon,
34
33
  renderCloseIcon,
35
- onClick,
36
34
  isActive,
37
35
  isCollapsible,
38
36
  ...rest
39
37
  } = _ref;
40
38
  const prefix = usePrefix.usePrefix();
41
- const className = cx__default["default"]({
42
- [customClassName]: !!customClassName,
39
+ const className = cx__default["default"]({ ...(typeof customClassName === 'string' && {
40
+ [customClassName]: !!customClassName
41
+ }),
43
42
  [`${prefix}--header__action`]: true,
44
43
  [`${prefix}--header__menu-trigger`]: true,
45
44
  [`${prefix}--header__action--active`]: isActive,
46
45
  [`${prefix}--header__menu-toggle`]: true,
47
46
  [`${prefix}--header__menu-toggle__hidden`]: !isCollapsible
48
47
  });
49
- const accessibilityLabel = {
50
- 'aria-label': ariaLabel,
51
- 'aria-labelledby': ariaLabelledBy
52
- };
53
48
  const menuIcon = renderMenuIcon ? renderMenuIcon : _Menu || (_Menu = /*#__PURE__*/React__default["default"].createElement(iconsReact.Menu, {
54
49
  size: 20
55
50
  }));
56
51
  const closeIcon = renderCloseIcon ? renderCloseIcon : _Close || (_Close = /*#__PURE__*/React__default["default"].createElement(iconsReact.Close, {
57
52
  size: 20
58
53
  }));
59
- return /*#__PURE__*/React__default["default"].createElement("button", _rollupPluginBabelHelpers["extends"]({}, rest, accessibilityLabel, {
54
+ return /*#__PURE__*/React__default["default"].createElement("button", _rollupPluginBabelHelpers["extends"]({}, rest, {
55
+ "aria-label": ariaLabel,
56
+ "aria-labelledby": ariaLabelledBy,
60
57
  className: className,
61
58
  title: ariaLabel,
62
- type: "button",
63
- onClick: onClick
59
+ type: "button"
64
60
  }), isActive ? closeIcon : menuIcon);
65
61
  }
66
-
67
62
  HeaderMenuButton.propTypes = {
68
63
  /**
69
64
  * Required props for accessibility label on the underlying menu button
@@ -0,0 +1,24 @@
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 { type ComponentProps } from 'react';
8
+ import PropTypes from 'prop-types';
9
+ type HeaderNavigationProps = ComponentProps<'nav'>;
10
+ declare function HeaderNavigation({ 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, children, className: customClassName, ...rest }: HeaderNavigationProps): JSX.Element;
11
+ declare namespace HeaderNavigation {
12
+ var propTypes: {
13
+ /**
14
+ * Provide valid children of HeaderNavigation, for example `HeaderMenuItem`
15
+ * or `HeaderMenu`
16
+ */
17
+ children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
18
+ /**
19
+ * Optionally provide a custom class to apply to the underlying <nav> node
20
+ */
21
+ className: PropTypes.Requireable<string>;
22
+ };
23
+ }
24
+ export default HeaderNavigation;
@@ -22,29 +22,24 @@ var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
22
22
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
23
23
  var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
24
24
 
25
- function HeaderNavigation(props) {
26
- const {
25
+ function HeaderNavigation(_ref) {
26
+ let {
27
27
  'aria-label': ariaLabel,
28
28
  'aria-labelledby': ariaLabelledBy,
29
29
  children,
30
30
  className: customClassName,
31
31
  ...rest
32
- } = props;
32
+ } = _ref;
33
33
  const prefix = usePrefix.usePrefix();
34
- const className = cx__default["default"](`${prefix}--header__nav`, customClassName); // Assign both label strategies in this option, only one should be defined
35
- // so when we spread that should be the one that is applied to the node
36
-
37
- const accessibilityLabel = {
38
- 'aria-label': ariaLabel,
39
- 'aria-labelledby': ariaLabelledBy
40
- };
41
- return /*#__PURE__*/React__default["default"].createElement("nav", _rollupPluginBabelHelpers["extends"]({}, rest, accessibilityLabel, {
34
+ const className = cx__default["default"](`${prefix}--header__nav`, customClassName);
35
+ return /*#__PURE__*/React__default["default"].createElement("nav", _rollupPluginBabelHelpers["extends"]({}, rest, {
36
+ "aria-label": ariaLabel,
37
+ "aria-labelledby": ariaLabelledBy,
42
38
  className: className
43
39
  }), /*#__PURE__*/React__default["default"].createElement("ul", {
44
40
  className: `${prefix}--header__menu-bar`
45
41
  }, children));
46
42
  }
47
-
48
43
  HeaderNavigation.propTypes = {
49
44
  /**
50
45
  * Required props for accessibility label on the underlying menu
@@ -63,5 +58,4 @@ HeaderNavigation.propTypes = {
63
58
  className: PropTypes__default["default"].string
64
59
  };
65
60
 
66
- exports.HeaderNavigation = HeaderNavigation;
67
61
  exports["default"] = HeaderNavigation;
@@ -0,0 +1,33 @@
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 { type ReactNode } from 'react';
8
+ import PropTypes from 'prop-types';
9
+ interface HeaderSideNavItemsProps {
10
+ className?: string | undefined;
11
+ children?: ReactNode;
12
+ hasDivider?: boolean | undefined;
13
+ }
14
+ declare function HeaderSideNavItems({ className: customClassName, children, hasDivider, }: HeaderSideNavItemsProps): JSX.Element;
15
+ declare namespace HeaderSideNavItems {
16
+ var propTypes: {
17
+ /**
18
+ * The child nodes to be rendered
19
+ */
20
+ children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
21
+ /**
22
+ * Optionally provide a custom class name that is applied to the underlying
23
+ * button
24
+ */
25
+ className: PropTypes.Requireable<string>;
26
+ /**
27
+ * Optionally specify if container will have a bottom divider to differentiate
28
+ * between original sidenav items and header menu items. False by default.
29
+ */
30
+ hasDivider: PropTypes.Requireable<boolean>;
31
+ };
32
+ }
33
+ export default HeaderSideNavItems;
@@ -20,11 +20,11 @@ var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
20
20
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
21
21
  var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
22
22
 
23
- const HeaderSideNavItems = _ref => {
23
+ function HeaderSideNavItems(_ref) {
24
24
  let {
25
25
  className: customClassName,
26
26
  children,
27
- hasDivider
27
+ hasDivider = false
28
28
  } = _ref;
29
29
  const prefix = usePrefix.usePrefix();
30
30
  const className = cx__default["default"]({
@@ -34,8 +34,7 @@ const HeaderSideNavItems = _ref => {
34
34
  return /*#__PURE__*/React__default["default"].createElement("ul", {
35
35
  className: className
36
36
  }, children);
37
- };
38
-
37
+ }
39
38
  HeaderSideNavItems.propTypes = {
40
39
  /**
41
40
  * The child nodes to be rendered
@@ -54,9 +53,5 @@ HeaderSideNavItems.propTypes = {
54
53
  */
55
54
  hasDivider: PropTypes__default["default"].bool
56
55
  };
57
- HeaderSideNavItems.defaultProps = {
58
- hasDivider: false
59
- };
60
- var HeaderSideNavItems$1 = HeaderSideNavItems;
61
56
 
62
- exports["default"] = HeaderSideNavItems$1;
57
+ exports["default"] = HeaderSideNavItems;
@@ -0,0 +1,21 @@
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 FocusEvent, type KeyboardEvent, type MouseEventHandler } from 'react';
8
+ interface SideNavProps extends ComponentProps<'nav'> {
9
+ expanded?: boolean | undefined;
10
+ defaultExpanded?: boolean | undefined;
11
+ isChildOfHeader?: boolean | undefined;
12
+ onToggle?: (event: FocusEvent<HTMLElement> | KeyboardEvent<HTMLElement> | boolean, value: boolean) => void | undefined;
13
+ isFixedNav?: boolean | undefined;
14
+ isRail?: boolean | undefined;
15
+ isPersistent?: boolean | undefined;
16
+ addFocusListeners?: boolean | undefined;
17
+ addMouseListeners?: boolean | undefined;
18
+ onOverlayClick?: MouseEventHandler<HTMLDivElement> | undefined;
19
+ }
20
+ 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" | "expanded" | "defaultExpanded" | "isChildOfHeader" | "isFixedNav" | "isRail" | "isPersistent" | "addFocusListeners" | "addMouseListeners" | "onOverlayClick"> & React.RefAttributes<HTMLElement>>;
21
+ export default SideNav;
@@ -16,6 +16,8 @@ var PropTypes = require('prop-types');
16
16
  var AriaPropTypes = require('../../prop-types/AriaPropTypes.js');
17
17
  var _utils = require('./_utils.js');
18
18
  var usePrefix = require('../../internal/usePrefix.js');
19
+ var match = require('../../internal/keyboard/match.js');
20
+ var keys = require('../../internal/keyboard/keys.js');
19
21
 
20
22
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
21
23
 
@@ -25,26 +27,26 @@ var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
25
27
 
26
28
  // import SideNavFooter from './SideNavFooter';
27
29
 
28
- const SideNav = /*#__PURE__*/React__default["default"].forwardRef(function SideNav(props, ref) {
29
- const {
30
+ function SideNavRenderFunction(_ref, ref) {
31
+ let {
30
32
  expanded: expandedProp,
31
- defaultExpanded,
32
- isChildOfHeader,
33
+ defaultExpanded = false,
34
+ isChildOfHeader = true,
33
35
  'aria-label': ariaLabel,
34
36
  'aria-labelledby': ariaLabelledBy,
35
37
  children,
36
38
  onToggle,
37
39
  className: customClassName,
38
40
  // TO-DO: comment back in when footer is added for rails
39
- // translateById: t,
40
- isFixedNav,
41
+ // translateById: t = (id) => translations[id],
42
+ isFixedNav = false,
41
43
  isRail,
42
- isPersistent,
43
- addFocusListeners,
44
- addMouseListeners,
44
+ isPersistent = true,
45
+ addFocusListeners = true,
46
+ addMouseListeners = true,
45
47
  onOverlayClick,
46
48
  ...other
47
- } = props;
49
+ } = _ref;
48
50
  const prefix = usePrefix.usePrefix();
49
51
  const {
50
52
  current: controlled
@@ -77,12 +79,11 @@ const SideNav = /*#__PURE__*/React__default["default"].forwardRef(function SideN
77
79
  // ? t('carbon.sidenav.state.open')
78
80
  // : t('carbon.sidenav.state.closed');
79
81
 
80
- const className = cx__default["default"]({
82
+ const className = cx__default["default"](customClassName, {
81
83
  [`${prefix}--side-nav`]: true,
82
84
  [`${prefix}--side-nav--expanded`]: expanded || expandedViaHoverState,
83
85
  [`${prefix}--side-nav--collapsed`]: !expanded && isFixedNav,
84
86
  [`${prefix}--side-nav--rail`]: isRail,
85
- [customClassName]: !!customClassName,
86
87
  [`${prefix}--side-nav--ux`]: isChildOfHeader,
87
88
  [`${prefix}--side-nav--hidden`]: !isPersistent
88
89
  });
@@ -94,19 +95,25 @@ const SideNav = /*#__PURE__*/React__default["default"].forwardRef(function SideN
94
95
 
95
96
  if (isRail) {
96
97
  childrenToRender = React__default["default"].Children.map(children, child => {
97
- var _child$type, _child$type2;
98
-
99
98
  // if we are controlled, check for if we have hovered over or the expanded state, else just use the expanded state (uncontrolled)
100
- let currentExpansionState = controlled ? expandedViaHoverState || expanded : expanded; // avoid spreading `isSideNavExpanded` to non-Carbon UI Shell children
99
+ const currentExpansionState = controlled ? expandedViaHoverState || expanded : expanded;
100
+
101
+ if ( /*#__PURE__*/React.isValidElement(child)) {
102
+ var _childJsxElement$type, _childJsxElement$type2;
103
+
104
+ const childJsxElement = child; // avoid spreading `isSideNavExpanded` to non-Carbon UI Shell children
105
+
106
+ return /*#__PURE__*/React__default["default"].cloneElement(childJsxElement, { ...(_utils.CARBON_SIDENAV_ITEMS.includes(((_childJsxElement$type = childJsxElement.type) === null || _childJsxElement$type === void 0 ? void 0 : _childJsxElement$type.displayName) ?? ((_childJsxElement$type2 = childJsxElement.type) === null || _childJsxElement$type2 === void 0 ? void 0 : _childJsxElement$type2.name)) ? {
107
+ isSideNavExpanded: currentExpansionState
108
+ } : {})
109
+ });
110
+ }
101
111
 
102
- return /*#__PURE__*/React__default["default"].cloneElement(child, { ...(_utils.CARBON_SIDENAV_ITEMS.includes(((_child$type = child.type) === null || _child$type === void 0 ? void 0 : _child$type.displayName) ?? ((_child$type2 = child.type) === null || _child$type2 === void 0 ? void 0 : _child$type2.name)) ? {
103
- isSideNavExpanded: currentExpansionState
104
- } : {})
105
- });
112
+ return child;
106
113
  });
107
114
  }
108
115
 
109
- let eventHandlers = {};
116
+ const eventHandlers = {};
110
117
 
111
118
  if (addFocusListeners) {
112
119
  eventHandlers.onFocus = event => {
@@ -120,6 +127,12 @@ const SideNav = /*#__PURE__*/React__default["default"].forwardRef(function SideN
120
127
  handleToggle(event, false);
121
128
  }
122
129
  };
130
+
131
+ eventHandlers.onKeyDown = event => {
132
+ if (match.match(event, keys.Escape)) {
133
+ handleToggle(event, false);
134
+ }
135
+ };
123
136
  }
124
137
 
125
138
  if (addMouseListeners && isRail) {
@@ -138,24 +151,10 @@ const SideNav = /*#__PURE__*/React__default["default"].forwardRef(function SideN
138
151
  ref: ref,
139
152
  className: `${prefix}--side-nav__navigation ${className}`
140
153
  }, accessibilityLabel, eventHandlers, other), childrenToRender));
141
- });
154
+ }
155
+
156
+ const SideNav = /*#__PURE__*/React__default["default"].forwardRef(SideNavRenderFunction);
142
157
  SideNav.displayName = 'SideNav';
143
- SideNav.defaultProps = {
144
- // TO-DO: comment back in when footer is added for rails
145
- // translateById: (id) => {
146
- // const translations = {
147
- // 'carbon.sidenav.state.open': 'Close',
148
- // 'carbon.sidenav.state.closed': 'Open',
149
- // };
150
- // return translations[id];
151
- // },
152
- defaultExpanded: false,
153
- isChildOfHeader: true,
154
- isFixedNav: false,
155
- isPersistent: true,
156
- addFocusListeners: true,
157
- addMouseListeners: true
158
- };
159
158
  SideNav.propTypes = {
160
159
  /**
161
160
  * Required props for accessibility label on the underlying menu
package/lib/index.js CHANGED
@@ -98,6 +98,7 @@ var TreeView = require('./components/TreeView/TreeView.js');
98
98
  var HeaderMenuButton = require('./components/UIShell/HeaderMenuButton.js');
99
99
  var HeaderName = require('./components/UIShell/HeaderName.js');
100
100
  var HeaderNavigation = require('./components/UIShell/HeaderNavigation.js');
101
+ var HeaderSideNavItems = require('./components/UIShell/HeaderSideNavItems.js');
101
102
  var SkipToContent = require('./components/UIShell/SkipToContent.js');
102
103
  var SideNavDivider = require('./components/UIShell/SideNavDivider.js');
103
104
  var SideNavFooter = require('./components/UIShell/SideNavFooter.js');
@@ -209,7 +210,6 @@ var HeaderGlobalBar = require('./components/UIShell/HeaderGlobalBar.js');
209
210
  var HeaderMenu = require('./components/UIShell/HeaderMenu.js');
210
211
  var HeaderMenuItem = require('./components/UIShell/HeaderMenuItem.js');
211
212
  var HeaderPanel = require('./components/UIShell/HeaderPanel.js');
212
- var HeaderSideNavItems = require('./components/UIShell/HeaderSideNavItems.js');
213
213
  var Switcher = require('./components/UIShell/Switcher.js');
214
214
  var SwitcherItem = require('./components/UIShell/SwitcherItem.js');
215
215
  var SwitcherDivider = require('./components/UIShell/SwitcherDivider.js');
@@ -325,6 +325,7 @@ exports.TreeView = TreeView["default"];
325
325
  exports.HeaderMenuButton = HeaderMenuButton["default"];
326
326
  exports.HeaderName = HeaderName["default"];
327
327
  exports.HeaderNavigation = HeaderNavigation["default"];
328
+ exports.HeaderSideNavItems = HeaderSideNavItems["default"];
328
329
  exports.SkipToContent = SkipToContent["default"];
329
330
  exports.SideNavDivider = SideNavDivider["default"];
330
331
  exports.SideNavFooter = SideNavFooter["default"];
@@ -461,7 +462,6 @@ exports.HeaderGlobalBar = HeaderGlobalBar["default"];
461
462
  exports.HeaderMenu = HeaderMenu["default"];
462
463
  exports.HeaderMenuItem = HeaderMenuItem["default"];
463
464
  exports.HeaderPanel = HeaderPanel["default"];
464
- exports.HeaderSideNavItems = HeaderSideNavItems["default"];
465
465
  exports.Switcher = Switcher["default"];
466
466
  exports.SwitcherItem = SwitcherItem["default"];
467
467
  exports.SwitcherDivider = SwitcherDivider["default"];
@@ -0,0 +1,11 @@
1
+ import * as React from 'react';
2
+ export type ReactAttr<T = HTMLElement> = React.HTMLAttributes<T>;
3
+ export type ForwardRefProps<T, P = unknown> = React.PropsWithoutRef<React.PropsWithChildren<P>> & React.RefAttributes<T>;
4
+ export type ForwardRefReturn<T, P = unknown> = React.ForwardRefExoticComponent<ForwardRefProps<T, P>>;
5
+ /**
6
+ * For "as" props. Creates an "as" property that supports native html tags such as 'span', 'a', 'button' as well as custom functional components
7
+ * All native props for the supplied html tag/component are inferred as part of the base component props, allowing us to use props like `href` on an 'a' element ect
8
+ */
9
+ export type PolymorphicProps<Element extends React.ElementType, Props> = Props & Omit<React.ComponentProps<Element>, 'as'> & {
10
+ as?: Element;
11
+ };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@carbon/react",
3
3
  "description": "React components for the Carbon Design System",
4
- "version": "1.28.0",
4
+ "version": "1.29.0",
5
5
  "license": "Apache-2.0",
6
6
  "main": "lib/index.js",
7
7
  "module": "es/index.js",
@@ -46,7 +46,7 @@
46
46
  "@carbon/feature-flags": "^0.13.0",
47
47
  "@carbon/icons-react": "^11.19.0",
48
48
  "@carbon/layout": "^11.13.0",
49
- "@carbon/styles": "^1.28.0",
49
+ "@carbon/styles": "^1.29.0",
50
50
  "@carbon/telemetry": "0.1.0",
51
51
  "classnames": "2.3.2",
52
52
  "copy-to-clipboard": "^3.3.1",
@@ -109,7 +109,7 @@
109
109
  "react": "^18.2.0",
110
110
  "react-dom": "^18.2.0",
111
111
  "requestanimationframe": "^0.0.23",
112
- "rimraf": "^4.0.0",
112
+ "rimraf": "^5.0.0",
113
113
  "rollup": "^2.79.1",
114
114
  "rollup-plugin-strip-banner": "^2.0.0",
115
115
  "rtlcss": "^4.0.0",
@@ -133,5 +133,5 @@
133
133
  "**/*.scss",
134
134
  "**/*.css"
135
135
  ],
136
- "gitHead": "75f69e49161bf54184d4392c3d48115f852dc8fc"
136
+ "gitHead": "044bb55aff8c9cddef1a7e42d2bfeac59a89c546"
137
137
  }