@pingux/astro 2.49.0-alpha.1 → 2.49.0-alpha.2

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 (37) hide show
  1. package/lib/cjs/components/Menu/Menu.d.ts +4 -0
  2. package/lib/cjs/components/Menu/Menu.js +4 -8
  3. package/lib/cjs/components/Menu/Menu.stories.d.ts +5 -0
  4. package/lib/cjs/components/Menu/Menu.stories.js +2 -4
  5. package/lib/cjs/components/Menu/Menu.styles.d.ts +11 -0
  6. package/lib/cjs/components/Menu/Menu.test.d.ts +1 -0
  7. package/lib/cjs/components/Menu/Menu.test.js +7 -7
  8. package/lib/cjs/components/Menu/index.d.ts +1 -0
  9. package/lib/cjs/components/Menu/menuAttributes.d.ts +2 -0
  10. package/lib/cjs/components/MenuItem/MenuItem.d.ts +9 -0
  11. package/lib/cjs/components/MenuItem/MenuItem.js +10 -53
  12. package/lib/cjs/components/MenuItem/MenuItem.styles.d.ts +25 -0
  13. package/lib/cjs/components/MenuItem/MenuItem.test.d.ts +1 -0
  14. package/lib/cjs/components/MenuItem/MenuItem.test.js +24 -9
  15. package/lib/cjs/components/MenuItem/index.d.ts +1 -0
  16. package/lib/cjs/components/Tabs/Tabs.stories.js +2 -2
  17. package/lib/cjs/components/Tabs/Tabs.test.js +4 -4
  18. package/lib/cjs/context/MenuContext/index.d.ts +7 -5
  19. package/lib/cjs/context/MenuContext/index.js +4 -6
  20. package/lib/cjs/types/index.d.ts +2 -0
  21. package/lib/cjs/types/index.js +34 -12
  22. package/lib/cjs/types/menu.d.ts +14 -0
  23. package/lib/cjs/types/menu.js +6 -0
  24. package/lib/cjs/types/menuItem.d.ts +28 -0
  25. package/lib/cjs/types/menuItem.js +6 -0
  26. package/lib/components/Menu/Menu.js +6 -10
  27. package/lib/components/Menu/Menu.stories.js +2 -4
  28. package/lib/components/Menu/Menu.test.js +7 -7
  29. package/lib/components/MenuItem/MenuItem.js +12 -55
  30. package/lib/components/MenuItem/MenuItem.test.js +24 -9
  31. package/lib/components/Tabs/Tabs.stories.js +2 -2
  32. package/lib/components/Tabs/Tabs.test.js +4 -4
  33. package/lib/context/MenuContext/index.js +2 -5
  34. package/lib/types/index.js +2 -0
  35. package/lib/types/menu.js +1 -0
  36. package/lib/types/menuItem.js +1 -0
  37. package/package.json +1 -1
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { MenuProps } from '../../types';
3
+ declare const Menu: React.ForwardRefExoticComponent<MenuProps & React.RefAttributes<HTMLDivElement>>;
4
+ export default Menu;
@@ -30,7 +30,6 @@ var _hooks = require("../../hooks");
30
30
  var _orientation = _interopRequireDefault(require("../../utils/devUtils/constants/orientation"));
31
31
  var _Box = _interopRequireDefault(require("../Box"));
32
32
  var _MenuItem = _interopRequireDefault(require("../MenuItem"));
33
- var _menuAttributes = require("./menuAttributes");
34
33
  var _react2 = require("@emotion/react");
35
34
  var _excluded = ["isDisabled", "isNotFocusedOnHover", "onAction", "onHoverChange", "onHoverEnd", "onHoverStart", "onSelectionChange", "selectionMode"];
36
35
  function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
@@ -59,12 +58,8 @@ var Menu = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
59
58
  }),
60
59
  hoverProps = _useHover.hoverProps;
61
60
  var state = (0, _reactStately.useTreeState)(completeProps);
62
- var menuRef = (0, _react.useRef)();
61
+ var menuRef = (0, _hooks.useLocalOrForwardRef)(ref);
63
62
  (0, _hooks.usePropWarning)(props, 'disabled', 'isDisabled');
64
- /* istanbul ignore next */
65
- (0, _react.useImperativeHandle)(ref, function () {
66
- return menuRef.current;
67
- });
68
63
  var _useMenu = (0, _reactAria.useMenu)(completeProps, state, menuRef),
69
64
  menuProps = _useMenu.menuProps;
70
65
  var _useFocusRing = (0, _reactAria.useFocusRing)({
@@ -80,7 +75,9 @@ var Menu = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
80
75
  ref: menuRef,
81
76
  variant: "menu",
82
77
  "aria-orientation": _orientation["default"].VERTICAL
83
- }, others, (0, _reactAria.mergeProps)(focusProps, menuProps, hoverProps)), (0, _map["default"])(_context = (0, _from["default"])(state.collection)).call(_context, function (item) {
78
+ }, others, (0, _reactAria.mergeProps)(focusProps, menuProps, hoverProps), {
79
+ role: "menu"
80
+ }), (0, _map["default"])(_context = (0, _from["default"])(state.collection)).call(_context, function (item) {
84
81
  return (0, _react2.jsx)(_MenuItem["default"], {
85
82
  key: item.key,
86
83
  item: item,
@@ -92,7 +89,6 @@ var Menu = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
92
89
  });
93
90
  }));
94
91
  });
95
- Menu.propTypes = _menuAttributes.menuPropTypes;
96
92
  Menu.displayName = 'Menu';
97
93
  var _default = Menu;
98
94
  exports["default"] = _default;
@@ -0,0 +1,5 @@
1
+ import { StoryFn } from '@storybook/react';
2
+ import { MenuProps } from '../../types';
3
+ declare const _default: import("@storybook/types").ComponentAnnotations<import("@storybook/react/dist/types-0a347bb9").R, import("@storybook/types").Args>;
4
+ export default _default;
5
+ export declare const Default: StoryFn<MenuProps>;
@@ -6,14 +6,13 @@ _Object$defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports["default"] = exports.Default = void 0;
9
- var _objectDestructuringEmpty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectDestructuringEmpty"));
10
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
11
10
  var _react = _interopRequireDefault(require("react"));
12
11
  var _reactStately = require("react-stately");
13
12
  var _storybookAddonDesigns = require("storybook-addon-designs");
14
13
  var _storybookDocsLayout = _interopRequireDefault(require("../../../.storybook/storybookDocsLayout"));
15
14
  var _index = require("../../index");
16
- var _figmaLinks = require("../../utils/designUtils/figmaLinks.ts");
15
+ var _figmaLinks = require("../../utils/designUtils/figmaLinks");
17
16
  var _Menu = _interopRequireDefault(require("./Menu.mdx"));
