carbon-react 106.6.2 → 106.6.3

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 (62) hide show
  1. package/esm/__spec_helper__/expect.d.ts +8 -1
  2. package/esm/__spec_helper__/expect.js +1 -5
  3. package/esm/__spec_helper__/test-utils.d.ts +71 -33
  4. package/esm/__spec_helper__/test-utils.js +63 -65
  5. package/esm/components/action-popover/action-popover-context.d.ts +7 -2
  6. package/esm/components/action-popover/action-popover-context.js +1 -1
  7. package/esm/components/action-popover/action-popover-divider/action-popover-divider.component.d.ts +1 -1
  8. package/esm/components/action-popover/action-popover-item/action-popover-item.component.d.ts +28 -41
  9. package/esm/components/action-popover/action-popover-item/action-popover-item.component.js +99 -118
  10. package/esm/components/action-popover/action-popover-menu/action-popover-menu.component.d.ts +35 -2
  11. package/esm/components/action-popover/action-popover-menu/action-popover-menu.component.js +42 -53
  12. package/esm/components/action-popover/action-popover-menu-button/action-popover-menu-button.component.d.ts +20 -18
  13. package/esm/components/action-popover/action-popover-menu-button/action-popover-menu-button.component.js +13 -5
  14. package/esm/components/action-popover/action-popover-test.stories.js +76 -0
  15. package/esm/components/action-popover/action-popover.component.d.ts +30 -53
  16. package/esm/components/action-popover/action-popover.component.js +205 -67
  17. package/esm/components/action-popover/action-popover.style.d.ts +17 -11
  18. package/esm/components/action-popover/action-popover.style.js +20 -26
  19. package/esm/components/action-popover/index.d.ts +9 -5
  20. package/esm/components/modal/modal.component.js +3 -60
  21. package/esm/components/toast/toast.component.js +3 -13
  22. package/esm/hooks/__internal__/useModalManager/index.d.ts +1 -0
  23. package/esm/hooks/__internal__/useModalManager/index.js +1 -0
  24. package/esm/hooks/__internal__/useModalManager/useModalManager.d.ts +3 -0
  25. package/esm/hooks/__internal__/useModalManager/useModalManager.js +66 -0
  26. package/lib/__spec_helper__/expect.d.ts +8 -1
  27. package/lib/__spec_helper__/expect.js +2 -4
  28. package/lib/__spec_helper__/test-utils.d.ts +71 -33
  29. package/lib/__spec_helper__/test-utils.js +63 -65
  30. package/lib/components/action-popover/action-popover-context.d.ts +7 -2
  31. package/lib/components/action-popover/action-popover-context.js +1 -1
  32. package/lib/components/action-popover/action-popover-divider/action-popover-divider.component.d.ts +1 -1
  33. package/lib/components/action-popover/action-popover-item/action-popover-item.component.d.ts +28 -41
  34. package/lib/components/action-popover/action-popover-item/action-popover-item.component.js +100 -119
  35. package/lib/components/action-popover/action-popover-menu/action-popover-menu.component.d.ts +35 -2
  36. package/lib/components/action-popover/action-popover-menu/action-popover-menu.component.js +44 -55
  37. package/lib/components/action-popover/action-popover-menu-button/action-popover-menu-button.component.d.ts +20 -18
  38. package/lib/components/action-popover/action-popover-menu-button/action-popover-menu-button.component.js +13 -5
  39. package/lib/components/action-popover/action-popover-test.stories.js +95 -0
  40. package/lib/components/action-popover/action-popover.component.d.ts +30 -53
  41. package/lib/components/action-popover/action-popover.component.js +206 -71
  42. package/lib/components/action-popover/action-popover.style.d.ts +17 -11
  43. package/lib/components/action-popover/action-popover.style.js +21 -28
  44. package/lib/components/action-popover/index.d.ts +9 -5
  45. package/lib/components/modal/modal.component.js +3 -62
  46. package/lib/components/toast/toast.component.js +4 -17
  47. package/lib/hooks/__internal__/useModalManager/index.d.ts +1 -0
  48. package/lib/hooks/__internal__/useModalManager/index.js +15 -0
  49. package/lib/hooks/__internal__/useModalManager/package.json +6 -0
  50. package/lib/hooks/__internal__/useModalManager/useModalManager.d.ts +3 -0
  51. package/lib/hooks/__internal__/useModalManager/useModalManager.js +79 -0
  52. package/package.json +5 -1
  53. package/esm/components/action-popover/action-popover-divider/action-popover-divider.d.ts +0 -12
  54. package/esm/components/action-popover/action-popover-item/action-popover-item.d.ts +0 -26
  55. package/esm/components/action-popover/action-popover-menu/action-popover-menu.d.ts +0 -33
  56. package/esm/components/action-popover/action-popover-menu-button/action-popover-menu-button.d.ts +0 -13
  57. package/esm/components/action-popover/action-popover.d.ts +0 -39
  58. package/lib/components/action-popover/action-popover-divider/action-popover-divider.d.ts +0 -12
  59. package/lib/components/action-popover/action-popover-item/action-popover-item.d.ts +0 -26
  60. package/lib/components/action-popover/action-popover-menu/action-popover-menu.d.ts +0 -33
  61. package/lib/components/action-popover/action-popover-menu-button/action-popover-menu-button.d.ts +0 -13
  62. package/lib/components/action-popover/action-popover.d.ts +0 -39
