carbon-react 144.16.0 → 144.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -63,8 +63,5 @@ export interface MenuWithIcon extends MenuItemBaseProps {
63
63
  icon: IconType;
64
64
  children?: React.ReactNode;
65
65
  }
66
- export declare const MenuItem: {
67
- ({ submenu, submenuMaxWidth, children, href, onClick, target, submenuDirection, icon, selected, onKeyDown, variant, showDropdownArrow, ariaLabel, clickToOpen, maxWidth, onSubmenuOpen, onSubmenuClose, overrideColor, rel, as, "data-element": dataElement, "data-role": dataRole, ...rest }: MenuWithChildren | MenuWithIcon): React.JSX.Element;
68
- displayName: string;
69
- };
66
+ export declare const MenuItem: ({ submenu, submenuMaxWidth, children, href, onClick, target, submenuDirection, icon, selected, onKeyDown, variant, showDropdownArrow, ariaLabel, clickToOpen, maxWidth, onSubmenuOpen, onSubmenuClose, overrideColor, rel, as, "data-element": dataElement, "data-role": dataRole, ...rest }: MenuWithChildren | MenuWithIcon) => React.JSX.Element;
70
67
  export default MenuItem;
@@ -8,6 +8,7 @@ import Events from "../../../__internal__/utils/helpers/events";
8
8
  import MenuContext from "../__internal__/menu.context";
9
9
  import Submenu from "../__internal__/submenu/submenu.component";
10
10
  import SubmenuContext from "../__internal__/submenu/submenu.context";
11
+ import MenuSegmentContext from "../menu-segment-title/menu-segment-title.context";
11
12
  import { StyledMenuItem } from "../menu.style";
12
13
  import guid from "../../../__internal__/utils/helpers/guid";
13
14
  import Logger from "../../../__internal__/utils/logger";