18
17
  var _menuAttributes = require("./menuAttributes");
19
18
  var _react2 = require("@emotion/react");
@@ -40,8 +39,7 @@ var _default = {
40
39
  argTypes: _menuAttributes.menuArgTypes
41
40
  };
42
41
  exports["default"] = _default;
43
- var Default = function Default(_ref) {
44
- var args = (0, _extends2["default"])({}, ((0, _objectDestructuringEmpty2["default"])(_ref), _ref));
42
+ var Default = function Default(args) {
45
43
  return (0, _react2.jsx)(_index.Menu, (0, _extends2["default"])({
46
44
  "aria-label": "Example Menu"
47
45
  }, args), (0, _react2.jsx)(_reactStately.Item, {
@@ -0,0 +1,11 @@
1
+ declare const _default: {
2
+ padding: number;
3
+ margin: number;
4
+ listStyle: string;
5
+ maxWidth: number;
6
+ outline: string;
7
+ overflow: string;
8
+ minWidth: string;
9
+ borderRadius: number;
10
+ };
11
+ export default _default;
@@ -0,0 +1 @@
1
+ export {};
@@ -18,20 +18,20 @@ var defaultProps = {
18
18
  'aria-label': 'testLabel'
19
19
  };
20
20
  var defaultItems = [{
21
- key: 'a',
21
+ id: 'a',
22
22
  children: 'A'
23
23
  }, {
24
- key: 'b',
24
+ id: 'b',
25
25
  children: 'B'
26
26
  }, {
27
- key: 'c',
27
+ id: 'c',
28
28
  children: 'C'
29
29
  }];
30
30
  var getComponent = function getComponent() {
31
31
  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
32
32
  return (0, _testWrapper.render)((0, _react2.jsx)(_index.Menu, (0, _extends2["default"])({}, defaultProps, props), (0, _map["default"])(defaultItems).call(defaultItems, function (item) {
33
33
  return (0, _react2.jsx)(_index.Item, (0, _extends2["default"])({
34
- key: item.key
34
+ key: item.id
35
35
  }, item));
36
36
  })));
37
37
  };
@@ -41,7 +41,7 @@ var getComponent = function getComponent() {
41
41
  renderComponent: function renderComponent(props) {
42
42
  return (0, _react2.jsx)(_index.Menu, (0, _extends2["default"])({}, defaultProps, props), (0, _map["default"])(defaultItems).call(defaultItems, function (item) {
43
43
  return (0, _react2.jsx)(_index.Item, (0, _extends2["default"])({
44
- key: item.key
44
+ key: item.id
45
45
  }, item));
46
46
  }));
47
47
  }
@@ -124,11 +124,11 @@ test('should fire onAction', function () {
124
124
  _testWrapper.fireEvent.keyUp(menuItems[0], {
125
125
  key: 'Enter'
126
126
  });
127
- expect(onAction).toHaveBeenNthCalledWith(1, defaultItems[0].key);
127
+ expect(onAction).toHaveBeenNthCalledWith(1, defaultItems[0].id);
128
128
 
129
129
  // Click events
130
130
  _userEvent["default"].click(menuItems[1]);
131
- expect(onAction).toHaveBeenNthCalledWith(2, defaultItems[1].key);
131
+ expect(onAction).toHaveBeenNthCalledWith(2, defaultItems[1].id);
132
132
  });
133
133
  test('should not fire onSelectionChange when selectionMode is none', function () {
134
134
  var onSelectionChange = jest.fn();
@@ -0,0 +1 @@
1
+ export { default } from './Menu';
@@ -0,0 +1,2 @@
1
+ export declare const menuArgTypes: any;
2
+ export declare const menuPropTypes: any;
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import { MenuItemProps } from '../../types';
3
+ /**
4
+ * Menu Item component intended to be used within Menu or PopupMenu.
5
+ * This component is not intented to be used outside of Menu or independently.
6
+ * Utilizes [React Aria](https://react-spectrum.adobe.com/react-aria/useMenu.html)
7
+ */
8
+ declare const MenuItem: React.ForwardRefExoticComponent<MenuItemProps & React.RefAttributes<HTMLDivElement>>;
9
+ export default MenuItem;
@@ -15,10 +15,8 @@ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-c
15
15
  var _react = _interopRequireWildcard(require("react"));
16
16
  var _reactAria = require("react-aria");
17
17
  var _interactions = require("@react-aria/interactions");
18
- var _propTypes = _interopRequireDefault(require("prop-types"));
19
18
  var _MenuContext = require("../../context/MenuContext");
20
19
  var _hooks = require("../../hooks");
21
- var _isIterable = require("../../utils/devUtils/props/isIterable");
22
20
  var _Box = _interopRequireDefault(require("../Box"));
23
21
  var _react2 = require("@emotion/react");
24
22
  var _excluded = ["isSeparator", "isPressed", "data-id"];
@@ -40,24 +38,21 @@ var MenuItem = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
40
38
  var _useMenuContext = (0, _MenuContext.useMenuContext)(),
41
39
  onClose = _useMenuContext.onClose,
42
40
  closeOnSelect = _useMenuContext.closeOnSelect;
43
- var key = item.key,
44
- rendered = item.rendered,
45
- itemProps = item.props;
41
+ var _ref = item,
42
+ key = _ref.key,
43
+ rendered = _ref.rendered,
44
+ itemProps = _ref.props;
46
45
  var isSeparator = itemProps.isSeparator,
47
46
  propIsPressed = itemProps.isPressed,
48
47
  dataId = itemProps['data-id'],
49
48
  others = (0, _objectWithoutProperties2["default"])(itemProps, _excluded);
50
49
  var isDisabled = propIsDisabled || state.disabledKeys.has(key);
51
50
  var isSelected = state.selectionManager.isSelected(key);
52
- var menuItemRef = (0, _react.useRef)();
53
51
  (0, _hooks.usePropWarning)(props, 'disabled', 'isDisabled');
54
- /* istanbul ignore next */
55
- (0, _react.useImperativeHandle)(ref, function () {
56
- return menuItemRef.current;
57
- });
52
+ var menuItemRef = (0, _hooks.useLocalOrForwardRef)(ref);
58
53
  var _useMenuItem = (0, _reactAria.useMenuItem)({
59
- key: item.key,
60
- 'aria-label': item['aria-label'],
54
+ key: item === null || item === void 0 ? void 0 : item.key,
55
+ 'aria-label': item === null || item === void 0 ? void 0 : item['aria-label'],
61
56
  isDisabled: isDisabled,
62
57
  onAction: onAction,
63
58
  isSelected: isSelected,
@@ -103,49 +98,11 @@ var MenuItem = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
103
98
  variant: isSeparator ? 'menuItem.separator' : 'menuItem.item',
104
99
  "data-id": dataId,
105
100
  "aria-disabled": isDisabled
106
- }, (0, _reactAria.mergeProps)(pressProps, hoverProps, focusProps, menuItemProps, others)), rendered);
101
+ }, (0, _reactAria.mergeProps)(pressProps, hoverProps, focusProps, menuItemProps, others), {
102
+ role: menuItemProps.role
103
+ }), rendered);
107
104
  });
108
105
  MenuItem.displayName = 'MenuItem';
109
- MenuItem.propTypes = {
110
- /** Whether the item is disabled. */
111
- isDisabled: _propTypes["default"].bool,
112
- /** Whether the menu item is selected. */
113
- isSelected: _propTypes["default"].bool,
114
- /** Whether the menu item is currently pressed. */
115
- isPressed: _propTypes["default"].bool,
116
- /**
117
- * Whether the containing menu has keyboard focus.
118
- * Used to determine when to present hover vs focus styling.
119
- */
120
- isFocusVisible: _propTypes["default"].bool,
121
- /**
122
- * Whether menu item should receive focus state on hover.
123
- */
124
- isNotFocusedOnHover: _propTypes["default"].bool,
125
- /** A screen reader only label for the menu item. */
126
- 'aria-label': _propTypes["default"].string,
127
- /** Handler that is called when the menu should close after selecting an item. */
128
- onClose: _propTypes["default"].func,
129
- /** Handler that is called when the user activates the item. */
130
- onAction: _propTypes["default"].func,
131
- item: _propTypes["default"].shape({
132
- 'aria-label': _propTypes["default"].string,
133
- key: _propTypes["default"].string,
134
- props: _propTypes["default"].shape({
135
- 'data-id': _propTypes["default"].string,
136
- isSeparator: _propTypes["default"].bool,
137
- isPressed: _propTypes["default"].bool
138
- }),
139
- rendered: _propTypes["default"].node,
140
- isDisabled: _propTypes["default"].bool
141
- }),
142
- state: _propTypes["default"].shape({
143
- disabledKeys: _isIterable.isIterableProp,
144
- selectionManager: _propTypes["default"].shape({
145
- isSelected: _propTypes["default"].func
146
- })
147
- })
148
- };
149
106
  MenuItem.defaultProps = {
150
107
  isDisabled: false,
151
108
  isPressed: false
@@ -0,0 +1,25 @@
1
+ declare const _default: {
2
+ item: {
3
+ bg: string;
4
+ padding: string;
5
+ outline: string;
6
+ cursor: string;
7
+ '&.is-focused, &.is-selected, &.is-pressed': {
8
+ color: string;
9
+ bg: string;
10
+ '> *': {
11
+ color: string;
12
+ };
13
+ };
14
+ '&.is-pressed': {
15
+ bg: string;
16
+ };
17
+ };
18
+ separator: {
19
+ padding: string;
20
+ '& > [role="separator"]': {
21
+ margin: string;
22
+ };
23
+ };
24
+ };
25
+ export default _default;
@@ -0,0 +1 @@
1
+ export {};
@@ -15,15 +15,18 @@ var testId = 'testId';
15
15
  var defaultMenuItems = [{
16
16
  key: 'MenuItem 1',
17
17
  children: 'MenuItem 1',
18
- 'data-id': 'menuItem1'
18
+ 'data-id': 'menuItem1',
19
+ isPressed: false
19
20
  }, {
20
21
  key: 'MenuItem 2',
21
22
  children: 'MenuItem 2',
22
- 'data-id': 'menuItem2'
23
+ 'data-id': 'menuItem2',
24
+ isPressed: false
23
25
  }, {
24
26
  key: 'MenuItem 3',
25
27
  children: 'MenuItem 3',
26
- 'data-id': 'menuItem3'
28
+ 'data-id': 'menuItem3',
29
+ isPressed: false
27
30
  }];
28
31
  var defaultProps = {
29
32
  'data-testid': testId,
@@ -38,9 +41,7 @@ var getComponent = function getComponent() {
38
41
  _ref$renderFn = _ref.renderFn,
39
42
  renderFn = _ref$renderFn === void 0 ? _testWrapper.render : _ref$renderFn;
40
43
  return renderFn((0, _react2.jsx)(_index.Menu, (0, _extends2["default"])({}, defaultProps, props), (0, _map["default"])(items).call(items, function (li) {
41
- return (0, _react2.jsx)(_index.Item, (0, _extends2["default"])({
42
- key: li.key
43
- }, li, {
44
+ return (0, _react2.jsx)(_index.Item, (0, _extends2["default"])({}, li, {
44
45
  sx: {
45
46
  backgroundColor: 'orange'
46
47
  }
@@ -52,9 +53,7 @@ var getComponent = function getComponent() {
52
53
  (0, _universalComponentTest.universalComponentTests)({
53
54
  renderComponent: function renderComponent(props) {
54
55
  return (0, _react2.jsx)(_index.Menu, (0, _extends2["default"])({}, defaultProps, props), (0, _map["default"])(defaultMenuItems).call(defaultMenuItems, function (li) {
55
- return (0, _react2.jsx)(_index.Item, (0, _extends2["default"])({
56
- key: li.key
57
- }, li, {
56
+ return (0, _react2.jsx)(_index.Item, (0, _extends2["default"])({}, li, {
58
57
  sx: {
59
58
  backgroundColor: 'orange'
60
59
  }
@@ -172,4 +171,20 @@ test('custom props are passed into menuItem', function () {
172
171
  var itemText1 = defaultMenuItems[0].children;
173
172
  var menuItem1 = _testWrapper.screen.getByText(itemText1);
174
173
  expect(menuItem1).toHaveStyleRule('background-color', 'orange');
174
+ });
175
+ test('Selection mode given as single', function () {
176
+ getComponent({
177
+ selectionMode: 'single',
178
+ defaultSelectedKeys: [defaultMenuItems[0].key]
179
+ });
180
+ var menuItems = _testWrapper.screen.queryAllByRole('menuitemradio');
181
+ expect(menuItems).toHaveLength(defaultMenuItems.length);
182
+ });
183
+ test('Selection mode given as multiple', function () {
184
+ getComponent({
185
+ selectionMode: 'multiple',
186
+ defaultSelectedKeys: [defaultMenuItems[0].key]
187
+ });
188
+ var menuItems = _testWrapper.screen.queryAllByRole('menuitemcheckbox');
189
+ expect(menuItems).toHaveLength(defaultMenuItems.length);
175
190
  });
@@ -0,0 +1 @@
1
+ export { default } from './MenuItem';
@@ -235,12 +235,12 @@ var WithList = function WithList() {
235
235
  key: 'tab1list',
236
236
  name: 'Tab 1 list',
237
237
  children: 'Tab 1 from list',
238
- role: 'listitem'
238
+ role: 'menuitemradio'
239
239
  }, {
240
240
  key: 'tab2list',
241
241
  name: 'Tab 2 list',
242
242
  children: 'Tab 2 from list',
243
- role: 'listitem'
243
+ role: 'menuitemradio'
244
244
  }]
245
245
  }]);
246
246
  return (0, _react2.jsx)(_index.Tabs, {
@@ -55,12 +55,12 @@ var tabsWithList = [{
55
55
  key: 'tab1list',
56
56
  name: 'Tab 1 list',
57
57
  children: 'Tab 1 from list',
58
- role: 'listitem'
58
+ role: 'menuitemradio'
59
59
  }, {
60
60
  key: 'tab2list',
61
61
  name: 'Tab 2 list',
62
62
  children: 'Tab 2 from list',
63
- role: 'listitem'
63
+ role: 'menuitemradio'
64
64
  }]
65
65
  }];
66
66
  var defaultProps = {
@@ -472,7 +472,7 @@ test('will render tab with list if provided', /*#__PURE__*/(0, _asyncToGenerator
472
472
  _userEvent["default"].click(menuBtn);
473
473
  expect(_testWrapper.screen.queryByRole('menu')).toBeInTheDocument();
474
474
  testTabPanel(0);
475
- menuItems = _testWrapper.screen.queryAllByRole('listitem');
475
+ menuItems = _testWrapper.screen.queryAllByRole('menuitemradio');
476
476
  expect(menuItems).toHaveLength(tabsWithList[1].list.length);
477
477
  expect(menuItems[0]).not.toHaveFocus();
478
478
  _userEvent["default"].click(menuItems[0]);
@@ -510,7 +510,7 @@ test('tab list is accessible via keyboard', function () {
510
510
  });
511
511
  expect(_testWrapper.screen.queryByRole('menu')).toBeInTheDocument();
512
512
  testTabPanel(0);
513
- var menuItems = _testWrapper.screen.queryAllByRole('listitem');
513
+ var menuItems = _testWrapper.screen.queryAllByRole('menuitemradio');
514
514
  expect(menuItems).toHaveLength(tabsWithList[1].list.length);
515
515
  expect(menuItems[0]).toHaveFocus();
516
516
  _testWrapper.fireEvent.keyDown(menuItems[0], {
@@ -1,6 +1,8 @@
1
- /// <reference types="react" />
2
- interface MenuContent {
1
+ import { MutableRefObject } from 'react';
2
+ export interface MenuContextValue {
3
+ onClose?: () => void;
4
+ closeOnSelect?: boolean;
5
+ ref?: MutableRefObject<HTMLDivElement | HTMLElement | null>;
3
6
  }
4
- export declare const MenuContext: import("react").Context<MenuContent | undefined>;
5
- export declare const useMenuContext: () => MenuContent | undefined;
6
- export {};
7
+ export declare const MenuContext: import("react").Context<MenuContextValue>;
8
+ export declare function useMenuContext(): MenuContextValue;
@@ -4,13 +4,11 @@ var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/obje
4
4
  _Object$defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.useMenuContext = exports.MenuContext = void 0;
7
+ exports.MenuContext = void 0;
8
+ exports.useMenuContext = useMenuContext;
8
9
  var _react = require("react");
9
- // eslint-disable-next-line @typescript-eslint/no-empty-interface
10
-
11
10
  var MenuContext = /*#__PURE__*/(0, _react.createContext)({});
12
11
  exports.MenuContext = MenuContext;
13
- var useMenuContext = function useMenuContext() {
12
+ function useMenuContext() {
14
13
  return (0, _react.useContext)(MenuContext);
15
- };
16
- exports.useMenuContext = useMenuContext;
14
+ }
@@ -14,6 +14,8 @@ export * from './item';
14
14
  export * from './link';
15
15
  export * from './listItem';
16
16
  export * from './loader';
17
+ export * from './menu';
18
+ export * from './menuItem';
17
19
  export * from './overlayPanel';
18
20
  export * from './popoverContainer';
19
21
  export * from './popoverMenu';
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- var _context, _context2, _context3, _context4, _context5, _context6, _context7, _context8, _context9, _context10, _context11, _context12, _context13, _context14, _context15, _context16, _context17, _context18, _context19, _context20, _context21, _context22, _context23, _context24, _context25, _context26, _context27;
3
+ var _context, _context2, _context3, _context4, _context5, _context6, _context7, _context8, _context9, _context10, _context11, _context12, _context13, _context14, _context15, _context16, _context17, _context18, _context19, _context20, _context21, _context22, _context23, _context24, _context25, _context26, _context27, _context28, _context29;
4
4
  var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
5
5
  var _forEachInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/for-each");
6
6
  var _Object$keys = require("@babel/runtime-corejs3/core-js-stable/object/keys");
@@ -183,8 +183,30 @@ _forEachInstanceProperty(_context16 = _Object$keys(_loader)).call(_context16, fu
183
183
  }
184
184
  });
185
185
  });
186
+ var _menu = require("./menu");
187
+ _forEachInstanceProperty(_context17 = _Object$keys(_menu)).call(_context17, function (key) {
188
+ if (key === "default" || key === "__esModule") return;
189
+ if (key in exports && exports[key] === _menu[key]) return;
190
+ _Object$defineProperty(exports, key, {
191
+ enumerable: true,
192
+ get: function get() {
193
+ return _menu[key];
194
+ }
195
+ });
196
+ });
197
+ var _menuItem = require("./menuItem");
198
+ _forEachInstanceProperty(_context18 = _Object$keys(_menuItem)).call(_context18, function (key) {
199
+ if (key === "default" || key === "__esModule") return;
200
+ if (key in exports && exports[key] === _menuItem[key]) return;
201
+ _Object$defineProperty(exports, key, {
202
+ enumerable: true,
203
+ get: function get() {
204
+ return _menuItem[key];
205
+ }
206
+ });
207
+ });
186
208
  var _overlayPanel = require("./overlayPanel");
187
- _forEachInstanceProperty(_context17 = _Object$keys(_overlayPanel)).call(_context17, function (key) {
209
+ _forEachInstanceProperty(_context19 = _Object$keys(_overlayPanel)).call(_context19, function (key) {
188
210
  if (key === "default" || key === "__esModule") return;
189
211
  if (key in exports && exports[key] === _overlayPanel[key]) return;
190
212
  _Object$defineProperty(exports, key, {
@@ -195,7 +217,7 @@ _forEachInstanceProperty(_context17 = _Object$keys(_overlayPanel)).call(_context
195
217
  });
196
218
  });
197
219
  var _popoverContainer = require("./popoverContainer");
198
- _forEachInstanceProperty(_context18 = _Object$keys(_popoverContainer)).call(_context18, function (key) {
220
+ _forEachInstanceProperty(_context20 = _Object$keys(_popoverContainer)).call(_context20, function (key) {
199
221
  if (key === "default" || key === "__esModule") return;
200
222
  if (key in exports && exports[key] === _popoverContainer[key]) return;
201
223
  _Object$defineProperty(exports, key, {
@@ -206,7 +228,7 @@ _forEachInstanceProperty(_context18 = _Object$keys(_popoverContainer)).call(_con
206
228
  });
207
229
  });
208
230
  var _popoverMenu = require("./popoverMenu");
209
- _forEachInstanceProperty(_context19 = _Object$keys(_popoverMenu)).call(_context19, function (key) {
231
+ _forEachInstanceProperty(_context21 = _Object$keys(_popoverMenu)).call(_context21, function (key) {
210
232
  if (key === "default" || key === "__esModule") return;
211
233
  if (key in exports && exports[key] === _popoverMenu[key]) return;
212
234
  _Object$defineProperty(exports, key, {
@@ -217,7 +239,7 @@ _forEachInstanceProperty(_context19 = _Object$keys(_popoverMenu)).call(_context1
217
239
  });
218
240
  });
219
241
  var _requirementsList = require("./requirementsList");
220
- _forEachInstanceProperty(_context20 = _Object$keys(_requirementsList)).call(_context20, function (key) {
242
+ _forEachInstanceProperty(_context22 = _Object$keys(_requirementsList)).call(_context22, function (key) {
221
243
  if (key === "default" || key === "__esModule") return;
222
244
  if (key in exports && exports[key] === _requirementsList[key]) return;
223
245
  _Object$defineProperty(exports, key, {
@@ -228,7 +250,7 @@ _forEachInstanceProperty(_context20 = _Object$keys(_requirementsList)).call(_con
228
250
  });
229
251
  });
230
252
  var _rockerButtonGroup = require("./rockerButtonGroup");
231
- _forEachInstanceProperty(_context21 = _Object$keys(_rockerButtonGroup)).call(_context21, function (key) {
253
+ _forEachInstanceProperty(_context23 = _Object$keys(_rockerButtonGroup)).call(_context23, function (key) {
232
254
  if (key === "default" || key === "__esModule") return;
233
255
  if (key in exports && exports[key] === _rockerButtonGroup[key]) return;
234
256
  _Object$defineProperty(exports, key, {
@@ -239,7 +261,7 @@ _forEachInstanceProperty(_context21 = _Object$keys(_rockerButtonGroup)).call(_co
239
261
  });
240
262
  });
241
263
  var _scrollBox = require("./scrollBox");
242
- _forEachInstanceProperty(_context22 = _Object$keys(_scrollBox)).call(_context22, function (key) {
264
+ _forEachInstanceProperty(_context24 = _Object$keys(_scrollBox)).call(_context24, function (key) {
243
265
  if (key === "default" || key === "__esModule") return;
244
266
  if (key in exports && exports[key] === _scrollBox[key]) return;
245
267
  _Object$defineProperty(exports, key, {
@@ -250,7 +272,7 @@ _forEachInstanceProperty(_context22 = _Object$keys(_scrollBox)).call(_context22,
250
272
  });
251
273
  });
252
274
  var _separator = require("./separator");
253
- _forEachInstanceProperty(_context23 = _Object$keys(_separator)).call(_context23, function (key) {
275
+ _forEachInstanceProperty(_context25 = _Object$keys(_separator)).call(_context25, function (key) {
254
276
  if (key === "default" || key === "__esModule") return;
255
277
  if (key in exports && exports[key] === _separator[key]) return;
256
278
  _Object$defineProperty(exports, key, {
@@ -261,7 +283,7 @@ _forEachInstanceProperty(_context23 = _Object$keys(_separator)).call(_context23,
261
283
  });
262
284
  });
263
285
  var _shared = require("./shared");
264
- _forEachInstanceProperty(_context24 = _Object$keys(_shared)).call(_context24, function (key) {
286
+ _forEachInstanceProperty(_context26 = _Object$keys(_shared)).call(_context26, function (key) {
265
287
  if (key === "default" || key === "__esModule") return;
266
288
  if (key in exports && exports[key] === _shared[key]) return;
267
289
  _Object$defineProperty(exports, key, {
@@ -272,7 +294,7 @@ _forEachInstanceProperty(_context24 = _Object$keys(_shared)).call(_context24, fu
272
294
  });
273
295
  });
274
296
  var _table = require("./table");
275
- _forEachInstanceProperty(_context25 = _Object$keys(_table)).call(_context25, function (key) {
297
+ _forEachInstanceProperty(_context27 = _Object$keys(_table)).call(_context27, function (key) {
276
298
  if (key === "default" || key === "__esModule") return;
277
299
  if (key in exports && exports[key] === _table[key]) return;
278
300
  _Object$defineProperty(exports, key, {
@@ -283,7 +305,7 @@ _forEachInstanceProperty(_context25 = _Object$keys(_table)).call(_context25, fun
283
305
  });
284
306
  });
285
307
  var _text = require("./text");
286
- _forEachInstanceProperty(_context26 = _Object$keys(_text)).call(_context26, function (key) {
308
+ _forEachInstanceProperty(_context28 = _Object$keys(_text)).call(_context28, function (key) {
287
309
  if (key === "default" || key === "__esModule") return;
288
310
  if (key in exports && exports[key] === _text[key]) return;
289
311
  _Object$defineProperty(exports, key, {
@@ -294,7 +316,7 @@ _forEachInstanceProperty(_context26 = _Object$keys(_text)).call(_context26, func
294
316
  });
295
317
  });
296
318
  var _tooltipTrigger = require("./tooltipTrigger");
297
- _forEachInstanceProperty(_context27 = _Object$keys(_tooltipTrigger)).call(_context27, function (key) {
319
+ _forEachInstanceProperty(_context29 = _Object$keys(_tooltipTrigger)).call(_context29, function (key) {
298
320
  if (key === "default" || key === "__esModule") return;
299
321
  if (key in exports && exports[key] === _tooltipTrigger[key]) return;
300
322
  _Object$defineProperty(exports, key, {
@@ -0,0 +1,14 @@
1
+ /// <reference types="react" />
2
+ import { BoxProps } from './box';
3
+ import { HoverProps } from './shared';
4
+ export interface MenuProps extends BoxProps, HoverProps {
5
+ children?: React.ReactNode;
6
+ title?: string | undefined;
7
+ 'aria-label'?: string | undefined;
8
+ isNotFocusedOnHover?: boolean;
9
+ onAction?: () => void;
10
+ onSelectionChange?: () => void;
11
+ isSelected?: boolean;
12
+ selectionMode?: 'none' | 'single' | 'multiple';
13
+ disabledKeys?: string[];
14
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
4
+ _Object$defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
@@ -0,0 +1,28 @@
1
+ import { Node, TreeState } from 'react-stately';
2
+ import { TestingAttributes } from './shared/test';
3
+ import { BoxProps } from './box';
4
+ export interface MenuItemProps extends BoxProps, TestingAttributes {
5
+ /** Whether the item is disabled. */
6
+ isDisabled?: boolean;
7
+ /** Whether the menu item is selected. */
8
+ isSelected?: boolean;
9
+ /** Whether the menu item is currently pressed. */
10
+ isPressed?: boolean;
11
+ /**
12
+ * Whether the containing menu has keyboard focus.
13
+ * Used to determine when to present hover vs focus styling.
14
+ */
15
+ isFocusVisible?: boolean;
16
+ /**
17
+ * Whether menu item should receive focus state on hover.
18
+ */
19
+ isNotFocusedOnHover?: boolean;
20
+ /** A screen reader only label for the menu item. */
21
+ /** Handler that is called when the menu should close after selecting an item. */
22
+ onClose?: () => void;
23
+ /** Handler that is called when the user activates the item. */
24
+ onAction?: () => void;
25
+ item?: Node<object>;
26
+ state: TreeState<object>;
27
+ defaultSelectedKey?: string | number;
28
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
4
+ _Object$defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
@@ -14,17 +14,16 @@ import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance
14
14
  import _Array$from from "@babel/runtime-corejs3/core-js-stable/array/from";
15
15
  function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
16
16
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context2, _context3; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context2 = ownKeys(Object(source), !0)).call(_context2, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context3 = ownKeys(Object(source))).call(_context3, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
17
- import React, { forwardRef, useContext, useImperativeHandle, useRef } from 'react';
17
+ import React, { forwardRef, useContext } from 'react';
18
18
  import { mergeProps, useFocusRing, useMenu } from 'react-aria';
19
19
  import { useTreeState } from 'react-stately';
20
20
  import { useHover } from '@react-aria/interactions';
21
21
  import { useSyncRef } from '@react-aria/utils';
22
22
  import { MenuContext } from '../../context/MenuContext';
23
- import { usePropWarning } from '../../hooks';
23
+ import { useLocalOrForwardRef, usePropWarning } from '../../hooks';
24
24
  import ORIENTATION from '../../utils/devUtils/constants/orientation';
25
25
  import Box from '../Box';
26
26
  import MenuItem from '../MenuItem';
27
- import { menuPropTypes } from './menuAttributes';
28
27
  import { jsx as ___EmotionJSX } from "@emotion/react";
29
28
  var Menu = /*#__PURE__*/forwardRef(function (props, ref) {
30
29
  var _context;
@@ -48,12 +47,8 @@ var Menu = /*#__PURE__*/forwardRef(function (props, ref) {
48
47
  }),
49
48
  hoverProps = _useHover.hoverProps;
50
49
  var state = useTreeState(completeProps);
51
- var menuRef = useRef();
50
+ var menuRef = useLocalOrForwardRef(ref);
52
51
  usePropWarning(props, 'disabled', 'isDisabled');
53
- /* istanbul ignore next */
54
- useImperativeHandle(ref, function () {
55
- return menuRef.current;
56
- });
57
52
  var _useMenu = useMenu(completeProps, state, menuRef),
58
53
  menuProps = _useMenu.menuProps;
59
54
  var _useFocusRing = useFocusRing({
@@ -69,7 +64,9 @@ var Menu = /*#__PURE__*/forwardRef(function (props, ref) {
69
64
  ref: menuRef,
70
65
  variant: "menu",
71
66
  "aria-orientation": ORIENTATION.VERTICAL
72
- }, others, mergeProps(focusProps, menuProps, hoverProps)), _mapInstanceProperty(_context = _Array$from(state.collection)).call(_context, function (item) {
67
+ }, others, mergeProps(focusProps, menuProps, hoverProps), {
68
+ role: "menu"
69
+ }), _mapInstanceProperty(_context = _Array$from(state.collection)).call(_context, function (item) {
73
70
  return ___EmotionJSX(MenuItem, {
74
71
  key: item.key,
75
72
  item: item,
@@ -81,6 +78,5 @@ var Menu = /*#__PURE__*/forwardRef(function (props, ref) {
81
78
  });
82
79
  }));
83
80
  });
84
- Menu.propTypes = menuPropTypes;
85
81
  Menu.displayName = 'Menu';
86
82
  export default Menu;
@@ -1,11 +1,10 @@
1
- import _objectDestructuringEmpty from "@babel/runtime-corejs3/helpers/esm/objectDestructuringEmpty";
2
1
  import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
3
2
  import React from 'react';
4
3
  import { Item } from 'react-stately';
5
4
  import { withDesign } from 'storybook-addon-designs';
6
5
  import DocsLayout from '../../../.storybook/storybookDocsLayout';
7
6
  import { Menu, Text } from '../../index';
8
- import { FIGMA_LINKS } from '../../utils/designUtils/figmaLinks.ts';
7
+ import { FIGMA_LINKS } from '../../utils/designUtils/figmaLinks';
9
8
  import MenuReadme from './Menu.mdx';
10
9
  import { menuArgTypes } from './menuAttributes';
11
10
  import { jsx as ___EmotionJSX } from "@emotion/react";
@@ -31,8 +30,7 @@ export default {
31
30
  },
32
31
  argTypes: menuArgTypes
33
32
  };
34
- export var Default = function Default(_ref) {
35
- var args = _extends({}, (_objectDestructuringEmpty(_ref), _ref));
33
+ export var Default = function Default(args) {
36
34
  return ___EmotionJSX(Menu, _extends({
37
35
  "aria-label": "Example Menu"
38
36
  }, args), ___EmotionJSX(Item, {
@@ -15,20 +15,20 @@ var defaultProps = {
15
15
  'aria-label': 'testLabel'
16
16
  };
17
17
  var defaultItems = [{
18
- key: 'a',
18
+ id: 'a',
19
19
  children: 'A'
20
20
  }, {
21
- key: 'b',
21
+ id: 'b',
22
22
  children: 'B'
23
23
  }, {
24
- key: 'c',
24
+ id: 'c',
25
25
  children: 'C'
26
26
  }];
27
27
  var getComponent = function getComponent() {
28
28
  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
29
29
  return render(___EmotionJSX(Menu, _extends({}, defaultProps, props), _mapInstanceProperty(defaultItems).call(defaultItems, function (item) {
30
30
  return ___EmotionJSX(Item, _extends({
31
- key: item.key
31
+ key: item.id
32
32
  }, item));
33
33
  })));
34
34
  };
@@ -38,7 +38,7 @@ universalComponentTests({
38
38
  renderComponent: function renderComponent(props) {
39
39
  return ___EmotionJSX(Menu, _extends({}, defaultProps, props), _mapInstanceProperty(defaultItems).call(defaultItems, function (item) {
40
40
  return ___EmotionJSX(Item, _extends({
41
- key: item.key
41
+ key: item.id
42
42
  }, item));
43
43
  }));
44
44
  }
@@ -121,11 +121,11 @@ test('should fire onAction', function () {
121
121
  fireEvent.keyUp(menuItems[0], {
122
122
  key: 'Enter'
123
123
  });
124
- expect(onAction).toHaveBeenNthCalledWith(1, defaultItems[0].key);
124
+ expect(onAction).toHaveBeenNthCalledWith(1, defaultItems[0].id);
125
125
 
126
126
  // Click events
127
127
  userEvent.click(menuItems[1]);
128
- expect(onAction).toHaveBeenNthCalledWith(2, defaultItems[1].key);
128
+ expect(onAction).toHaveBeenNthCalledWith(2, defaultItems[1].id);
129
129
  });
130
130
  test('should not fire onSelectionChange when selectionMode is none', function () {
131
131
  var onSelectionChange = jest.fn();
@@ -2,13 +2,11 @@ import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
2
2
  import _slicedToArray from "@babel/runtime-corejs3/helpers/esm/slicedToArray";
3
3
  import _objectWithoutProperties from "@babel/runtime-corejs3/helpers/esm/objectWithoutProperties";
4
4
  var _excluded = ["isSeparator", "isPressed", "data-id"];
5
- import React, { forwardRef, useImperativeHandle, useRef, useState } from 'react';
5
+ import React, { forwardRef, useState } from 'react';
6
6
  import { mergeProps, useMenuItem } from 'react-aria';
7
7
  import { useFocus, useHover, usePress } from '@react-aria/interactions';
8
- import PropTypes from 'prop-types';
9
8
  import { useMenuContext } from '../../context/MenuContext';
10
- import { usePropWarning, useStatusClasses } from '../../hooks';
11
- import { isIterableProp } from '../../utils/devUtils/props/isIterable';
9
+ import { useLocalOrForwardRef, usePropWarning, useStatusClasses } from '../../hooks';
12
10
  import Box from '../Box';
13
11
 
14
12
  /**
@@ -28,24 +26,21 @@ var MenuItem = /*#__PURE__*/forwardRef(function (props, ref) {
28
26
  var _useMenuContext = useMenuContext(),
29
27
  onClose = _useMenuContext.onClose,
30
28
  closeOnSelect = _useMenuContext.closeOnSelect;
31
- var key = item.key,
32
- rendered = item.rendered,
33
- itemProps = item.props;
29
+ var _ref = item,
30
+ key = _ref.key,
31
+ rendered = _ref.rendered,
32
+ itemProps = _ref.props;
34
33
  var isSeparator = itemProps.isSeparator,
35
34
  propIsPressed = itemProps.isPressed,
36
35
  dataId = itemProps['data-id'],
37
36
  others = _objectWithoutProperties(itemProps, _excluded);
38
37
  var isDisabled = propIsDisabled || state.disabledKeys.has(key);
39
38
  var isSelected = state.selectionManager.isSelected(key);
40
- var menuItemRef = useRef();
41
39
  usePropWarning(props, 'disabled', 'isDisabled');
42
- /* istanbul ignore next */
43
- useImperativeHandle(ref, function () {
44
- return menuItemRef.current;
45
- });
40
+ var menuItemRef = useLocalOrForwardRef(ref);
46
41
  var _useMenuItem = useMenuItem({
47
- key: item.key,
48
- 'aria-label': item['aria-label'],
42
+ key: item === null || item === void 0 ? void 0 : item.key,
43
+ 'aria-label': item === null || item === void 0 ? void 0 : item['aria-label'],
49
44
  isDisabled: isDisabled,
50
45
  onAction: onAction,
51
46
  isSelected: isSelected,
@@ -91,49 +86,11 @@ var MenuItem = /*#__PURE__*/forwardRef(function (props, ref) {
91
86
  variant: isSeparator ? 'menuItem.separator' : 'menuItem.item',
92
87
  "data-id": dataId,
93
88
  "aria-disabled": isDisabled
94
- }, mergeProps(pressProps, hoverProps, focusProps, menuItemProps, others)), rendered);
89
+ }, mergeProps(pressProps, hoverProps, focusProps, menuItemProps, others), {
90
+ role: menuItemProps.role
91
+ }), rendered);
95
92
  });
96
93
  MenuItem.displayName = 'MenuItem';
97
- MenuItem.propTypes = {
98
- /** Whether the item is disabled. */
99
- isDisabled: PropTypes.bool,
100
- /** Whether the menu item is selected. */
101
- isSelected: PropTypes.bool,
102
- /** Whether the menu item is currently pressed. */
103
- isPressed: PropTypes.bool,
104
- /**
105
- * Whether the containing menu has keyboard focus.
106
- * Used to determine when to present hover vs focus styling.
107
- */
108
- isFocusVisible: PropTypes.bool,
109
- /**
110
- * Whether menu item should receive focus state on hover.
111
- */
112
- isNotFocusedOnHover: PropTypes.bool,
113
- /** A screen reader only label for the menu item. */
114
- 'aria-label': PropTypes.string,
115
- /** Handler that is called when the menu should close after selecting an item. */
116
- onClose: PropTypes.func,
117
- /** Handler that is called when the user activates the item. */
118
- onAction: PropTypes.func,
119
- item: PropTypes.shape({
120
- 'aria-label': PropTypes.string,
121
- key: PropTypes.string,
122
- props: PropTypes.shape({
123
- 'data-id': PropTypes.string,
124
- isSeparator: PropTypes.bool,
125
- isPressed: PropTypes.bool
126
- }),
127
- rendered: PropTypes.node,
128
- isDisabled: PropTypes.bool
129
- }),
130
- state: PropTypes.shape({
131
- disabledKeys: isIterableProp,
132
- selectionManager: PropTypes.shape({
133
- isSelected: PropTypes.func
134
- })
135
- })
136
- };
137
94
  MenuItem.defaultProps = {
138
95
  isDisabled: false,
139
96
  isPressed: false
@@ -12,15 +12,18 @@ var testId = 'testId';
12
12
  var defaultMenuItems = [{
13
13
  key: 'MenuItem 1',
14
14
  children: 'MenuItem 1',
15
- 'data-id': 'menuItem1'
15
+ 'data-id': 'menuItem1',
16
+ isPressed: false
16
17
  }, {
17
18
  key: 'MenuItem 2',
18
19
  children: 'MenuItem 2',
19
- 'data-id': 'menuItem2'
20
+ 'data-id': 'menuItem2',
21
+ isPressed: false
20
22
  }, {
21
23
  key: 'MenuItem 3',
22
24
  children: 'MenuItem 3',
23
- 'data-id': 'menuItem3'
25
+ 'data-id': 'menuItem3',
26
+ isPressed: false
24
27
  }];
25
28
  var defaultProps = {
26
29
  'data-testid': testId,
@@ -35,9 +38,7 @@ var getComponent = function getComponent() {
35
38
  _ref$renderFn = _ref.renderFn,
36
39
  renderFn = _ref$renderFn === void 0 ? render : _ref$renderFn;
37
40
  return renderFn(___EmotionJSX(Menu, _extends({}, defaultProps, props), _mapInstanceProperty(items).call(items, function (li) {
38
- return ___EmotionJSX(Item, _extends({
39
- key: li.key
40
- }, li, {
41
+ return ___EmotionJSX(Item, _extends({}, li, {
41
42
  sx: {
42
43
  backgroundColor: 'orange'
43
44
  }
@@ -49,9 +50,7 @@ var getComponent = function getComponent() {
49
50
  universalComponentTests({
50
51
  renderComponent: function renderComponent(props) {
51
52
  return ___EmotionJSX(Menu, _extends({}, defaultProps, props), _mapInstanceProperty(defaultMenuItems).call(defaultMenuItems, function (li) {
52
- return ___EmotionJSX(Item, _extends({
53
- key: li.key
54
- }, li, {
53
+ return ___EmotionJSX(Item, _extends({}, li, {
55
54
  sx: {
56
55
  backgroundColor: 'orange'
57
56
  }
@@ -169,4 +168,20 @@ test('custom props are passed into menuItem', function () {
169
168
  var itemText1 = defaultMenuItems[0].children;
170
169
  var menuItem1 = screen.getByText(itemText1);
171
170
  expect(menuItem1).toHaveStyleRule('background-color', 'orange');
171
+ });
172
+ test('Selection mode given as single', function () {
173
+ getComponent({
174
+ selectionMode: 'single',
175
+ defaultSelectedKeys: [defaultMenuItems[0].key]
176
+ });
177
+ var menuItems = screen.queryAllByRole('menuitemradio');
178
+ expect(menuItems).toHaveLength(defaultMenuItems.length);
179
+ });
180
+ test('Selection mode given as multiple', function () {
181
+ getComponent({
182
+ selectionMode: 'multiple',
183
+ defaultSelectedKeys: [defaultMenuItems[0].key]
184
+ });
185
+ var menuItems = screen.queryAllByRole('menuitemcheckbox');
186
+ expect(menuItems).toHaveLength(defaultMenuItems.length);
172
187
  });
@@ -212,12 +212,12 @@ export var WithList = function WithList() {
212
212
  key: 'tab1list',
213
213
  name: 'Tab 1 list',
214
214
  children: 'Tab 1 from list',
215
- role: 'listitem'
215
+ role: 'menuitemradio'
216
216
  }, {
217
217
  key: 'tab2list',
218
218
  name: 'Tab 2 list',
219
219
  children: 'Tab 2 from list',
220
- role: 'listitem'
220
+ role: 'menuitemradio'
221
221
  }]
222
222
  }]);
223
223
  return ___EmotionJSX(Tabs, {
@@ -54,12 +54,12 @@ var tabsWithList = [{
54
54
  key: 'tab1list',
55
55
  name: 'Tab 1 list',
56
56
  children: 'Tab 1 from list',
57
- role: 'listitem'
57
+ role: 'menuitemradio'
58
58
  }, {
59
59
  key: 'tab2list',
60
60
  name: 'Tab 2 list',
61
61
  children: 'Tab 2 from list',
62
- role: 'listitem'
62
+ role: 'menuitemradio'
63
63
  }]
64
64
  }];
65
65
  var defaultProps = {
@@ -471,7 +471,7 @@ test('will render tab with list if provided', /*#__PURE__*/_asyncToGenerator( /*
471
471
  userEvent.click(menuBtn);
472
472
  expect(screen.queryByRole('menu')).toBeInTheDocument();
473
473
  testTabPanel(0);
474
- menuItems = screen.queryAllByRole('listitem');
474
+ menuItems = screen.queryAllByRole('menuitemradio');
475
475
  expect(menuItems).toHaveLength(tabsWithList[1].list.length);
476
476
  expect(menuItems[0]).not.toHaveFocus();
477
477
  userEvent.click(menuItems[0]);
@@ -509,7 +509,7 @@ test('tab list is accessible via keyboard', function () {
509
509
  });
510
510
  expect(screen.queryByRole('menu')).toBeInTheDocument();
511
511
  testTabPanel(0);
512
- var menuItems = screen.queryAllByRole('listitem');
512
+ var menuItems = screen.queryAllByRole('menuitemradio');
513
513
  expect(menuItems).toHaveLength(tabsWithList[1].list.length);
514
514
  expect(menuItems[0]).toHaveFocus();
515
515
  fireEvent.keyDown(menuItems[0], {
@@ -1,8 +1,5 @@
1
1
  import { createContext, useContext } from 'react';
2
-
3
- // eslint-disable-next-line @typescript-eslint/no-empty-interface
4
-
5
2
  export var MenuContext = /*#__PURE__*/createContext({});
6
- export var useMenuContext = function useMenuContext() {
3
+ export function useMenuContext() {
7
4
  return useContext(MenuContext);
8
- };
5
+ }
@@ -14,6 +14,8 @@ export * from './item';
14
14
  export * from './link';
15
15
  export * from './listItem';
16
16
  export * from './loader';
17
+ export * from './menu';
18
+ export * from './menuItem';
17
19
  export * from './overlayPanel';
18
20
  export * from './popoverContainer';
19
21
  export * from './popoverMenu';
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pingux/astro",
3
- "version": "2.49.0-alpha.1",
3
+ "version": "2.49.0-alpha.2",
4
4
  "description": "React component library for Ping Identity's design system",
5
5
  "repository": {
6
6
  "type": "git",