@pingux/astro 2.163.1-alpha.2 → 2.163.1-alpha.4

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 (50) hide show
  1. package/lib/cjs/components/LinkSelectField/LinkSelectField.js +7 -3
  2. package/lib/cjs/components/LinkSelectField/LinkSelectField.stories.js +20 -1
  3. package/lib/cjs/components/MenuItem/MenuItem.js +22 -13
  4. package/lib/cjs/components/MenuItem/MenuItem.styles.d.ts +1 -1
  5. package/lib/cjs/components/MenuItem/MenuItem.styles.js +1 -1
  6. package/lib/cjs/components/MenuItem/MenuItem.test.js +217 -194
  7. package/lib/cjs/components/MenuSection/MenuSection.js +2 -1
  8. package/lib/cjs/components/PopoverMenu/PopoverMenu.stories.js +57 -33
  9. package/lib/cjs/hooks/useGetTheme/useGetTheme.d.ts +4 -0
  10. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/colors.d.ts +3 -0
  11. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/colors.js +3 -0
  12. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/customProperties/icons.d.ts +1 -0
  13. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/customProperties/index.d.ts +2 -0
  14. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/variants/menu.d.ts +15 -2
  15. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/variants/menu.js +20 -7
  16. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/variants/variants.d.ts +15 -2
  17. package/lib/cjs/styles/themeOverrides/onyxSideNav.d.ts +1 -0
  18. package/lib/cjs/styles/themes/astro/customProperties/icons.d.ts +1 -0
  19. package/lib/cjs/styles/themes/astro/customProperties/icons.js +1 -1
  20. package/lib/cjs/styles/themes/astro/customProperties/index.d.ts +2 -0
  21. package/lib/cjs/styles/themes/astro/customProperties/index.js +3 -1
  22. package/lib/cjs/styles/themes/next-gen/customProperties/icons.d.ts +1 -0
  23. package/lib/cjs/styles/themes/next-gen/customProperties/icons.js +1 -1
  24. package/lib/cjs/styles/themes/next-gen/customProperties/index.d.ts +2 -0
  25. package/lib/cjs/styles/themes/next-gen/customProperties/index.js +3 -1
  26. package/lib/cjs/styles/themes/next-gen/next-gen.d.ts +34 -2
  27. package/lib/cjs/styles/themes/next-gen/variants/menu.d.ts +32 -2
  28. package/lib/cjs/styles/themes/next-gen/variants/menu.js +39 -9
  29. package/lib/cjs/styles/themes/next-gen/variants/popoverMenu.d.ts +1 -0
  30. package/lib/cjs/styles/themes/next-gen/variants/popoverMenu.js +1 -0
  31. package/lib/cjs/styles/themes/next-gen/variants/variants.d.ts +33 -2
  32. package/lib/cjs/styles/themes/next-gen/variants/variants.js +1 -0
  33. package/lib/components/LinkSelectField/LinkSelectField.js +7 -3
  34. package/lib/components/LinkSelectField/LinkSelectField.stories.js +19 -0
  35. package/lib/components/MenuItem/MenuItem.js +25 -16
  36. package/lib/components/MenuItem/MenuItem.styles.js +1 -1
  37. package/lib/components/MenuItem/MenuItem.test.js +224 -201
  38. package/lib/components/MenuSection/MenuSection.js +2 -1
  39. package/lib/components/PopoverMenu/PopoverMenu.stories.js +57 -33
  40. package/lib/styles/themeOverrides/nextGenDarkMode/colors.js +3 -0
  41. package/lib/styles/themeOverrides/nextGenDarkMode/variants/menu.js +20 -7
  42. package/lib/styles/themes/astro/customProperties/icons.js +1 -1
  43. package/lib/styles/themes/astro/customProperties/index.js +3 -1
  44. package/lib/styles/themes/next-gen/customProperties/icons.js +1 -1
  45. package/lib/styles/themes/next-gen/customProperties/index.js +3 -1
  46. package/lib/styles/themes/next-gen/variants/menu.js +38 -8
  47. package/lib/styles/themes/next-gen/variants/popoverMenu.js +1 -0
  48. package/lib/styles/themes/next-gen/variants/variants.js +2 -1
  49. package/lib/tsconfig.lib.tsbuildinfo +1 -1
  50. package/package.json +1 -1
@@ -41,17 +41,19 @@ var LinkSelectField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref)
41
41
  isDisabled = props.isDisabled,
42
42
  status = props.status,
43
43
  helperText = props.helperText,
44
- hasInlineLoader = props.hasInlineLoader;
44
+ hasInlineLoader = props.hasInlineLoader,
45
+ popoverWidth = props.popoverWidth;
45
46
  var _getAriaAttributeProp = (0, _ariaAttributes.getAriaAttributeProps)(props),
46
47
  ariaProps = _getAriaAttributeProp.ariaProps;