@@ -32,11 +32,19 @@ const ActionPopoverMenuButton = ({
32
32
  }, props), children));
33
33
 
34
34
  ActionPopoverMenuButton.propTypes = {
35
- buttonType: _propTypes.default.string,
36
- iconType: _propTypes.default.string,
37
- iconPosition: _propTypes.default.string,
38
- size: _propTypes.default.string,
39
- children: _propTypes.default.string
35
+ "ariaAttributes": _propTypes.default.shape({
36
+ "aria-controls": _propTypes.default.string.isRequired,
37
+ "aria-expanded": _propTypes.default.string.isRequired,
38
+ "aria-haspopup": _propTypes.default.string.isRequired,
39
+ "aria-label": _propTypes.default.string.isRequired
40
+ }).isRequired,
41
+ "buttonType": _propTypes.default.oneOf(["darkBackground", "dashed", "primary", "secondary", "tertiary"]),
42
+ "children": _propTypes.default.string,
43
+ "data-element": _propTypes.default.string.isRequired,
44
+ "iconPosition": _propTypes.default.oneOf(["after", "before"]),
45
+ "iconType": _propTypes.default.oneOf(["add", "alert", "analysis", "arrow_down", "arrow_left_boxed", "arrow_left_right_small", "arrow_left_small", "arrow_left", "arrow_right_small", "arrow_right", "arrow_up", "attach", "bank", "basket_with_squares", "basket", "bin", "block_arrow_right", "blocked_square", "blocked", "bold", "boxed_shapes", "bulk_destroy", "bullet_list_dotted", "bullet_list_numbers", "bullet_list", "business", "calendar_today", "calendar", "call", "camera", "card_view", "caret_down", "caret_large_down", "caret_large_left", "caret_large_right", "caret_large_up", "caret_left", "caret_right", "caret_up", "cart", "chart_bar", "chart_line", "chart_pie", "chat_notes", "chat", "chevron_down_thick", "chevron_down", "chevron_left_thick", "chevron_left", "chevron_right_thick", "chevron_right", "chevron_up_thick", "chevron_up", "circle_with_dots", "circles_connection", "clock", "close", "coins", "collaborate", "computer_clock", "connect", "copy", "credit_card_slash", "credit_card", "cross_circle", "cross", "csv", "delete", "delivery", "disconnect", "disputed", "document_right_align", "document_tick", "document_vertical_lines", "download", "draft", "drag_vertical", "drag", "dropdown", "duplicate", "edit", "edited", "ellipsis_horizontal", "ellipsis_vertical", "email_switch", "email", "error_square", "error", "euro", "expand", "factory", "favourite_lined", "favourite", "fax", "feedback", "file_excel", "file_generic", "file_image", "file_pdf", "file_word", "files_leaning", "filter_new", "filter", "fit_height", "fit_width", "flag", "folder", "gift", "graph", "grid", "help", "hide", "home", "image", "in_progress", "in_transit", "individual", "info", "italic", "key", "ledger_arrow_left", "ledger_arrow_right", "ledger", "link", "list_view", "location", "locked", "logout", "lookup", "marker", "message", "messages", "minus_large", "minus", "mobile", "money_bag", "pause_circle", "pause", "pdf", "people_switch", "people", "person_info", "person_tick", "person", "phone", "play_circle", "play", "plus_large", "plus", "pound", "print", "progress", "progressed", "question", "refresh_clock", "refresh", "remove", "sage_coin", "save", "scan", "search", "services", "settings", "share", "shop", "sort_down", "sort_up", "spanner", "split_container", "split", "square_dot", "squares_nine", "stacked_boxes", "stacked_squares", "submitted", "sync", "tag", "three_boxes", "tick_circle", "tick", "unlocked", "upload", "uploaded", "video", "view", "warning"]),
46
+ "size": _propTypes.default.oneOf(["large", "medium", "small"]),
47
+ "tabIndex": _propTypes.default.number.isRequired
40
48
  };
41
49
  var _default = ActionPopoverMenuButton;