@@ -44,6 +45,10 @@ export const MenuItem = ({
44
45
  !(icon || children) ? process.env.NODE_ENV !== "production" ? invariant(false, "Either prop `icon` must be defined or this node must have `children`.") : invariant(false) : void 0;
45
46
  !(children || ariaLabel || typeof submenu === "string") ? process.env.NODE_ENV !== "production" ? invariant(false, "If no text is provided an `ariaLabel` should be given to facilitate accessibility.") : invariant(false) : void 0;
46
47
  !(typeof submenu === "boolean" || submenu === undefined || children && typeof submenu === "string" && submenu.length) ? process.env.NODE_ENV !== "production" ? invariant(false, "You should not pass `children` when `submenu` is an empty string") : invariant(false) : void 0;
48
+ const {
49
+ isChildOfSegment,
50
+ overriddenVariant
51
+ } = useContext(MenuSegmentContext);
47
52
  const {
48
53
  inFullscreenView,
49
54
  registerItem,
@@ -130,6 +135,9 @@ export const MenuItem = ({
130
135
  overrideColor,
131
136
  ref
132
137
  };
138
+ if (overriddenVariant === "alternate" && isChildOfSegment && variant === "alternate" && ["white", "black"].includes(menuType)) {
139
+ elementProps.overrideColor = true;
140
+ }
133
141
  const getTitle = title => maxWidth && typeof title === "string" ? title : undefined;
134
142
  const itemMaxWidth = !inFullscreenView ? maxWidth : undefined;
135
143
  const asPassiveItem = !(onClick || href);
@@ -193,5 +201,4 @@ export const MenuItem = ({
193
201
  inSubmenu: !!handleSubmenuKeyDown
194
202
  }), children));
195
203
  };
196
- MenuItem.displayName = "MenuItem";
197
204
  export default MenuItem;
@@ -1,11 +1,12 @@
1
1
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
2
- import React, { useContext } from "react";
2
+ import React, { useContext, useMemo } from "react";
3
3
  import PropTypes from "prop-types";
4
4
  import { StyledTitle, StyledSegmentChildren } from "./menu-segment-title.style";
5
5
  import MenuContext from "../__internal__/menu.context";
6
6
  import { StyledMenuItem } from "../menu.style";
7
7
  import tagComponent from "../../../__internal__/utils/helpers/tags";
8
8
  import SubmenuContext from "../__internal__/submenu/submenu.context";
9
+ import MenuSegmentContext from "./menu-segment-title.context";
9
10
  const AS_VALUES = ["h2", "h3", "h4", "h5", "h6"];
10
11
  const MenuSegmentTitle = /*#__PURE__*/React.forwardRef(({
11
12
  children,
@@ -18,6 +19,10 @@ const MenuSegmentTitle = /*#__PURE__*/React.forwardRef(({
18
19
  const {
19
20
  submenuHasMaxWidth
20
21
  } = useContext(SubmenuContext);
22
+ const isChildOfFullscreenMenu = menuContext?.inFullscreenView || false;
23
+ const overriddenVariant = useMemo(() => {
24
+ return isChildOfFullscreenMenu && variant === "alternate" && ["white", "black"].includes(menuContext.menuType) ? "default" : variant;
25
+ }, [isChildOfFullscreenMenu, menuContext.menuType, variant]);
21
26
  return /*#__PURE__*/React.createElement(StyledMenuItem, {
22
27
  inSubmenu: true
23
28
  }, /*#__PURE__*/React.createElement(StyledTitle, _extends({
@@ -25,11 +30,18 @@ const MenuSegmentTitle = /*#__PURE__*/React.forwardRef(({
25
30
  }, tagComponent("menu-segment-title", rest), {
26
31
  menuType: menuContext.menuType,
27
32
  ref: ref,
28
- variant: variant,
33
+ variant: overriddenVariant,
29
34
  shouldWrap: submenuHasMaxWidth
30
35
  }), text), children && /*#__PURE__*/React.createElement(StyledSegmentChildren, {
31
- "data-role": "menu-segment-children"
32
- }, children));
36
+ "data-role": "menu-segment-children",
37
+ menuType: menuContext.menuType,
38
+ variant: overriddenVariant
39
+ }, /*#__PURE__*/React.createElement(MenuSegmentContext.Provider, {
40
+ value: {
41
+ isChildOfSegment: true,
42
+ overriddenVariant
43
+ }
44
+ }, children)));
33
45
  });
34
46
  if (process.env.NODE_ENV !== "production") {
35
47
  MenuSegmentTitle.propTypes = {
@@ -0,0 +1,7 @@
1
+ import React from "react";
2
+ export interface MenuSegmentContextProps {
3
+ isChildOfSegment: boolean;
4
+ overriddenVariant: string;
5
+ }
6
+ export declare const MenuSegmentContext: React.Context<MenuSegmentContextProps>;
7
+ export default MenuSegmentContext;
@@ -0,0 +1,6 @@
1
+ import React from "react";
2
+ export const MenuSegmentContext = /*#__PURE__*/React.createContext({
3
+ isChildOfSegment: false,
4
+ overriddenVariant: "default"
5
+ });
6
+ export default MenuSegmentContext;
@@ -6,5 +6,8 @@ interface StyledTitleProps {
6
6
  shouldWrap?: boolean;
7
7
  }
8
8
  declare const StyledTitle: import("styled-components").StyledComponent<"h2", any, StyledTitleProps, never>;
9
- declare const StyledSegmentChildren: import("styled-components").StyledComponent<"ul", any, {}, never>;
9
+ declare const StyledSegmentChildren: import("styled-components").StyledComponent<"ul", any, {
10
+ variant?: VariantType | undefined;
11
+ menuType: MenuType;
12
+ }, never>;
10
13
  export { StyledTitle, StyledSegmentChildren };
@@ -19,17 +19,25 @@ const StyledTitle = styled.h2`
19
19
  `}
20
20
  `;
21
21
  const StyledSegmentChildren = styled.ul`
22
- padding: 0;
22
+ ${({
23
+ menuType,
24
+ variant
25
+ }) => css`
26
+ padding: 0;
23
27
 
24
- li {
25
- list-style: none;
28
+ li {
29
+ list-style: none;
30
+ ${variant === "alternate" && css`
31
+ background-color: ${menuConfigVariants[menuType].alternate};
32
+ `}
26
33
 
27
- &:not(&:last-child) a,
28
- &:not(&:last-child) button,
29
- &:not(&:last-child) > span,
30
- &:not(&:last-child) > div {
31
- border-radius: var(--borderRadius000);
34
+ &:not(&:last-child) a,
35
+ &:not(&:last-child) button,
36
+ &:not(&:last-child) > span,
37
+ &:not(&:last-child) > div {
38
+ border-radius: var(--borderRadius000);
39
+ }
32
40
  }
33
- }
41
+ `}
34
42
  `;
35
43
  export { StyledTitle, StyledSegmentChildren };
@@ -11,6 +11,7 @@ import Box from "../../box";
11
11
  import { StyledList, StyledVerticalMenuFullScreen } from "../vertical-menu.style";
12
12
  import VerticalMenuFullScreenContext from "./__internal__/vertical-menu-full-screen.context";
13
13
  import Events from "../../../__internal__/utils/helpers/events/events";
14
+ import useModalManager from "../../../hooks/__internal__/useModalManager";
14
15
  export const VerticalMenuFullScreen = ({
15
16
  "aria-label": ariaLabel,
16
17
  "aria-labelledby": ariaLabelledBy,
@@ -27,6 +28,12 @@ export const VerticalMenuFullScreen = ({
27
28
  onClose(ev);
28
29
  }
29
30
  }, [onClose]);
31
+ useModalManager({
32
+ open: isOpen,
33
+ closeModal: handleKeyDown,
34
+ modalRef: menuWrapperRef,
35
+ topModalOverride: true
36
+ });
30
37
 
31
38
  // TODO remove this as part of FE-5650
32
39
  if (!isOpen) return null;
@@ -63,8 +63,5 @@ export interface MenuWithIcon extends MenuItemBaseProps {
63
63
  icon: IconType;
64
64
  children?: React.ReactNode;
65
65
  }
66
- export declare const MenuItem: {
67
- ({ submenu, submenuMaxWidth, children, href, onClick, target, submenuDirection, icon, selected, onKeyDown, variant, showDropdownArrow, ariaLabel, clickToOpen, maxWidth, onSubmenuOpen, onSubmenuClose, overrideColor, rel, as, "data-element": dataElement, "data-role": dataRole, ...rest }: MenuWithChildren | MenuWithIcon): React.JSX.Element;
68
- displayName: string;
69
- };
66
+ export declare const MenuItem: ({ submenu, submenuMaxWidth, children, href, onClick, target, submenuDirection, icon, selected, onKeyDown, variant, showDropdownArrow, ariaLabel, clickToOpen, maxWidth, onSubmenuOpen, onSubmenuClose, overrideColor, rel, as, "data-element": dataElement, "data-role": dataRole, ...rest }: MenuWithChildren | MenuWithIcon) => React.JSX.Element;
70
67
  export default MenuItem;
@@ -13,6 +13,7 @@ var _events = _interopRequireDefault(require("../../../__internal__/utils/helper
13
13
  var _menu = _interopRequireDefault(require("../__internal__/menu.context"));
14
14
  var _submenu = _interopRequireDefault(require("../__internal__/submenu/submenu.component"));
15
15
  var _submenu2 = _interopRequireDefault(require("../__internal__/submenu/submenu.context"));
16
+ var _menuSegmentTitle = _interopRequireDefault(require("../menu-segment-title/menu-segment-title.context"));
16
17
  var _menu2 = require("../menu.style");
17
18
  var _guid = _interopRequireDefault(require("../../../__internal__/utils/helpers/guid"));
18
19
  var _logger = _interopRequireDefault(require("../../../__internal__/utils/logger"));
@@ -53,6 +54,10 @@ const MenuItem = ({
53
54
  !(icon || children) ? process.env.NODE_ENV !== "production" ? (0, _invariant.default)(false, "Either prop `icon` must be defined or this node must have `children`.") : (0, _invariant.default)(false) : void 0;
54
55
  !(children || ariaLabel || typeof submenu === "string") ? process.env.NODE_ENV !== "production" ? (0, _invariant.default)(false, "If no text is provided an `ariaLabel` should be given to facilitate accessibility.") : (0, _invariant.default)(false) : void 0;
55
56
  !(typeof submenu === "boolean" || submenu === undefined || children && typeof submenu === "string" && submenu.length) ? process.env.NODE_ENV !== "production" ? (0, _invariant.default)(false, "You should not pass `children` when `submenu` is an empty string") : (0, _invariant.default)(false) : void 0;
57
+ const {
58
+ isChildOfSegment,
59
+ overriddenVariant
60
+ } = (0, _react.useContext)(_menuSegmentTitle.default);
56
61
  const {
57
62
  inFullscreenView,
58
63
  registerItem,
@@ -139,6 +144,9 @@ const MenuItem = ({
139
144
  overrideColor,
140
145
  ref
141
146
  };
147
+ if (overriddenVariant === "alternate" && isChildOfSegment && variant === "alternate" && ["white", "black"].includes(menuType)) {
148
+ elementProps.overrideColor = true;
149
+ }
142
150
  const getTitle = title => maxWidth && typeof title === "string" ? title : undefined;
143
151
  const itemMaxWidth = !inFullscreenView ? maxWidth : undefined;
144
152
  const asPassiveItem = !(onClick || href);
@@ -203,5 +211,4 @@ const MenuItem = ({
203
211
  }), children));
204
212
  };
205
213
  exports.MenuItem = MenuItem;
206
- MenuItem.displayName = "MenuItem";
207
214
  var _default = exports.default = MenuItem;
@@ -11,6 +11,7 @@ var _menu = _interopRequireDefault(require("../__internal__/menu.context"));
11
11
  var _menu2 = require("../menu.style");
12
12
  var _tags = _interopRequireDefault(require("../../../__internal__/utils/helpers/tags"));
13
13
  var _submenu = _interopRequireDefault(require("../__internal__/submenu/submenu.context"));
14
+ var _menuSegmentTitle2 = _interopRequireDefault(require("./menu-segment-title.context"));
14
15
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
16
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
16
17
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
@@ -27,6 +28,10 @@ const MenuSegmentTitle = /*#__PURE__*/_react.default.forwardRef(({
27
28
  const {
28
29
  submenuHasMaxWidth
29
30
  } = (0, _react.useContext)(_submenu.default);
31
+ const isChildOfFullscreenMenu = menuContext?.inFullscreenView || false;
32
+ const overriddenVariant = (0, _react.useMemo)(() => {
33
+ return isChildOfFullscreenMenu && variant === "alternate" && ["white", "black"].includes(menuContext.menuType) ? "default" : variant;
34
+ }, [isChildOfFullscreenMenu, menuContext.menuType, variant]);
30
35
  return /*#__PURE__*/_react.default.createElement(_menu2.StyledMenuItem, {
31
36
  inSubmenu: true
32
37
  }, /*#__PURE__*/_react.default.createElement(_menuSegmentTitle.StyledTitle, _extends({
@@ -34,11 +39,18 @@ const MenuSegmentTitle = /*#__PURE__*/_react.default.forwardRef(({
34
39
  }, (0, _tags.default)("menu-segment-title", rest), {
35
40
  menuType: menuContext.menuType,
36
41
  ref: ref,
37
- variant: variant,
42
+ variant: overriddenVariant,
38
43
  shouldWrap: submenuHasMaxWidth
39
44
  }), text), children && /*#__PURE__*/_react.default.createElement(_menuSegmentTitle.StyledSegmentChildren, {
40
- "data-role": "menu-segment-children"
41
- }, children));
45
+ "data-role": "menu-segment-children",
46
+ menuType: menuContext.menuType,
47
+ variant: overriddenVariant
48
+ }, /*#__PURE__*/_react.default.createElement(_menuSegmentTitle2.default.Provider, {
49
+ value: {
50
+ isChildOfSegment: true,
51
+ overriddenVariant
52
+ }
53
+ }, children)));
42
54
  });
43
55
  if (process.env.NODE_ENV !== "production") {
44
56
  MenuSegmentTitle.propTypes = {
@@ -0,0 +1,7 @@
1
+ import React from "react";
2
+ export interface MenuSegmentContextProps {
3
+ isChildOfSegment: boolean;
4
+ overriddenVariant: string;
5
+ }
6
+ export declare const MenuSegmentContext: React.Context<MenuSegmentContextProps>;
7
+ export default MenuSegmentContext;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.MenuSegmentContext = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ const MenuSegmentContext = exports.MenuSegmentContext = /*#__PURE__*/_react.default.createContext({
10
+ isChildOfSegment: false,
11
+ overriddenVariant: "default"
12
+ });
13
+ var _default = exports.default = MenuSegmentContext;
@@ -6,5 +6,8 @@ interface StyledTitleProps {
6
6
  shouldWrap?: boolean;
7
7
  }
8
8
  declare const StyledTitle: import("styled-components").StyledComponent<"h2", any, StyledTitleProps, never>;
9
- declare const StyledSegmentChildren: import("styled-components").StyledComponent<"ul", any, {}, never>;
9
+ declare const StyledSegmentChildren: import("styled-components").StyledComponent<"ul", any, {
10
+ variant?: VariantType | undefined;
11
+ menuType: MenuType;
12
+ }, never>;
10
13
  export { StyledTitle, StyledSegmentChildren };
@@ -28,16 +28,24 @@ const StyledTitle = exports.StyledTitle = _styledComponents.default.h2`
28
28
  `}
29
29
  `;
30
30
  const StyledSegmentChildren = exports.StyledSegmentChildren = _styledComponents.default.ul`
31
- padding: 0;
31
+ ${({
32
+ menuType,
33
+ variant
34
+ }) => (0, _styledComponents.css)`
35
+ padding: 0;
32
36
 
33
- li {
34
- list-style: none;
37
+ li {
38
+ list-style: none;
39
+ ${variant === "alternate" && (0, _styledComponents.css)`
40
+ background-color: ${_menu.default[menuType].alternate};
41
+ `}
35
42
 
36
- &:not(&:last-child) a,
37
- &:not(&:last-child) button,
38
- &:not(&:last-child) > span,
39
- &:not(&:last-child) > div {
40
- border-radius: var(--borderRadius000);
43
+ &:not(&:last-child) a,
44
+ &:not(&:last-child) button,
45
+ &:not(&:last-child) > span,
46
+ &:not(&:last-child) > div {
47
+ border-radius: var(--borderRadius000);
48
+ }
41
49
  }
42
- }
50
+ `}
43
51
  `;
@@ -16,6 +16,7 @@ var _box = _interopRequireDefault(require("../../box"));
16
16
  var _verticalMenu = require("../vertical-menu.style");
17
17
  var _verticalMenuFullScreen = _interopRequireDefault(require("./__internal__/vertical-menu-full-screen.context"));
18
18
  var _events = _interopRequireDefault(require("../../../__internal__/utils/helpers/events/events"));
19
+ var _useModalManager = _interopRequireDefault(require("../../../hooks/__internal__/useModalManager"));
19
20
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
20
21
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
21
22
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
@@ -36,6 +37,12 @@ const VerticalMenuFullScreen = ({
36
37
  onClose(ev);
37
38
  }
38
39
  }, [onClose]);
40
+ (0, _useModalManager.default)({
41
+ open: isOpen,
42
+ closeModal: handleKeyDown,
43
+ modalRef: menuWrapperRef,
44
+ topModalOverride: true
45
+ });
39
46
 
40
47
  // TODO remove this as part of FE-5650
41
48
  if (!isOpen) return null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "carbon-react",
3
- "version": "144.16.0",
3
+ "version": "144.17.1",
4
4
  "description": "A library of reusable React components for easily building user interfaces.",
5
5
  "files": [
6
6
  "lib",