47
48
  var _useGetTheme = (0, _hooks.useGetTheme)(),
49
+ linkSelectFieldWidth = _useGetTheme.linkSelectFieldWidth,
48
50
  themeState = _useGetTheme.themeState;
49
51
  var isOnyx = themeState.isOnyx;
50
52
  var helperTextId = (0, _uuid.v4)();
51
53
  (0, _hooks.usePropWarning)(props, 'disabled', 'isDisabled');
52
54
  var _useSelectField = (0, _hooks.useSelectField)(_objectSpread(_objectSpread({
53
55
  listboxStyle: {
54
- width: '10em'
56
+ width: popoverWidth || linkSelectFieldWidth
55
57
  }
56
58
  }, props), {}, {
57
59
  // Need this for not applying is-default class
@@ -162,7 +164,9 @@ LinkSelectField.propTypes = _objectSpread(_objectSpread(_objectSpread({
162
164
  */
163
165
  onSelectionChange: _propTypes["default"].func,
164
166
  /** Display an inline loader inside the select trigger while loading. */
165
- hasInlineLoader: _propTypes["default"].bool
167
+ hasInlineLoader: _propTypes["default"].bool,
168
+ /** Width of the popover menu. Accepts any valid CSS unit. */
169
+ popoverWidth: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number])
166
170
  }, _statusProp.statusPropTypes), _fieldAttributes.inputFieldAttributesBasePropTypes), _ariaAttributes.ariaAttributesBasePropTypes);
167
171
  LinkSelectField.defaultProps = _objectSpread({
168
172
  placeholder: 'Select',
@@ -20,7 +20,7 @@ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequ
20
20
  _Object$defineProperty(exports, "__esModule", {
21
21
  value: true
22
22
  });
23
- exports["default"] = exports.WithNoneOption = exports.NoOptionsAvailable = exports.LeftLabel = exports.HelperText = exports.DynamicItems = exports.DisabledOptions = exports.DisabledField = exports.Default = exports.Controlled = exports.AsyncLoading = void 0;
23
+ exports["default"] = exports.WithPopoverWidth = exports.WithNoneOption = exports.NoOptionsAvailable = exports.LeftLabel = exports.HelperText = exports.DynamicItems = exports.DisabledOptions = exports.DisabledField = exports.Default = exports.Controlled = exports.AsyncLoading = void 0;
24
24
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncToGenerator"));
25
25
  var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
26
26
  var _fill = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/fill"));
@@ -324,4 +324,23 @@ var AsyncLoading = exports.AsyncLoading = function AsyncLoading() {
324
324
  key: item.id
325
325
  }, item.name.given);
326
326
  }));
327
+ };
328
+ var WithPopoverWidth = exports.WithPopoverWidth = function WithPopoverWidth(args) {
329
+ return (0, _react2.jsx)(_reactAria.OverlayProvider, null, (0, _react2.jsx)(_index.LinkSelectField, (0, _extends2["default"])({}, args, {
330
+ width: "100%",
331
+ popoverWidth: "20rem"
332
+ }), (0, _react2.jsx)(_index.Item, {
333
+ key: "red"
334
+ }, "Red"), (0, _react2.jsx)(_index.Item, {
335
+ key: "blue"
336
+ }, "Blue"), (0, _react2.jsx)(_index.Item, {
337
+ key: "yellow"
338
+ }, "Extra long goes here")));
339
+ };
340
+ WithPopoverWidth.parameters = {
341
+ docs: {
342
+ description: {
343
+ story: 'The `popoverWidth` prop can be used to set a custom width for the dropdown/popover.'
344
+ }
345
+ }
327
346
  };
@@ -10,12 +10,14 @@ _Object$defineProperty(exports, "__esModule", {
10
10
  });
11
11
  exports["default"] = void 0;
12
12
  var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
13
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
14
13
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
15
14
  var _react = _interopRequireWildcard(require("react"));
16
15
  var _reactAria = require("react-aria");
16
+ var _CheckIcon = _interopRequireDefault(require("@pingux/mdi-react/CheckIcon"));
17
+ var _focus = require("@react-aria/focus");
17
18
  var _interactions = require("@react-aria/interactions");
18
19
  var _uuid = require("uuid");
20
+ var _ = require("../..");
19
21
  var _MenuContext = require("../../context/MenuContext");
20
22
  var _hooks = require("../../hooks");
21
23
  var _Box = _interopRequireDefault(require("../Box"));
@@ -31,7 +33,6 @@ var MenuItem = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
31
33
  var _item$key;
32
34
  var item = props.item,
33
35
  isPropDisabled = props.isDisabled,
34
- isFocusVisible = props.isFocusVisible,
35
36
  isNotFocusedOnHover = props.isNotFocusedOnHover,
36
37
  className = props.className,
37
38
  state = props.state;