42
50
  exports.default = _default;
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Default = exports.default = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _addonActions = require("@storybook/addon-actions");
11
+
12
+ var _ = require(".");
13
+
14
+ var _flatTable = require("../flat-table");
15
+
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+
18
+ var _default = {
19
+ title: "Action Popover/Test",
20
+ parameters: {
21
+ info: {
22
+ disable: true
23
+ },
24
+ chromatic: {
25
+ disable: true
26
+ }
27
+ }
28
+ };
29
+ exports.default = _default;
30
+
31
+ const Default = () => {
32
+ const submenu = /*#__PURE__*/_react.default.createElement(_.ActionPopoverMenu, null, /*#__PURE__*/_react.default.createElement(_.ActionPopoverItem, {
33
+ onClick: (0, _addonActions.action)("sub menu 1")
34
+ }, "Sub Menu 1"), /*#__PURE__*/_react.default.createElement(_.ActionPopoverItem, {
35
+ onClick: (0, _addonActions.action)("sub menu 2")
36
+ }, "Sub Menu 2"), /*#__PURE__*/_react.default.createElement(_.ActionPopoverItem, {
37
+ disabled: true,
38
+ onClick: (0, _addonActions.action)("sub menu 3")
39
+ }, "Sub Menu 3"));
40
+
41
+ const submenuWithIcons = /*#__PURE__*/_react.default.createElement(_.ActionPopoverMenu, null, /*#__PURE__*/_react.default.createElement(_.ActionPopoverItem, {
42
+ icon: "graph",
43
+ onClick: (0, _addonActions.action)("sub menu 1")
44
+ }, "Sub Menu 1"), /*#__PURE__*/_react.default.createElement(_.ActionPopoverItem, {
45
+ icon: "add",
46
+ onClick: (0, _addonActions.action)("sub menu 2")
47
+ }, "Sub Menu 2"), /*#__PURE__*/_react.default.createElement(_.ActionPopoverItem, {
48
+ icon: "print",
49
+ disabled: true,
50
+ onClick: (0, _addonActions.action)("sub menu 3")
51
+ }, "Sub Menu 3"));
52
+
53
+ return /*#__PURE__*/_react.default.createElement("div", {
54
+ style: {
55
+ marginTop: "40px",
56
+ height: "275px"
57
+ }
58
+ }, /*#__PURE__*/_react.default.createElement(_flatTable.FlatTable, {
59
+ isZebra: true
60
+ }, /*#__PURE__*/_react.default.createElement(_flatTable.FlatTableHead, null, /*#__PURE__*/_react.default.createElement(_flatTable.FlatTableRow, null, /*#__PURE__*/_react.default.createElement(_flatTable.FlatTableHeader, null, "First Name"), /*#__PURE__*/_react.default.createElement(_flatTable.FlatTableHeader, null, "Last Name"), /*#__PURE__*/_react.default.createElement(_flatTable.FlatTableHeader, null, "\xA0"))), /*#__PURE__*/_react.default.createElement(_flatTable.FlatTableBody, null, /*#__PURE__*/_react.default.createElement(_flatTable.FlatTableRow, null, /*#__PURE__*/_react.default.createElement(_flatTable.FlatTableCell, null, "John"), /*#__PURE__*/_react.default.createElement(_flatTable.FlatTableCell, null, "Doe"), /*#__PURE__*/_react.default.createElement(_flatTable.FlatTableCell, null, /*#__PURE__*/_react.default.createElement(_.ActionPopover, {
61
+ onOpen: (0, _addonActions.action)("popover opened"),
62
+ onClose: (0, _addonActions.action)("popover closed")
63
+ }, /*#__PURE__*/_react.default.createElement(_.ActionPopoverItem, {
64
+ disabled: true,
65
+ icon: "graph",
66
+ submenu: submenu,
67
+ onClick: (0, _addonActions.action)("email")
68
+ }, "Business"), /*#__PURE__*/_react.default.createElement(_.ActionPopoverItem, {
69
+ icon: "email",
70
+ onClick: (0, _addonActions.action)("email")
71
+ }, "Email Invoice"), /*#__PURE__*/_react.default.createElement(_.ActionPopoverItem, {
72
+ icon: "print",
73
+ onClick: (0, _addonActions.action)("print"),
74
+ submenu: submenu
75
+ }, "Print Invoice"), /*#__PURE__*/_react.default.createElement(_.ActionPopoverItem, {
76
+ icon: "pdf",
77
+ submenu: submenu,
78
+ onClick: (0, _addonActions.action)("pdf")
79
+ }, "Download PDF"), /*#__PURE__*/_react.default.createElement(_.ActionPopoverItem, {
80
+ icon: "csv",
81
+ onClick: (0, _addonActions.action)("csv")
82
+ }, "Download CSV"), /*#__PURE__*/_react.default.createElement(_.ActionPopoverDivider, null), /*#__PURE__*/_react.default.createElement(_.ActionPopoverItem, {
83
+ icon: "delete",
84
+ onClick: (0, _addonActions.action)("delete")
85
+ }, "Delete")))), /*#__PURE__*/_react.default.createElement(_flatTable.FlatTableRow, null, /*#__PURE__*/_react.default.createElement(_flatTable.FlatTableCell, null, "Jane"), /*#__PURE__*/_react.default.createElement(_flatTable.FlatTableCell, null, "Smith"), /*#__PURE__*/_react.default.createElement(_flatTable.FlatTableCell, null, /*#__PURE__*/_react.default.createElement(_.ActionPopover, null, /*#__PURE__*/_react.default.createElement(_.ActionPopoverItem, {
86
+ icon: "csv",
87
+ onClick: (0, _addonActions.action)("csv")
88
+ }, "Download CSV")))), /*#__PURE__*/_react.default.createElement(_flatTable.FlatTableRow, null, /*#__PURE__*/_react.default.createElement(_flatTable.FlatTableCell, null, "Bob"), /*#__PURE__*/_react.default.createElement(_flatTable.FlatTableCell, null, "Jones"), /*#__PURE__*/_react.default.createElement(_flatTable.FlatTableCell, null, /*#__PURE__*/_react.default.createElement(_.ActionPopover, null, /*#__PURE__*/_react.default.createElement(_.ActionPopoverItem, {
89
+ icon: "csv",
90
+ submenu: submenuWithIcons,
91
+ onClick: (0, _addonActions.action)("csv")
92
+ }, "Download CSV")))))));
93
+ };
94
+
95
+ exports.Default = Default;
@@ -1,55 +1,32 @@
1
- export default ActionPopover;
2
- declare function ActionPopover({ children, id, onOpen, onClose, rightAlignMenu, renderButton, placement, horizontalAlignment, ...rest }: {
3
- [x: string]: any;
4
- children: any;
5
- id: any;
6
- onOpen: any;
7
- onClose: any;
8
- rightAlignMenu: any;
9
- renderButton: any;
10
- placement?: string | undefined;
11
- horizontalAlignment: any;
12
- }): JSX.Element;
13
- declare namespace ActionPopover {
14
- const propTypes: {
15
- /** Unique ID */
16
- id: PropTypes.Requireable<string>;
17
- /** Callback to be called on menu open */
18
- onOpen: PropTypes.Requireable<(...args: any[]) => any>;
19
- /** Callback to be called on menu close */
20
- onClose: PropTypes.Requireable<(...args: any[]) => any>;
21
- /** Boolean to control whether menu should align to right */
22
- rightAlignMenu: PropTypes.Requireable<boolean>;
23
- /** Children for popover component */
24
- children(props: any, propName: any, componentName: any): undefined;
25
- /** Render a custom menu button to override default ellipsis icon */
26
- renderButton: PropTypes.Requireable<(...args: any[]) => any>;
27
- /** Horizontal alignment of menu items content */
28
- horizontalAlignment: PropTypes.Requireable<string>;
29
- /** Set whether the menu should open above or below the button */
30
- placement: PropTypes.Requireable<string>;
31
- marginBottom?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
32
- margin?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
33
- m?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
34
- marginLeft?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
35
- ml?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
36
- marginRight?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
37
- mr?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
38
- marginTop?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
39
- mt?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
40
- mb?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
41
- marginX?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
42
- mx?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
43
- marginY?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
44
- my?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
1
+ import React from "react";
2
+ import { MarginProps } from "styled-system";
3
+ interface RenderButtonProps {
4
+ tabIndex: number;
5
+ "data-element": string;
6
+ ariaAttributes: {
7
+ "aria-haspopup": string;
8
+ "aria-label": string;
9
+ "aria-controls": string;
10
+ "aria-expanded": string;
45
11
  };
46
- namespace defaultProps {
47
- export const id: null;
48
- export { onOpen };
49
- export { onClose };
50
- export const horizontalAlignment: string;
51
- }
52
12
  }
53
- import PropTypes from "prop-types";
54
- declare function onOpen(): void;
55
- declare function onClose(): void;
13
+ export interface ActionPopoverProps extends MarginProps {
14
+ /** Children for popover component */
15
+ children?: React.ReactNode;
16
+ /** Horizontal alignment of menu items content */
17
+ horizontalAlignment?: "left" | "right";
18
+ /** Unique ID */
19
+ id?: string;
20
+ /** Callback to be called on menu open */
21
+ onOpen?: () => void;
22
+ /** Callback to be called on menu close */
23
+ onClose?: () => void;
24
+ /** Set whether the menu should open above or below the button */
25
+ placement?: "bottom" | "top";
26
+ /** Render a custom menu button to override default ellipsis icon */
27
+ renderButton?: (buttonProps: RenderButtonProps) => React.ReactNode;
28
+ /** Boolean to control whether menu should align to right */
29
+ rightAlignMenu?: boolean;
30
+ }
31
+ export declare const ActionPopover: ({ children, id, onOpen, onClose, rightAlignMenu, renderButton, placement, horizontalAlignment, ...rest }: ActionPopoverProps) => JSX.Element;
32
+ export default ActionPopover;
@@ -3,20 +3,18 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = void 0;
6
+ exports.default = exports.ActionPopover = void 0;
7
7
 
8
8
  var _react = _interopRequireWildcard(require("react"));
9
9
 
10
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
11
11
 
12
- var _propTypes2 = _interopRequireDefault(require("@styled-system/prop-types"));
12
+ var _invariant = _interopRequireDefault(require("invariant"));
13
13
 
14
14
  var _actionPopover = require("./action-popover.style");
15
15
 
16
16
  var _events = _interopRequireDefault(require("../../__internal__/utils/helpers/events"));
17
17
 
18
- var _utils = require("../../style/utils");
19
-
20
18
  var _popover = _interopRequireDefault(require("../../__internal__/popover"));
21
19
 
22
20
  var _guid = _interopRequireDefault(require("../../__internal__/utils/helpers/guid"));
@@ -39,28 +37,44 @@ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj;
39
37
 
40
38
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
41
39
 
42
- const marginPropTypes = (0, _utils.filterStyledSystemMarginProps)(_propTypes2.default.space);
40
+ const onOpenDefault = () => {};
41
+
42
+ const onCloseDefault = () => {};
43
43
 
44
44
  const ActionPopover = ({
45
45
  children,
46
46
  id,
47
- onOpen,
48
- onClose,
47
+ onOpen = onOpenDefault,
48
+ onClose = onCloseDefault,
49
49
  rightAlignMenu,
50
50
  renderButton,
51
51
  placement = "bottom",
52
- horizontalAlignment,
52
+ horizontalAlignment = "left",
53
53
  ...rest
54
54
  }) => {
55
55
  const l = (0, _useLocale.default)();
56
56
  const [isOpen, setOpenState] = (0, _react.useState)(false);
57
57
  const [focusIndex, setFocusIndex] = (0, _react.useState)(0);
58
58
  const [guid] = (0, _react.useState)((0, _guid.default)());
59
- const buttonRef = (0, _react.useRef)();
60
- const menu = (0, _react.useRef)();
59
+ const buttonRef = (0, _react.useRef)(null);
60
+ const menu = (0, _react.useRef)(null);
61
61
  const itemCount = (0, _react.useMemo)(() => {
62
- return _react.default.Children.toArray(children).filter(child => child.type === _actionPopoverItem.default).length;
62
+ return _react.default.Children.toArray(children).filter(child => {
63
+ return /*#__PURE__*/_react.default.isValidElement(child) && child.type === _actionPopoverItem.default;
64
+ }).length;
65
+ }, [children]);
66
+ const hasProperChildren = (0, _react.useMemo)(() => {
67
+ const incorrectChild = _react.default.Children.toArray(children).find(child => {
68
+ if (! /*#__PURE__*/_react.default.isValidElement(child)) {
69
+ return true;
70
+ }
71
+
72
+ return child.type !== _actionPopoverItem.default && child.type !== _actionPopoverDivider.default;
73
+ });
74
+
75
+ return !incorrectChild;
63
76
  }, [children]);
77
+ (0, _invariant.default)(hasProperChildren, `ActionPopover only accepts children of type \`${_actionPopoverItem.default.displayName}\`` + ` and \`${_actionPopoverDivider.default.displayName}\`.`);
64
78
  const mappedPlacement = (0, _react.useMemo)(() => {
65
79
  if (placement === "top" && !rightAlignMenu) {
66
80
  return "top-end";
@@ -87,6 +101,12 @@ const ActionPopover = ({
87
101
 
88
102
  setOpenState(value);
89
103
  }, [isOpen, onOpen, onClose]);
104
+ const focusButton = (0, _react.useCallback)(() => {
105
+ var _buttonRef$current;
106
+
107
+ const button = (_buttonRef$current = buttonRef.current) === null || _buttonRef$current === void 0 ? void 0 : _buttonRef$current.querySelector("[data-element='action-popover-button']");
108
+ button === null || button === void 0 ? void 0 : button.focus();
109
+ }, []);
90
110
  const onButtonClick = (0, _react.useCallback)(e => {
91
111
  e.stopPropagation();
92
112
  const isOpening = !isOpen;
@@ -94,9 +114,9 @@ const ActionPopover = ({
94
114
 
95
115
  if (!isOpening) {
96
116
  // Closing the menu should focus the MenuButton
97
- buttonRef.current.querySelector("[data-component='action-popover-button']").focus();
117
+ focusButton();
98
118
  }
99
- }, [isOpen, setOpen]); // Keyboard commands implemented as recommended by WAI-ARIA best practices
119
+ }, [isOpen, setOpen, focusButton]); // Keyboard commands implemented as recommended by WAI-ARIA best practices
100
120
  // https://www.w3.org/TR/wai-aria-practices/examples/menu-button/menu-button-actions.html
101
121
 
102
122
  const onButtonKeyDown = (0, _react.useCallback)(e => {
@@ -112,7 +132,6 @@ const ActionPopover = ({
112
132
  setOpen(true);
113
133
  }
114
134
  }, [itemCount, setOpen]);
115
- const focusButton = (0, _react.useCallback)(() => buttonRef.current.querySelector("[data-component='action-popover-button']").focus(), []);
116
135
  (0, _react.useEffect)(() => {
117
136
  const handler = ({
118
137
  target
@@ -120,7 +139,10 @@ const ActionPopover = ({
120
139
  // If the event didn't came from part of this component, close the menu.
121
140
  // There will be multiple document click listeners but we cant prevent propagation because it will interfere with
122
141
  // other instances on the same page
123
- if (!buttonRef.current.contains(target) && menu.current && !menu.current.contains(target)) {
142
+ const isInMenu = menu.current && menu.current.contains(target);
143
+ const isInButton = buttonRef.current && buttonRef.current.contains(target);
144
+
145
+ if (!isInMenu && !isInButton) {
124
146
  setOpen(false);
125
147
  }
126
148
  };
@@ -139,13 +161,13 @@ const ActionPopover = ({
139
161
  const menuButton = menuID => {
140
162
  if (renderButton) {
141
163
  return renderButton({
142
- tabIndex: isOpen ? "-1" : "0",
143
- "data-component": "action-popover-button",
164
+ tabIndex: isOpen ? -1 : 0,
165
+ "data-element": "action-popover-button",
144
166
  ariaAttributes: {
145
167
  "aria-haspopup": "true",
146
168
  "aria-label": l.actionPopover.ariaLabel(),
147
169
  "aria-controls": menuID,
148
- "aria-expanded": isOpen
170
+ "aria-expanded": `${isOpen}`
149
171
  }
150
172
  });
151
173
  }
@@ -156,8 +178,8 @@ const ActionPopover = ({
156
178
  "aria-label": l.actionPopover.ariaLabel(),
157
179
  "aria-controls": menuID,
158
180
  "aria-expanded": isOpen,
159
- tabIndex: isOpen ? "-1" : "0",
160
- "data-component": "action-popover-button"
181
+ tabIndex: isOpen ? -1 : 0,
182
+ "data-element": "action-popover-button"
161
183
  }, /*#__PURE__*/_react.default.createElement(_actionPopover.ButtonIcon, {
162
184
  type: "ellipsis_vertical"
163
185
  }));
@@ -200,57 +222,170 @@ const ActionPopover = ({
200
222
  }, menuProps), children))));
201
223
  };
202
224
 
203
- ActionPopover.propTypes = { ...marginPropTypes,
204
-
205
- /** Unique ID */
206
- id: _propTypes.default.string,
207
-
208
- /** Callback to be called on menu open */
209
- onOpen: _propTypes.default.func,
210
-
211
- /** Callback to be called on menu close */
212
- onClose: _propTypes.default.func,
213
-
214
- /** Boolean to control whether menu should align to right */
215
- rightAlignMenu: _propTypes.default.bool,
216
-
217
- /** Children for popover component */
218
- children(props, propName, componentName) {
219
- let error;
220
- const prop = props[propName];
221
-
222
- _react.default.Children.forEach(prop, child => {
223
- if (child === null) {
224
- return;
225
- }
226
-
227
- if (![_actionPopoverItem.default.displayName, _actionPopoverDivider.default.displayName].includes(child.type.displayName)) {
228
- error = new Error(`\`${componentName}\` only accepts children of type \`${_actionPopoverItem.default.displayName}\`` + ` and \`${_actionPopoverDivider.default.displayName}\`.`);
229
- }
230
- });
231
-
232
- return error;
233
- },
234
-
235
- /** Render a custom menu button to override default ellipsis icon */
236
- renderButton: _propTypes.default.func,
237
-
238
- /** Horizontal alignment of menu items content */
239
- horizontalAlignment: _propTypes.default.oneOf(["left", "right"]),
240
-
241
- /** Set whether the menu should open above or below the button */
242
- placement: _propTypes.default.oneOf(["top", "bottom"])
243
- };
244
-
245
- const onOpen = () => {};
246
-
247
- const onClose = () => {};
248
-
249
- ActionPopover.defaultProps = {
250
- id: null,
251
- onOpen,
252
- onClose,
253
- horizontalAlignment: "left"
225
+ exports.ActionPopover = ActionPopover;
226
+ ActionPopover.propTypes = {
227
+ "children": _propTypes.default.node,
228
+ "horizontalAlignment": _propTypes.default.oneOf(["left", "right"]),
229
+ "id": _propTypes.default.string,
230
+ "m": _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.oneOf([null]), _propTypes.default.number, _propTypes.default.shape({
231
+ "__@toStringTag": _propTypes.default.string.isRequired,
232
+ "description": _propTypes.default.string,
233
+ "toString": _propTypes.default.func.isRequired,
234
+ "valueOf": _propTypes.default.func.isRequired
235
+ }), _propTypes.default.string])), _propTypes.default.number, _propTypes.default.object, _propTypes.default.shape({
236
+ "__@toStringTag": _propTypes.default.string.isRequired,
237
+ "description": _propTypes.default.string,
238
+ "toString": _propTypes.default.func.isRequired,
239
+ "valueOf": _propTypes.default.func.isRequired
240
+ }), _propTypes.default.string]),
241
+ "margin": _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.oneOf([null]), _propTypes.default.number, _propTypes.default.shape({
242
+ "__@toStringTag": _propTypes.default.string.isRequired,
243
+ "description": _propTypes.default.string,
244
+ "toString": _propTypes.default.func.isRequired,
245
+ "valueOf": _propTypes.default.func.isRequired
246
+ }), _propTypes.default.string])), _propTypes.default.number, _propTypes.default.object, _propTypes.default.shape({
247
+ "__@toStringTag": _propTypes.default.string.isRequired,
248
+ "description": _propTypes.default.string,
249
+ "toString": _propTypes.default.func.isRequired,
250
+ "valueOf": _propTypes.default.func.isRequired
251
+ }), _propTypes.default.string]),
252
+ "marginBottom": _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.oneOf([null]), _propTypes.default.number, _propTypes.default.shape({
253
+ "__@toStringTag": _propTypes.default.string.isRequired,
254
+ "description": _propTypes.default.string,
255
+ "toString": _propTypes.default.func.isRequired,
256
+ "valueOf": _propTypes.default.func.isRequired
257
+ }), _propTypes.default.string])), _propTypes.default.number, _propTypes.default.object, _propTypes.default.shape({
258
+ "__@toStringTag": _propTypes.default.string.isRequired,
259
+ "description": _propTypes.default.string,
260
+ "toString": _propTypes.default.func.isRequired,
261
+ "valueOf": _propTypes.default.func.isRequired
262
+ }), _propTypes.default.string]),
263
+ "marginLeft": _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.oneOf([null]), _propTypes.default.number, _propTypes.default.shape({
264
+ "__@toStringTag": _propTypes.default.string.isRequired,
265
+ "description": _propTypes.default.string,
266
+ "toString": _propTypes.default.func.isRequired,
267
+ "valueOf": _propTypes.default.func.isRequired
268
+ }), _propTypes.default.string])), _propTypes.default.number, _propTypes.default.object, _propTypes.default.shape({
269
+ "__@toStringTag": _propTypes.default.string.isRequired,
270
+ "description": _propTypes.default.string,
271
+ "toString": _propTypes.default.func.isRequired,
272
+ "valueOf": _propTypes.default.func.isRequired
273
+ }), _propTypes.default.string]),
274
+ "marginRight": _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.oneOf([null]), _propTypes.default.number, _propTypes.default.shape({
275
+ "__@toStringTag": _propTypes.default.string.isRequired,
276
+ "description": _propTypes.default.string,
277
+ "toString": _propTypes.default.func.isRequired,
278
+ "valueOf": _propTypes.default.func.isRequired
279
+ }), _propTypes.default.string])), _propTypes.default.number, _propTypes.default.object, _propTypes.default.shape({
280
+ "__@toStringTag": _propTypes.default.string.isRequired,
281
+ "description": _propTypes.default.string,
282
+ "toString": _propTypes.default.func.isRequired,
283
+ "valueOf": _propTypes.default.func.isRequired
284
+ }), _propTypes.default.string]),
285
+ "marginTop": _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.oneOf([null]), _propTypes.default.number, _propTypes.default.shape({
286
+ "__@toStringTag": _propTypes.default.string.isRequired,
287
+ "description": _propTypes.default.string,
288
+ "toString": _propTypes.default.func.isRequired,
289
+ "valueOf": _propTypes.default.func.isRequired
290
+ }), _propTypes.default.string])), _propTypes.default.number, _propTypes.default.object, _propTypes.default.shape({
291
+ "__@toStringTag": _propTypes.default.string.isRequired,
292
+ "description": _propTypes.default.string,
293
+ "toString": _propTypes.default.func.isRequired,
294
+ "valueOf": _propTypes.default.func.isRequired
295
+ }), _propTypes.default.string]),
296
+ "marginX": _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.oneOf([null]), _propTypes.default.number, _propTypes.default.shape({
297
+ "__@toStringTag": _propTypes.default.string.isRequired,
298
+ "description": _propTypes.default.string,
299
+ "toString": _propTypes.default.func.isRequired,
300
+ "valueOf": _propTypes.default.func.isRequired
301
+ }), _propTypes.default.string])), _propTypes.default.number, _propTypes.default.object, _propTypes.default.shape({
302
+ "__@toStringTag": _propTypes.default.string.isRequired,
303
+ "description": _propTypes.default.string,
304
+ "toString": _propTypes.default.func.isRequired,
305
+ "valueOf": _propTypes.default.func.isRequired
306
+ }), _propTypes.default.string]),
307
+ "marginY": _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.oneOf([null]), _propTypes.default.number, _propTypes.default.shape({
308
+ "__@toStringTag": _propTypes.default.string.isRequired,
309
+ "description": _propTypes.default.string,
310
+ "toString": _propTypes.default.func.isRequired,
311
+ "valueOf": _propTypes.default.func.isRequired
312
+ }), _propTypes.default.string])), _propTypes.default.number, _propTypes.default.object, _propTypes.default.shape({
313
+ "__@toStringTag": _propTypes.default.string.isRequired,
314
+ "description": _propTypes.default.string,
315
+ "toString": _propTypes.default.func.isRequired,
316
+ "valueOf": _propTypes.default.func.isRequired
317
+ }), _propTypes.default.string]),
318
+ "mb": _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.oneOf([null]), _propTypes.default.number, _propTypes.default.shape({
319
+ "__@toStringTag": _propTypes.default.string.isRequired,
320
+ "description": _propTypes.default.string,
321
+ "toString": _propTypes.default.func.isRequired,
322
+ "valueOf": _propTypes.default.func.isRequired
323
+ }), _propTypes.default.string])), _propTypes.default.number, _propTypes.default.object, _propTypes.default.shape({
324
+ "__@toStringTag": _propTypes.default.string.isRequired,
325
+ "description": _propTypes.default.string,
326
+ "toString": _propTypes.default.func.isRequired,
327
+ "valueOf": _propTypes.default.func.isRequired
328
+ }), _propTypes.default.string]),
329
+ "ml": _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.oneOf([null]), _propTypes.default.number, _propTypes.default.shape({
330
+ "__@toStringTag": _propTypes.default.string.isRequired,
331
+ "description": _propTypes.default.string,
332
+ "toString": _propTypes.default.func.isRequired,
333
+ "valueOf": _propTypes.default.func.isRequired
334
+ }), _propTypes.default.string])), _propTypes.default.number, _propTypes.default.object, _propTypes.default.shape({
335
+ "__@toStringTag": _propTypes.default.string.isRequired,
336
+ "description": _propTypes.default.string,
337
+ "toString": _propTypes.default.func.isRequired,
338
+ "valueOf": _propTypes.default.func.isRequired
339
+ }), _propTypes.default.string]),
340
+ "mr": _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.oneOf([null]), _propTypes.default.number, _propTypes.default.shape({
341
+ "__@toStringTag": _propTypes.default.string.isRequired,
342
+ "description": _propTypes.default.string,
343
+ "toString": _propTypes.default.func.isRequired,
344
+ "valueOf": _propTypes.default.func.isRequired
345
+ }), _propTypes.default.string])), _propTypes.default.number, _propTypes.default.object, _propTypes.default.shape({
346
+ "__@toStringTag": _propTypes.default.string.isRequired,
347
+ "description": _propTypes.default.string,
348
+ "toString": _propTypes.default.func.isRequired,
349
+ "valueOf": _propTypes.default.func.isRequired
350
+ }), _propTypes.default.string]),
351
+ "mt": _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.oneOf([null]), _propTypes.default.number, _propTypes.default.shape({
352
+ "__@toStringTag": _propTypes.default.string.isRequired,
353
+ "description": _propTypes.default.string,
354
+ "toString": _propTypes.default.func.isRequired,
355
+ "valueOf": _propTypes.default.func.isRequired
356
+ }), _propTypes.default.string])), _propTypes.default.number, _propTypes.default.object, _propTypes.default.shape({
357
+ "__@toStringTag": _propTypes.default.string.isRequired,
358
+ "description": _propTypes.default.string,
359
+ "toString": _propTypes.default.func.isRequired,
360
+ "valueOf": _propTypes.default.func.isRequired
361
+ }), _propTypes.default.string]),
362
+ "mx": _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.oneOf([null]), _propTypes.default.number, _propTypes.default.shape({
363
+ "__@toStringTag": _propTypes.default.string.isRequired,
364
+ "description": _propTypes.default.string,
365
+ "toString": _propTypes.default.func.isRequired,
366
+ "valueOf": _propTypes.default.func.isRequired
367
+ }), _propTypes.default.string])), _propTypes.default.number, _propTypes.default.object, _propTypes.default.shape({
368
+ "__@toStringTag": _propTypes.default.string.isRequired,
369
+ "description": _propTypes.default.string,
370
+ "toString": _propTypes.default.func.isRequired,
371
+ "valueOf": _propTypes.default.func.isRequired
372
+ }), _propTypes.default.string]),
373
+ "my": _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.oneOf([null]), _propTypes.default.number, _propTypes.default.shape({
374
+ "__@toStringTag": _propTypes.default.string.isRequired,
375
+ "description": _propTypes.default.string,
376
+ "toString": _propTypes.default.func.isRequired,
377
+ "valueOf": _propTypes.default.func.isRequired
378
+ }), _propTypes.default.string])), _propTypes.default.number, _propTypes.default.object, _propTypes.default.shape({
379
+ "__@toStringTag": _propTypes.default.string.isRequired,
380
+ "description": _propTypes.default.string,
381
+ "toString": _propTypes.default.func.isRequired,
382
+ "valueOf": _propTypes.default.func.isRequired
383
+ }), _propTypes.default.string]),
384
+ "onClose": _propTypes.default.func,
385
+ "onOpen": _propTypes.default.func,
386
+ "placement": _propTypes.default.oneOf(["bottom", "top"]),
387
+ "renderButton": _propTypes.default.func,
388
+ "rightAlignMenu": _propTypes.default.bool
254
389
  };