@@ -59,10 +60,6 @@ var MenuItem = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
59
60
  closeOnSelect: shouldCloseOnSelect
60
61
  }, state, menuItemRef),
61
62
  menuItemProps = _useMenuItem.menuItemProps;
62
- var _useState = (0, _react.useState)(false),
63
- _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
64
- isFocused = _useState2[0],
65
- setFocused = _useState2[1];
66
63
  var _usePress = (0, _interactions.usePress)({
67
64
  ref: menuItemRef,
68
65
  isDisabled: isDisabled,
@@ -70,34 +67,46 @@ var MenuItem = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
70
67
  }),
71
68
  pressProps = _usePress.pressProps,
72
69
  isPressed = _usePress.isPressed;
73
- var _useFocus = (0, _interactions.useFocus)({
74
- onFocusChange: setFocused
75
- }),
76
- focusProps = _useFocus.focusProps;
70
+ var _useFocusRing = (0, _focus.useFocusRing)(),
71
+ focusProps = _useFocusRing.focusProps,
72
+ isFocusVisible = _useFocusRing.isFocusVisible;
77
73
  var _useHover = (0, _interactions.useHover)({
78
74
  isDisabled: isDisabled
79
75
  }),
80
76
  hoverProps = _useHover.hoverProps,
81
77
  isHovered = _useHover.isHovered;
82
78
  var _useStatusClasses = (0, _hooks.useStatusClasses)(className, {
83
- isFocused: isFocused || isHovered && !isFocusVisible,
79
+ isFocused: isFocusVisible && !isNotFocusedOnHover,
84
80
  isDisabled: isDisabled,
85
81
  isSelected: isSelected,
86
- isPressed: isPressed
82
+ isPressed: isPressed,
83
+ isHovered: isHovered
87
84
  }),
88
85
  classNames = _useStatusClasses.classNames;
89
86
  if (isNotFocusedOnHover) {
90
87
  delete menuItemProps.onPointerEnter;
91
88
  delete menuItemProps.onPointerLeave;
92
89
  }
90
+ var _useGetTheme = (0, _hooks.useGetTheme)(),
91
+ isOnyx = _useGetTheme.themeState.isOnyx;
93
92
  return (0, _react2.jsx)(_Box["default"], (0, _extends2["default"])({
94
93
  as: "li",
94
+ isRow: true,
95
+ alignItems: "center",
96
+ justifyContent: "space-between",
95
97
  className: classNames,
96
98
  ref: menuItemRef,
97
99
  variant: isSeparator ? 'menuItem.separator' : 'menuItem.item',
98
100
  "data-id": dataId,
99
101
  "aria-disabled": isDisabled
100
- }, (0, _reactAria.mergeProps)(pressProps, hoverProps, focusProps, menuItemProps, others)), rendered);
102
+ }, (0, _reactAria.mergeProps)(pressProps, hoverProps, focusProps, menuItemProps, others)), rendered, isSelected && isOnyx && (0, _react2.jsx)(_.Icon, {
103
+ icon: _CheckIcon["default"],
104
+ title: {
105
+ name: 'Check Icon'
106
+ },
107
+ color: "success.bright",
108
+ size: "sm"
109
+ }));
101
110
  });
102
111
  MenuItem.displayName = 'MenuItem';