255
390
  var _default = ActionPopover;
256
391
  exports.default = _default;
@@ -1,13 +1,19 @@
1
- export const Menu: import("styled-components").StyledComponent<"div", any, {}, never>;
2
- export function MenuItemFactory(button: any): import("styled-components").StyledComponent<any, any, object, string | number | symbol>;
3
- export const MenuButton: import("styled-components").StyledComponent<"div", any, {}, never>;
4
- export const ButtonIcon: import("styled-components").StyledComponent<typeof Icon, any, {}, never>;
5
- export const StyledButtonIcon: import("styled-components").StyledComponent<"div", any, {}, never>;
6
- export const MenuItemIcon: import("styled-components").StyledComponent<typeof Icon, any, {}, never>;
7
- export const MenuItemDivider: import("styled-components").StyledComponent<"div", any, {
1
+ import Icon from "../icon";
2
+ declare const Menu: import("styled-components").StyledComponent<"div", any, {
3
+ isOpen?: boolean | undefined;
4
+ }, never>;
5
+ declare type StyledMenuItemProps = {
6
+ isDisabled: boolean;
7
+ horizontalAlignment: "left" | "right";
8
+ };
9
+ declare const StyledMenuItem: import("styled-components").StyledComponent<"button", any, StyledMenuItemProps, never>;
10
+ declare const MenuItemDivider: import("styled-components").StyledComponent<"div", any, {
8
11
  "data-element": string;
9
12
  }, "data-element">;
10
- export const SubMenuItemIcon: import("styled-components").StyledComponent<typeof Icon, any, {}, never>;
11
- export const MenuButtonOverrideWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
12
- export const StyledMenuItem: import("styled-components").StyledComponent<"button", any, {}, never>;
13
- import Icon from "../icon";
13
+ declare const MenuButton: import("styled-components").StyledComponent<"div", any, {}, never>;
14
+ declare const ButtonIcon: import("styled-components").StyledComponent<typeof Icon, any, {}, never>;
15
+ declare const StyledButtonIcon: import("styled-components").StyledComponent<"div", any, {}, never>;
16
+ declare const MenuItemIcon: import("styled-components").StyledComponent<typeof Icon, any, {}, never>;
17
+ declare const SubMenuItemIcon: import("styled-components").StyledComponent<typeof Icon, any, {}, never>;
18
+ declare const MenuButtonOverrideWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
19
+ export { Menu, MenuButton, ButtonIcon, StyledButtonIcon, MenuItemIcon, MenuItemDivider, SubMenuItemIcon, MenuButtonOverrideWrapper, StyledMenuItem, };