103
112
  MenuItem.defaultProps = {
@@ -5,7 +5,7 @@ declare const _default: {
5
5
  outline: string;
6
6
  cursor: string;
7
7
  fontFamily: string;
8
- '&.is-focused, &.is-selected, &.is-pressed': {
8
+ '&.is-focused, &.is-selected, &.is-pressed, &.is-hovered': {
9
9
  color: string;
10
10
  bg: string;
11
11
  '> *': {
@@ -11,7 +11,7 @@ var item = {
11
11
  outline: 'none',
12
12
  cursor: 'pointer',
13
13
  fontFamily: 'standard',
14
- '&.is-focused, &.is-selected, &.is-pressed': {
14
+ '&.is-focused, &.is-selected, &.is-pressed, &.is-hovered': {
15
15
  color: 'white',
16
16
  bg: 'active',
17
17
  '> *': {
@@ -9,23 +9,34 @@ var _forEachInstanceProperty2 = require("@babel/runtime-corejs3/core-js-stable/i
9
9
  var _Object$setPrototypeOf = require("@babel/runtime-corejs3/core-js-stable/object/set-prototype-of");
10
10
  var _Promise = require("@babel/runtime-corejs3/core-js-stable/promise");
11
11
  var _sliceInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/slice");
12
+ var _Object$keys = require("@babel/runtime-corejs3/core-js-stable/object/keys");
13
+ var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols");
14
+ var _filterInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/filter");
15
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
16
+ var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors");
17
+ var _Object$defineProperties = require("@babel/runtime-corejs3/core-js-stable/object/define-properties");
12
18
  var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
19
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
13
20
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncToGenerator"));
14
21
  var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
15
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
16
22
  var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
17
23
  var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each"));
18
24
  var _from = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/from"));
19
25
  var _react = _interopRequireDefault(require("react"));
20
26
  var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
27
+ var _hooks = require("../../hooks");
21
28
  var _index = require("../../index");
22
29
  var _testWrapper = require("../../utils/testUtils/testWrapper");
23
- var _universalComponentTest = require("../../utils/testUtils/universalComponentTest");
24
30
  var _react2 = require("@emotion/react");
25
- var _excluded = ["key"],
26
- _excluded2 = ["key"];
31
+ function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
32
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context7, _context8; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty2(_context7 = ownKeys(Object(t), !0)).call(_context7, function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty2(_context8 = ownKeys(Object(t))).call(_context8, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
27
33
  function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = "function" == typeof _Symbol ? _Symbol : {}, i = o.iterator || "@@iterator", a = o.asyncIterator || "@@asyncIterator", u = o.toStringTag || "@@toStringTag"; function c(t, r, e, n) { return _Object$defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, ""); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = _Object$create(i.prototype); return c(a, "_invoke", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error("Generator is already running"); if (4 === o) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = 3; var h = s(r, e, n); if ("normal" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } "throw" === h.type && (o = 4, n.method = "throw", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: "normal", arg: t.call(r, e) }; } catch (t) { return { type: "throw", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = _Object$getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = _Object$create(l); function g(t) { var _context5; _forEachInstanceProperty2(_context5 = ["next", "throw", "return"]).call(_context5, function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if ("throw" !== c.type) { var h = c.arg, f = h.value; return f && "object" == _typeof(f) && n.call(f, "__await") ? r.resolve(f.__await).then(function (t) { e("next", t, a, u); }, function (t) { e("throw", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e("throw", t, a, u); }); } u(c.arg); } var o; c(this, "_invoke", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, "throw" === n && r.i["return"] && (e.method = "return", e.arg = t, d(r, e), "throw" === e.method) || "return" !== n && (e.method = "throw", e.arg = new TypeError("The iterator does not provide a '" + n + "' method")), f; var i = s(o, r.i, e.arg); if ("throw" === i.type) return e.method = "throw", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, "return" !== e.method && (e.method = "next", e.arg = t), e.delegate = null, f) : a : (e.method = "throw", e.arg = new TypeError("iterator result is not an object"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = "normal", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], _forEachInstanceProperty2(t).call(t, w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if ("function" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, "constructor", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, "GeneratorFunction"), r.isGeneratorFunction = function (t) { var r = "function" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || "GeneratorFunction" === (r.displayName || r.name)); }, r.mark = function (t) { return _Object$setPrototypeOf ? _Object$setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, "GeneratorFunction")), t.prototype = _Object$create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = _Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, "Generator"), c(v, i, function () { return this; }), c(v, "toString", function () { return "[object Generator]"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { var _context6; if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, _forEachInstanceProperty2(_context6 = this.tryEntries).call(_context6, m), !r) for (var e in this) "t" === e.charAt(0) && n.call(this, e) && !isNaN(+_sliceInstanceProperty(e).call(e, 1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = "throw", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n("end"), !1; if (!c && !h) throw Error("try statement without catch or finally"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = "next", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && ("break" === t || "continue" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = "next", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, "catch": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if ("throw" === n.type) { var o = n.arg; m(e); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, "next" === this.method && (this.arg = t), f; } }, r; }
28
34
  var testId = 'testId';
35
+ var mockTheme = {
36
+ themeState: {
37
+ isOnyx: false
38
+ }
39
+ };
29
40
  var defaultMenuItems = [{
30
41
  key: 'MenuItem 1',
31
42
  children: 'MenuItem 1',
@@ -55,208 +66,220 @@ var getComponent = function getComponent() {
55
66
  _ref$renderFn = _ref.renderFn,
56
67
  renderFn = _ref$renderFn === void 0 ? _testWrapper.render : _ref$renderFn;
57
68
  return renderFn((0, _react2.jsx)(_index.Menu, (0, _extends2["default"])({}, defaultProps, props), (0, _map["default"])(items).call(items, function (li) {
58
- var key = li.key,
59
- itemProps = (0, _objectWithoutProperties2["default"])(li, _excluded);
60
- return (0, _react2.jsx)(_index.Item, (0, _extends2["default"])({
61
- key: key
62
- }, itemProps, {
69
+ return (0, _react2.jsx)(_index.Item, (0, _extends2["default"])({}, li, {
63
70
  sx: {
64
71
  backgroundColor: 'orange'
65
72
  }
66
73
  }));
67
74
  })));
68
75
  };
69
-
70
- // Needs to be added to each components test file
71
- (0, _universalComponentTest.universalComponentTests)({
72
- renderComponent: function renderComponent(props) {
73
- return (0, _react2.jsx)(_index.Menu, (0, _extends2["default"])({}, defaultProps, props), (0, _map["default"])(defaultMenuItems).call(defaultMenuItems, function (li) {
74
- var key = li.key,
75
- itemProps = (0, _objectWithoutProperties2["default"])(li, _excluded2);
76
- return (0, _react2.jsx)(_index.Item, (0, _extends2["default"])({
77
- key: key
78
- }, itemProps, {
79
- sx: {
80
- backgroundColor: 'orange'
81
- }
82
- }));
83
- }));
84
- }
76
+ jest.mock('../../hooks/useGetTheme', function () {
77
+ return {
78
+ __esModule: true,
79
+ "default": jest.fn()
80
+ };
85
81
  });
86
- test('renders menu with menu items', function () {
87
- getComponent();
88
- var menu = _testWrapper.screen.getByRole('menu');
89
- var menuItems = _testWrapper.screen.getAllByRole('menuitem');
90
- expect(menu).toBeInTheDocument();
91
- expect(menuItems).toHaveLength(menuItems.length);
92
- (0, _forEach["default"])(menuItems).call(menuItems, function (item) {
93
- return expect(item).toBeInTheDocument();
82
+ describe('MenuItem', function () {
83
+ beforeEach(function () {
84
+ jest.clearAllMocks();
85
+ _hooks.useGetTheme.mockReturnValue(mockTheme);
94
86
  });
95
- });
96
- test('applies focus when tabbed to', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
97
- var itemText, menuItem;
98
- return _regeneratorRuntime().wrap(function _callee$(_context) {
99
- while (1) switch (_context.prev = _context.next) {
100
- case 0:
101
- getComponent();
102
- itemText = defaultMenuItems[0].children;
103
- menuItem = _testWrapper.screen.getByText(itemText);
104
- expect(menuItem).not.toHaveFocus();
105
- expect(menuItem).not.toHaveClass('is-focused');
106
- _context.next = 7;
107
- return _userEvent["default"].tab();
108
- case 7:
109
- expect(menuItem).toHaveFocus();
110
- expect(menuItem).toHaveClass('is-focused');
111
- case 9:
112
- case "end":
113
- return _context.stop();
114
- }
115
- }, _callee);
116
- })));
117
- test('can arrow through menuItems', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
118
- var itemText1, itemText2, menuItem1, menuItem2;
119
- return _regeneratorRuntime().wrap(function _callee2$(_context2) {
120
- while (1) switch (_context2.prev = _context2.next) {
121
- case 0:
122
- getComponent();
123
- itemText1 = defaultMenuItems[0].children;
124
- itemText2 = defaultMenuItems[1].children;
125
- menuItem1 = _testWrapper.screen.getByText(itemText1);
126
- menuItem2 = _testWrapper.screen.getByText(itemText2);
127
- expect(menuItem1).not.toHaveFocus();
128
- expect(menuItem1).not.toHaveClass('is-focused');
129
- _context2.next = 9;
130
- return _userEvent["default"].tab();
131
- case 9:
132
- expect(menuItem1).toHaveFocus();
133
- expect(menuItem1).toHaveClass('is-focused');
134
- _testWrapper.fireEvent.keyDown(menuItem1, {
135
- key: 'ArrowDown',
136
- code: 'ArrowDown'
137
- });
138
- expect(menuItem2).toHaveFocus();
139
- expect(menuItem2).toHaveClass('is-focused');
140
- case 14:
141
- case "end":
142
- return _context2.stop();
143
- }
144
- }, _callee2);
145
- })));
146
- test('hovering menuItems applies focus class and removes focus style on unhover with "isNotFocusedOnHover"', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
147
- var itemText1, menuItem1;
148
- return _regeneratorRuntime().wrap(function _callee3$(_context3) {
149
- while (1) switch (_context3.prev = _context3.next) {
150
- case 0:
151
- getComponent({
152
- isNotFocusedOnHover: true
153
- });
154
- itemText1 = defaultMenuItems[0].children;
155
- menuItem1 = _testWrapper.screen.getByText(itemText1);
156
- expect(menuItem1).not.toHaveClass('is-focused');
157
- _context3.next = 6;
158
- return _userEvent["default"].hover(menuItem1);
159
- case 6:
160
- expect(menuItem1).toHaveClass('is-focused');
161
- _context3.next = 9;
162
- return _userEvent["default"].unhover(menuItem1);
163
- case 9:
164
- expect(menuItem1).not.toHaveClass('is-focused');
165
- case 10:
166
- case "end":
167
- return _context3.stop();
168
- }
169
- }, _callee3);
170
- })));
171
- test('hovering menuItems applies focus class and leaves focus style on unhover', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
172
- var itemText1, itemText2, menuItem1, menuItem2;
173
- return _regeneratorRuntime().wrap(function _callee4$(_context4) {
174
- while (1) switch (_context4.prev = _context4.next) {
175
- case 0:
176
- getComponent();
177
- itemText1 = defaultMenuItems[0].children;
178
- itemText2 = defaultMenuItems[1].children;
179
- menuItem1 = _testWrapper.screen.getByText(itemText1);
180
- menuItem2 = _testWrapper.screen.getByText(itemText2);
181
- expect(menuItem1).not.toHaveClass('is-focused');
182
- expect(menuItem2).not.toHaveClass('is-focused');
183
- _context4.next = 9;
184
- return _userEvent["default"].hover(menuItem1);
185
- case 9:
186
- expect(menuItem1).toHaveClass('is-focused');
187
- _context4.next = 12;
188
- return _userEvent["default"].hover(menuItem2);
189
- case 12:
190
- expect(menuItem2).toHaveClass('is-focused');
191
- _context4.next = 15;
192
- return _userEvent["default"].unhover(menuItem2);
193
- case 15:
194
- expect(menuItem2).toHaveClass('is-focused');
195
- case 16:
196
- case "end":
197
- return _context4.stop();
198
- }
199
- }, _callee4);
200
- })));
201
- test('disables item with isDisabled applied, does not disable without prop', function () {
202
- getComponent({
203
- disabledKeys: [defaultMenuItems[0].key]
87
+ test('renders menu with menu items', function () {
88
+ getComponent();
89
+ var menu = _testWrapper.screen.getByRole('menu');
90
+ var menuItems = _testWrapper.screen.getAllByRole('menuitem');
91
+ expect(menu).toBeInTheDocument();
92
+ expect(menuItems).toHaveLength(menuItems.length);
93
+ (0, _forEach["default"])(menuItems).call(menuItems, function (item) {
94
+ return expect(item).toBeInTheDocument();
95
+ });
204
96
  });
205
- var disbaledItemText = defaultMenuItems[0].children;
206
- var disabledMenuItem = _testWrapper.screen.getByText(disbaledItemText);
207
- expect(disabledMenuItem).toHaveClass('is-disabled');
208
- var menuItemText = defaultMenuItems[1].children;
209
- var menuItem = _testWrapper.screen.getByText(menuItemText);
210
- expect(menuItem).not.toHaveClass('is-disabled');
211
- });
212
- test('should change styles according to isPressed prop', function () {
213
- var customItems = (0, _from["default"])(defaultMenuItems);
214
- customItems[0].isPressed = true;
215
- getComponent({}, {
216
- items: customItems
97
+ test('applies focus when tabbed to', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
98
+ var itemText, menuItem;
99
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
100
+ while (1) switch (_context.prev = _context.next) {
101
+ case 0:
102
+ getComponent();
103
+ itemText = defaultMenuItems[0].children;
104
+ menuItem = _testWrapper.screen.getByText(itemText);
105
+ expect(menuItem).not.toHaveFocus();
106
+ expect(menuItem).not.toHaveClass('is-focused');
107
+ _context.next = 7;
108
+ return _userEvent["default"].tab();
109
+ case 7:
110
+ expect(menuItem).toHaveFocus();
111
+ expect(menuItem).toHaveClass('is-focused');
112
+ case 9:
113
+ case "end":
114
+ return _context.stop();
115
+ }
116
+ }, _callee);
117
+ })));
118
+ test('can arrow through menuItems', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
119
+ var itemText1, itemText2, menuItem1, menuItem2;
120
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
121
+ while (1) switch (_context2.prev = _context2.next) {
122
+ case 0:
123
+ getComponent();
124
+ itemText1 = defaultMenuItems[0].children;
125
+ itemText2 = defaultMenuItems[1].children;
126
+ menuItem1 = _testWrapper.screen.getByText(itemText1);
127
+ menuItem2 = _testWrapper.screen.getByText(itemText2);
128
+ expect(menuItem1).not.toHaveFocus();
129
+ expect(menuItem1).not.toHaveClass('is-focused');
130
+ _context2.next = 9;
131
+ return _userEvent["default"].tab();
132
+ case 9:
133
+ expect(menuItem1).toHaveFocus();
134
+ expect(menuItem1).toHaveClass('is-focused');
135
+ _testWrapper.fireEvent.keyDown(menuItem1, {
136
+ key: 'ArrowDown',
137
+ code: 'ArrowDown'
138
+ });
139
+ expect(menuItem2).toHaveFocus();
140
+ expect(menuItem2).toHaveClass('is-focused');
141
+ case 14:
142
+ case "end":
143
+ return _context2.stop();
144
+ }
145
+ }, _callee2);
146
+ })));
147
+ test('hovering menuItems applies hover class and removes hover style on unhover with "isNotFocusedOnHover"', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
148
+ var itemText1, menuItem1;
149
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
150
+ while (1) switch (_context3.prev = _context3.next) {
151
+ case 0:
152
+ getComponent({
153
+ isNotFocusedOnHover: true
154
+ });
155
+ itemText1 = defaultMenuItems[0].children;
156
+ menuItem1 = _testWrapper.screen.getByText(itemText1);
157
+ expect(menuItem1).not.toHaveClass('is-hovered');
158
+ _context3.next = 6;
159
+ return _userEvent["default"].hover(menuItem1);
160
+ case 6:
161
+ expect(menuItem1).toHaveClass('is-hovered');
162
+ _context3.next = 9;
163
+ return _userEvent["default"].unhover(menuItem1);
164
+ case 9:
165
+ expect(menuItem1).not.toHaveClass('is-hovered');
166
+ case 10:
167
+ case "end":
168
+ return _context3.stop();
169
+ }
170
+ }, _callee3);
171
+ })));
172
+ test('hovering menuItems applies hover class and leaves hover style on unhover', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
173
+ var itemText1, itemText2, menuItem1, menuItem2;
174
+ return _regeneratorRuntime().wrap(function _callee4$(_context4) {
175
+ while (1) switch (_context4.prev = _context4.next) {
176
+ case 0:
177
+ getComponent();
178
+ itemText1 = defaultMenuItems[0].children;
179
+ itemText2 = defaultMenuItems[1].children;
180
+ menuItem1 = _testWrapper.screen.getByText(itemText1);
181
+ menuItem2 = _testWrapper.screen.getByText(itemText2);
182
+ expect(menuItem1).not.toHaveClass('is-hovered');
183
+ expect(menuItem2).not.toHaveClass('is-hovered');
184
+ _context4.next = 9;
185
+ return _userEvent["default"].hover(menuItem1);
186
+ case 9:
187
+ expect(menuItem1).toHaveClass('is-hovered');
188
+ _context4.next = 12;
189
+ return _userEvent["default"].hover(menuItem2);
190
+ case 12:
191
+ expect(menuItem2).toHaveClass('is-hovered');
192
+ _context4.next = 15;
193
+ return _userEvent["default"].unhover(menuItem2);
194
+ case 15:
195
+ expect(menuItem2).not.toHaveClass('is-hovered');
196
+ case 16:
197
+ case "end":
198
+ return _context4.stop();
199
+ }
200
+ }, _callee4);
201
+ })));
202
+ test('disables item with isDisabled applied, does not disable without prop', function () {
203
+ getComponent({
204
+ disabledKeys: [defaultMenuItems[0].key]
205
+ });
206
+ var disbaledItemText = defaultMenuItems[0].children;
207
+ var disabledMenuItem = _testWrapper.screen.getByText(disbaledItemText);
208
+ expect(disabledMenuItem).toHaveClass('is-disabled');
209
+ var menuItemText = defaultMenuItems[1].children;
210
+ var menuItem = _testWrapper.screen.getByText(menuItemText);
211
+ expect(menuItem).not.toHaveClass('is-disabled');
217
212
  });
218
- var pressedItem = _testWrapper.screen.getAllByRole('menuitem')[0];
219
- var regularItem = _testWrapper.screen.getAllByRole('menuitem')[1];
220
- expect(pressedItem).toHaveClass('is-pressed');
221
- expect(regularItem).not.toHaveClass('is-pressed');
222
- });
223
- test('applies selected styling with isSelected prop, does not add class without prop', function () {
224
- getComponent({
225
- selectionMode: 'single',
226
- defaultSelectedKeys: [defaultMenuItems[0].key]
213
+ test('should change styles according to isPressed prop', function () {
214
+ var customItems = (0, _from["default"])(defaultMenuItems);
215
+ customItems[0].isPressed = true;
216
+ getComponent({}, {
217
+ items: customItems
218
+ });
219
+ var pressedItem = _testWrapper.screen.getAllByRole('menuitem')[0];
220
+ var regularItem = _testWrapper.screen.getAllByRole('menuitem')[1];
221
+ expect(pressedItem).toHaveClass('is-pressed');
222
+ expect(regularItem).not.toHaveClass('is-pressed');
227
223
  });
228
- var selectedItemText = defaultMenuItems[0].children;
229
- var selectedMenuItem = _testWrapper.screen.getByText(selectedItemText);
230
- expect(selectedMenuItem).toHaveClass('is-selected');
231
- var menuItemText = defaultMenuItems[1].children;
232
- var menuItem = _testWrapper.screen.getByText(menuItemText);
233
- expect(menuItem).not.toHaveClass('is-selected');
234
- });
235
- test('Item accepts a data-id and the data-id can be found in the DOM', function () {
236
- getComponent();
237
- var menuItems = _testWrapper.screen.queryAllByRole('menuitem');
238
- expect(menuItems).toHaveLength(defaultMenuItems.length);
239
- expect(menuItems[0]).toHaveAttribute('data-id', defaultMenuItems[0]['data-id']);
240
- });
241
- test('custom props are passed into menuItem', function () {
242
- getComponent();
243
- var itemText1 = defaultMenuItems[0].children;
244
- var menuItem1 = _testWrapper.screen.getByText(itemText1);
245
- expect(menuItem1).toHaveStyleRule('background-color', 'orange');
246
- });
247
- test('Selection mode given as single', function () {
248
- getComponent({
249
- selectionMode: 'single',
250
- defaultSelectedKeys: [defaultMenuItems[0].key]
224
+ test('applies selected styling with isSelected prop, does not add class without prop', function () {
225
+ getComponent({
226
+ selectionMode: 'single',
227
+ defaultSelectedKeys: [defaultMenuItems[0].key]
228
+ });
229
+ var selectedItemText = defaultMenuItems[0].children;
230
+ var selectedMenuItem = _testWrapper.screen.getByText(selectedItemText);
231
+ expect(selectedMenuItem).toHaveClass('is-selected');
232
+ var menuItemText = defaultMenuItems[1].children;
233
+ var menuItem = _testWrapper.screen.getByText(menuItemText);
234
+ expect(menuItem).not.toHaveClass('is-selected');
235
+ });
236
+ test('Item accepts a data-id and the data-id can be found in the DOM', function () {
237
+ getComponent();
238
+ var menuItems = _testWrapper.screen.queryAllByRole('menuitem');
239
+ expect(menuItems).toHaveLength(defaultMenuItems.length);
240
+ expect(menuItems[0]).toHaveAttribute('data-id', defaultMenuItems[0]['data-id']);
241
+ });
242
+ test('custom props are passed into menuItem', function () {
243
+ getComponent();
244
+ var itemText1 = defaultMenuItems[0].children;
245
+ var menuItem1 = _testWrapper.screen.getByText(itemText1);
246
+ expect(menuItem1).toHaveStyleRule('background-color', 'orange');
247
+ });
248
+ test('Selection mode given as single', function () {
249
+ getComponent({
250
+ selectionMode: 'single',
251
+ defaultSelectedKeys: [defaultMenuItems[0].key]
252
+ });
253
+ var menuItems = _testWrapper.screen.queryAllByRole('menuitemradio');
254
+ expect(menuItems).toHaveLength(defaultMenuItems.length);
255
+ });
256
+ test('Selection mode given as multiple', function () {
257
+ getComponent({
258
+ selectionMode: 'multiple',
259
+ defaultSelectedKeys: [defaultMenuItems[0].key]
260
+ });
261
+ var menuItems = _testWrapper.screen.queryAllByRole('menuitemcheckbox');
262
+ expect(menuItems).toHaveLength(defaultMenuItems.length);
251
263
  });
252
- var menuItems = _testWrapper.screen.queryAllByRole('menuitemradio');
253
- expect(menuItems).toHaveLength(defaultMenuItems.length);
254
264
  });
255
- test('Selection mode given as multiple', function () {
256
- getComponent({
257
- selectionMode: 'multiple',
258
- defaultSelectedKeys: [defaultMenuItems[0].key]
265
+ describe('MenuItem', function () {
266
+ beforeEach(function () {
267
+ jest.clearAllMocks();
268
+ _hooks.useGetTheme.mockReturnValue(_objectSpread(_objectSpread({}, mockTheme), {}, {
269
+ themeState: {
270
+ isOnyx: true
271
+ }
272
+ }));
273
+ });
274
+ test('checkmark icon is shown when item is selected and theme is onyx', function () {
275
+ getComponent({
276
+ selectionMode: 'single',
277
+ defaultSelectedKeys: [defaultMenuItems[0].key]
278
+ });
279
+ var selectedItemText = defaultMenuItems[0].children;
280
+ var selectedMenuItem = _testWrapper.screen.getByText(selectedItemText);
281
+ var checkIcon = _testWrapper.screen.getByTitle('Check Icon');
282
+ expect(selectedMenuItem).toBeInTheDocument();
283
+ expect(checkIcon).toBeInTheDocument();
259
284
  });
260
- var menuItems = _testWrapper.screen.queryAllByRole('menuitemcheckbox');
261
- expect(menuItems).toHaveLength(defaultMenuItems.length);
262
285
  });
@@ -42,7 +42,8 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof _WeakMap) var
42
42
  return (0, _react2.jsx)(_react["default"].Fragment, null, section.key !== state.collection.getFirstKey() && (0, _react2.jsx)(_Separator["default"], {
43
43
  as: "li",
44
44
  p: 0,
45
- m: 0
45
+ my: "sm",
46
+ mx: "0"
46
47
  }), (0, _react2.jsx)(_Box["default"], (0, _extends2["default"])({
47
48
  as: "li"
48
49
  }, itemProps, {