@pingux/astro 2.0.0-alpha.4 → 2.0.0-alpha.6

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 (46) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/lib/cjs/components/Badge/Badge.stories.js +2 -2
  3. package/lib/cjs/components/Badge/Badge.styles.js +4 -17
  4. package/lib/cjs/components/Button/Button.stories.js +15 -3
  5. package/lib/cjs/components/CodeView/CodeView.stories.js +3 -12
  6. package/lib/cjs/components/ColorField/ColorField.js +1 -0
  7. package/lib/cjs/components/ColorField/ColorField.test.js +15 -0
  8. package/lib/cjs/components/CopyText/CopyButton.js +2 -1
  9. package/lib/cjs/components/Icon/Icon.stories.js +1 -1
  10. package/lib/cjs/components/IconButton/IconButton.styles.js +1 -1
  11. package/lib/cjs/components/ListItem/ListItem.js +30 -15
  12. package/lib/cjs/components/ListItem/ListItem.stories.js +90 -26
  13. package/lib/cjs/components/ListItem/ListItem.test.js +46 -11
  14. package/lib/cjs/components/ListView/ListView.js +7 -1
  15. package/lib/cjs/components/ListViewItem/ListViewItem.js +4 -2
  16. package/lib/cjs/components/ListViewItem/ListViewItem.styles.js +2 -2
  17. package/lib/cjs/components/Menu/Menu.js +16 -5
  18. package/lib/cjs/components/Menu/Menu.stories.js +13 -2
  19. package/lib/cjs/components/SwitchField/SwitchField.js +4 -2
  20. package/lib/cjs/recipes/LinkedListView.stories.js +1 -1
  21. package/lib/cjs/recipes/ListAndPanel.stories.js +107 -57
  22. package/lib/cjs/styles/colors.js +3 -1
  23. package/lib/cjs/utils/devUtils/props/hoverProps.js +54 -0
  24. package/lib/components/Badge/Badge.stories.js +2 -2
  25. package/lib/components/Badge/Badge.styles.js +3 -15
  26. package/lib/components/Button/Button.stories.js +11 -1
  27. package/lib/components/CodeView/CodeView.stories.js +3 -12
  28. package/lib/components/ColorField/ColorField.js +1 -0
  29. package/lib/components/ColorField/ColorField.test.js +15 -0
  30. package/lib/components/CopyText/CopyButton.js +2 -1
  31. package/lib/components/Icon/Icon.stories.js +1 -1
  32. package/lib/components/IconButton/IconButton.styles.js +2 -2
  33. package/lib/components/ListItem/ListItem.js +30 -13
  34. package/lib/components/ListItem/ListItem.stories.js +68 -8
  35. package/lib/components/ListItem/ListItem.test.js +46 -11
  36. package/lib/components/ListView/ListView.js +7 -1
  37. package/lib/components/ListViewItem/ListViewItem.js +4 -2
  38. package/lib/components/ListViewItem/ListViewItem.styles.js +2 -2
  39. package/lib/components/Menu/Menu.js +16 -5
  40. package/lib/components/Menu/Menu.stories.js +14 -2
  41. package/lib/components/SwitchField/SwitchField.js +4 -2
  42. package/lib/recipes/LinkedListView.stories.js +1 -1
  43. package/lib/recipes/ListAndPanel.stories.js +72 -22
  44. package/lib/styles/colors.js +3 -1
  45. package/lib/utils/devUtils/props/hoverProps.js +44 -0
  46. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -3,6 +3,20 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ <<<<<<< HEAD
7
+ =======
8
+ ## [1.42.1](https://gitlab.corp.pingidentity.com/ux/pingux/compare/@pingux/astro@1.42.0...@pingux/astro@1.42.1) (2023-02-16)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * [UIP-6013] List and Panel Recipe Style Fixes ([c9d69b9](https://gitlab.corp.pingidentity.com/ux/pingux/commit/c9d69b9014889263e0ea16305128737ee59c9a1f))
14
+
15
+
16
+
17
+
18
+
19
+ >>>>>>> 144c0d159c6dc7525c2b8d6b1ecb29edecf25f6a
6
20
  # [1.42.0](https://gitlab.corp.pingidentity.com/ux/pingux/compare/@pingux/astro@1.41.0...@pingux/astro@1.42.0) (2023-02-13)
7
21
 
8
22
 
@@ -23,7 +23,7 @@ var _Badge = _interopRequireDefault(require("./Badge.mdx"));
23
23
  var _ = _interopRequireDefault(require("."));
24
24
  var _react2 = require("@emotion/react");
25
25
  var _default = {
26
- title: 'Badge',
26
+ title: 'Components/Badge',
27
27
  component: _["default"],
28
28
  argTypes: {
29
29
  bg: {
@@ -177,7 +177,7 @@ var BadgeWithLeftSlotAndIcon = function BadgeWithLeftSlotAndIcon() {
177
177
  }
178
178
  }, (0, _react2.jsx)(_IconButton["default"], {
179
179
  "aria-label": "delete",
180
- variant: "buttons.chipWithSlotDeleteButton"
180
+ variant: "badgeDeleteButton"
181
181
  }, (0, _react2.jsx)(_Icon["default"], {
182
182
  icon: _CloseIcon["default"],
183
183
  size: 14
@@ -12,7 +12,7 @@ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequ
12
12
  _Object$defineProperty(exports, "__esModule", {
13
13
  value: true
14
14
  });
15
- exports.deleteButton = exports["default"] = exports.baseBadge = exports.badgeWithSlotDeleteButton = exports.badgeDeleteButton = void 0;
15
+ exports.deleteButton = exports["default"] = exports.baseBadge = exports.badgeDeleteButton = void 0;
16
16
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
17
17
  var _Buttons = require("../Button/Buttons.styles");
18
18
  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; }
@@ -94,23 +94,11 @@ var deleteButton = {
94
94
  };
95
95
  exports.deleteButton = deleteButton;
96
96
  var badgeDeleteButton = _objectSpread(_objectSpread({}, deleteButton), {}, {
97
- '&.is-focused': _objectSpread({
98
- bg: 'accent.40'
99
- }, _Buttons.focusWithCroppedOutline),
100
- '&.is-hovered': {
101
- bg: 'accent.40'
102
- },
103
- '&.is-pressed': {
104
- bg: 'accent.20',
105
- borderColor: 'accent.20'
106
- }
107
- });
108
- exports.badgeDeleteButton = badgeDeleteButton;
109
- var badgeWithSlotDeleteButton = _objectSpread(_objectSpread({}, deleteButton), {}, {
97
+ outline: 'none',
110
98
  path: {
111
99
  fill: 'neutral.40'
112
100
  },
113
- '&.is-focused': _objectSpread({}, _Buttons.defaultFocus),
101
+ '&.is-focused': _objectSpread({}, _Buttons.focusWithCroppedOutline),
114
102
  '&.is-hovered': {
115
103
  backgroundColor: '#e5e9f8 !important',
116
104
  path: {
@@ -124,7 +112,7 @@ var badgeWithSlotDeleteButton = _objectSpread(_objectSpread({}, deleteButton), {
124
112
  bg: '#4462ED !important'
125
113
  }
126
114
  });
127
- exports.badgeWithSlotDeleteButton = badgeWithSlotDeleteButton;
115
+ exports.badgeDeleteButton = badgeDeleteButton;
128
116
  var countDefault = _objectSpread(_objectSpread({}, baseBadge), {}, {
129
117
  width: 'fit-content',
130
118
  minWidth: '17px',
@@ -156,7 +144,6 @@ var _default = {
156
144
  deleteButton: deleteButton,
157
145
  countBadge: countBadge,
158
146
  countNeutral: countNeutral,
159
- badgeWithSlotDeleteButton: badgeWithSlotDeleteButton,
160
147
  badgeDeleteButton: badgeDeleteButton
161
148
  };
162
149
  exports["default"] = _default;
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequ
5
5
  _Object$defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports["default"] = exports.TextIconButton = exports.InlineButton = exports.FilterButton = exports.Disabled = exports.Default = exports.ColorBlockButton = void 0;
8
+ exports["default"] = exports.TextIconButton = exports.Primary = exports.InlineButton = exports.FilterButton = exports.Disabled = exports.Default = exports.Critical = exports.ColorBlockButton = void 0;
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
10
10
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
11
11
  var _react = _interopRequireDefault(require("react"));
@@ -25,7 +25,7 @@ delete variants.ICON_BUTTON;
25
25
  delete variants.INVERTED;
26
26
 
27
27
  // add designer approved variants for devs to use here
28
- var variantOptions = ['critical', 'default', 'inline', 'inlinePrimary', 'link', 'primary', 'success'];
28
+ var variantOptions = ['critical', 'default', 'inline', 'inlinePrimary', 'link', 'primary'];
29
29
  var _default = {
30
30
  title: 'Components/Button',
31
31
  component: _index.Button,
@@ -136,4 +136,16 @@ var FilterButton = function FilterButton() {
136
136
  icon: _FilterIcon["default"]
137
137
  })));
138
138
  };
139
- exports.FilterButton = FilterButton;
139
+ exports.FilterButton = FilterButton;
140
+ var Critical = function Critical() {
141
+ return (0, _react2.jsx)(_index.Button, {
142
+ variant: "critical"
143
+ }, "Button Text");
144
+ };
145
+ exports.Critical = Critical;
146
+ var Primary = function Primary() {
147
+ return (0, _react2.jsx)(_index.Button, {
148
+ variant: "primary"
149
+ }, "Button Text");
150
+ };
151
+ exports.Primary = Primary;
@@ -11,7 +11,6 @@ var _react = _interopRequireDefault(require("react"));
11
11
  var _prismjs = _interopRequireDefault(require("prismjs"));
12
12
  require("prismjs/components/prism-powershell");
13
13
  var _storybookDocsLayout = _interopRequireDefault(require("../../../.storybook/storybookDocsLayout"));
14
- var _ = require("../..");
15
14
  var _CodeView = _interopRequireDefault(require("./CodeView"));
16
15
  var _CodeView2 = _interopRequireDefault(require("./CodeView.mdx"));
17
16
  var _react2 = require("@emotion/react");
@@ -55,21 +54,13 @@ var _default = {
55
54
  };
56
55
  exports["default"] = _default;
57
56
  var Default = function Default(args) {
58
- return (0, _react2.jsx)(_react["default"].Fragment, null, (0, _react2.jsx)(_.Text, {
59
- sx: {
60
- fontWeight: 2
61
- }
62
- }, "JSON"), (0, _react2.jsx)(_CodeView["default"], args));
57
+ return (0, _react2.jsx)(_CodeView["default"], args);
63
58
  };
64
59
  exports.Default = Default;
65
60
  var WithLineNumbers = function WithLineNumbers() {
66
- return (0, _react2.jsx)(_react["default"].Fragment, null, (0, _react2.jsx)(_.Text, {
67
- sx: {
68
- fontWeight: 2
69
- }
70
- }, "JSON"), (0, _react2.jsx)(_CodeView["default"], {
61
+ return (0, _react2.jsx)(_CodeView["default"], {
71
62
  hasLineNumbers: true
72
- }, code));
63
+ }, code);
73
64
  };
74
65
  exports.WithLineNumbers = WithLineNumbers;
75
66
  WithLineNumbers.parameters = {
@@ -126,6 +126,7 @@ var ColorField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
126
126
  hasNoArrow: true,
127
127
  isDismissable: true,
128
128
  isNonModal: true,
129
+ isNotClosedOnBlur: true,
129
130
  isOpen: popoverState.isOpen,
130
131
  onClose: popoverState.close,
131
132
  ref: overlayRef
@@ -49,4 +49,19 @@ test('will call onChange with arguments if provided', function () {
49
49
  _userEvent["default"].clear(hexInput);
50
50
  _userEvent["default"].type(hexInput, testColor2);
51
51
  expect(testOnChange).toHaveBeenCalled();
52
+ });
53
+ test('clicking within the popover does not close it', function () {
54
+ var testOnChange = jest.fn();
55
+ getComponent({
56
+ onChange: testOnChange,
57
+ value: testColor1
58
+ });
59
+ var button = _testWrapper.screen.getByRole('button');
60
+ _userEvent["default"].click(button);
61
+ // should be open now
62
+ var hexLabelElement = _testWrapper.screen.queryByText(hexLabel);
63
+ expect(hexLabelElement).toBeInTheDocument();
64
+ // click the popover container, which has caused closing in regressions
65
+ _userEvent["default"].click(_testWrapper.screen.queryByRole('presentation'));
66
+ expect(_testWrapper.screen.queryByRole('presentation')).toBeInTheDocument();
52
67
  });
@@ -26,7 +26,8 @@ var CopyButton = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
26
26
  variant: "copyButton"
27
27
  }, (0, _lodash.omit)(props, 'iconProps')), (0, _react2.jsx)(_Icon["default"], (0, _extends2["default"])({
28
28
  icon: _ContentCopyIcon["default"],
29
- size: 15
29
+ size: "xs",
30
+ color: "text.secondary"
30
31
  }, props === null || props === void 0 ? void 0 : props.iconProps)));
31
32
  });
32
33
  CopyButton.propTypes = {
@@ -89,7 +89,7 @@ var SVGIcons = function SVGIcons() {
89
89
  return (0, _react2.jsx)(_index.Icon, {
90
90
  icon: SVGComponent,
91
91
  color: "active",
92
- size: 40
92
+ size: "sm"
93
93
  });
94
94
  };
95
95
  exports.SVGIcons = SVGIcons;
@@ -145,7 +145,7 @@ var _default = {
145
145
  badge: {
146
146
  deleteButton: _Badge.deleteButton
147
147
  },
148
- badgeWithSlotDeleteButton: _Badge.badgeWithSlotDeleteButton,
148
+ badgeDeleteButton: _Badge.badgeDeleteButton,
149
149
  copyButton: _CopyText.copyButton,
150
150
  hintButton: _objectSpread(_objectSpread({}, base), _HelpHint.hintButton),
151
151
  inverted: inverted,
@@ -1,37 +1,54 @@
1
1
  "use strict";
2
2
 
3
3
  var _typeof = require("@babel/runtime-corejs3/helpers/typeof");
4
- var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map");
5
- var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
4
+ var _Object$keys = require("@babel/runtime-corejs3/core-js-stable/object/keys");
5
+ var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols");
6
+ var _filterInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/filter");
6
7
  var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
8
+ var _forEachInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/for-each");
9
+ var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors");
10
+ var _Object$defineProperties = require("@babel/runtime-corejs3/core-js-stable/object/define-properties");
11
+ var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
12
+ var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map");
7
13
  var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
8
14
  _Object$defineProperty(exports, "__esModule", {
9
15
  value: true
10
16
  });
11
17
  exports["default"] = void 0;
18
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
12
19
  var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
13
20
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
14
21
  var _react = _interopRequireWildcard(require("react"));
15
22
  var _interactions = require("@react-aria/interactions");
16
23
  var _propTypes = _interopRequireDefault(require("prop-types"));
17
24
  var _hooks = require("../../hooks");
25
+ var _hoverProps = require("../../utils/devUtils/props/hoverProps");
18
26
  var _Box = _interopRequireDefault(require("../Box/Box"));
19
27
  var _react2 = require("@emotion/react");
20
- var _excluded = ["children", "className", "isSelected"];
28
+ var _excluded = ["children", "className", "isHovered", "isSelected", "onHoverChange", "onHoverEnd", "onHoverStart"];
21
29
  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); }
22
30
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
31
+ 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; }
32
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context, _context2; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
23
33
  /**
24
34
  * List Item component.
25
35
  * Accepts most of the styling props from [styled-system](https://styled-system.com/table).
26
36
  */
27
- var ListItem = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
28
- var children = props.children,
29
- className = props.className,
30
- isSelected = props.isSelected,
31
- others = (0, _objectWithoutProperties2["default"])(props, _excluded);
32
- var _useHover = (0, _interactions.useHover)(props),
33
- hoverProps = _useHover.hoverProps,
34
- isHovered = _useHover.isHovered;
37
+ var ListItem = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
38
+ var children = _ref.children,
39
+ className = _ref.className,
40
+ isHovered = _ref.isHovered,
41
+ isSelected = _ref.isSelected,
42
+ onHoverChange = _ref.onHoverChange,
43
+ onHoverEnd = _ref.onHoverEnd,
44
+ onHoverStart = _ref.onHoverStart,
45
+ others = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
46
+ var _useHover = (0, _interactions.useHover)({
47
+ onHoverChange: onHoverChange,
48
+ onHoverEnd: onHoverEnd,
49
+ onHoverStart: onHoverStart
50
+ }),
51
+ hoverProps = _useHover.hoverProps;
35
52
  var _useStatusClasses = (0, _hooks.useStatusClasses)(className, {
36
53
  isHovered: isHovered,
37
54
  isSelected: isSelected
@@ -39,14 +56,12 @@ var ListItem = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
39
56
  classNames = _useStatusClasses.classNames;
40
57
  return (0, _react2.jsx)(_Box["default"], (0, _extends2["default"])({
41
58
  className: classNames,
42
- role: "listitem",
43
59
  ref: ref,
44
- as: "li",
45
60
  variant: "listItem.container",
46
61
  isRow: true
47
62
  }, hoverProps, others), children);
48
63
  });
49
- ListItem.propTypes = {
64
+ ListItem.propTypes = _objectSpread({
50
65
  /**
51
66
  * A list of class names to apply to the element
52
67
  */
@@ -55,7 +70,7 @@ ListItem.propTypes = {
55
70
  * Sets the selected state of the ListItem
56
71
  */
57
72
  isSelected: _propTypes["default"].bool
58
- };
73
+ }, _hoverProps.onHoverPropTypes);
59
74
  ListItem.defaultProps = {
60
75
  isSelected: false
61
76
  };
@@ -1,88 +1,152 @@
1
1
  "use strict";
2
2
 
3
+ var _typeof = require("@babel/runtime-corejs3/helpers/typeof");
4
+ var _Object$keys = require("@babel/runtime-corejs3/core-js-stable/object/keys");
5
+ var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols");
6
+ var _filterInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/filter");
7
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
8
+ var _forEachInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/for-each");
9
+ var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors");
10
+ var _Object$defineProperties = require("@babel/runtime-corejs3/core-js-stable/object/define-properties");
3
11
  var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
12
+ var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map");
4
13
  var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
5
14
  _Object$defineProperty(exports, "__esModule", {
6
15
  value: true
7
16
  });
8
- exports["default"] = exports.WithSubtitle = exports.Default = void 0;
9
- var _react = _interopRequireDefault(require("react"));
17
+ exports["default"] = exports.WithSubtitle = exports.WithHoverHandlers = exports.Default = void 0;
18
+ var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
19
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
20
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
21
+ var _react = _interopRequireWildcard(require("react"));
10
22
  var _AccountIcon = _interopRequireDefault(require("mdi-react/AccountIcon"));
11
23
  var _MoreVertIcon = _interopRequireDefault(require("mdi-react/MoreVertIcon"));
12
- var _Box = _interopRequireDefault(require("../Box"));
13
- var _Icon = _interopRequireDefault(require("../Icon"));
14
- var _IconButton = _interopRequireDefault(require("../IconButton"));
15
- var _Separator = _interopRequireDefault(require("../Separator"));
16
- var _Text = _interopRequireDefault(require("../Text"));
17
- var _ListItem = _interopRequireDefault(require("./ListItem"));
24
+ var _ = require("../..");
25
+ var _hoverProps = require("../../utils/devUtils/props/hoverProps");
18
26
  var _react2 = require("@emotion/react");
27
+ 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); }
28
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
29
+ 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; }
30
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context, _context2; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
19
31
  var _default = {
20
32
  title: 'Components/ListItem',
21
- component: _ListItem["default"],
33
+ component: _.ListItem,
22
34
  parameters: {
23
35
  docs: {
24
36
  source: {
25
37
  type: 'code'
26
38
  }
27
39
  }
28
- }
40
+ },
41
+ argTypes: _objectSpread({}, _hoverProps.onHoverArgTypes)
29
42
  };
30
43
  exports["default"] = _default;
31
44
  var Default = function Default(args) {
32
- return (0, _react2.jsx)(_react["default"].Fragment, null, (0, _react2.jsx)(_Separator["default"], {
45
+ return (0, _react2.jsx)(_react["default"].Fragment, null, (0, _react2.jsx)(_.Separator, {
33
46
  margin: 0
34
- }), (0, _react2.jsx)(_ListItem["default"], args, (0, _react2.jsx)(_Box["default"], {
47
+ }), (0, _react2.jsx)(_.ListItem, args, (0, _react2.jsx)(_.Box, {
35
48
  isRow: true,
36
49
  mr: "auto",
37
50
  alignSelf: "center"
38
- }, (0, _react2.jsx)(_Icon["default"], {
51
+ }, (0, _react2.jsx)(_.Icon, {
39
52
  icon: _AccountIcon["default"],
40
53
  alignSelf: "center",
41
54
  mr: "sm",
42
55
  color: "accent.40",
43
56
  size: 32
44
- }), (0, _react2.jsx)(_Text["default"], {
57
+ }), (0, _react2.jsx)(_.Text, {
45
58
  variant: "itemTitle",
46
59
  alignSelf: "center"
47
- }, "Fons Vernall")), (0, _react2.jsx)(_Box["default"], {
60
+ }, "Fons Vernall")), (0, _react2.jsx)(_.Box, {
48
61
  isRow: true,
49
62
  alignSelf: "center"
50
- }, (0, _react2.jsx)(_IconButton["default"], null, (0, _react2.jsx)(_Icon["default"], {
63
+ }, (0, _react2.jsx)(_.IconButton, null, (0, _react2.jsx)(_.Icon, {
51
64
  icon: _MoreVertIcon["default"],
52
65
  size: "sm",
53
66
  color: "neutral.20"
54
- })))), (0, _react2.jsx)(_Separator["default"], {
67
+ })))), (0, _react2.jsx)(_.Separator, {
55
68
  margin: 0
56
69
  }));
57
70
  };
58
71
  exports.Default = Default;
59
72
  var WithSubtitle = function WithSubtitle(args) {
60
- return (0, _react2.jsx)(_react["default"].Fragment, null, (0, _react2.jsx)(_Separator["default"], {
73
+ return (0, _react2.jsx)(_react["default"].Fragment, null, (0, _react2.jsx)(_.Separator, {
61
74
  margin: 0
62
- }), (0, _react2.jsx)(_ListItem["default"], args, (0, _react2.jsx)(_Box["default"], {
75
+ }), (0, _react2.jsx)(_.ListItem, args, (0, _react2.jsx)(_.Box, {
63
76
  isRow: true,
64
77
  mr: "auto",
65
78
  alignSelf: "center"
66
- }, (0, _react2.jsx)(_Icon["default"], {
79
+ }, (0, _react2.jsx)(_.Icon, {
67
80
  icon: _AccountIcon["default"],
68
81
  alignSelf: "center",
69
82
  mr: "sm",
70
83
  color: "accent.40",
71
84
  size: 32
72
- }), (0, _react2.jsx)(_Box["default"], null, (0, _react2.jsx)(_Text["default"], {
85
+ }), (0, _react2.jsx)(_.Box, null, (0, _react2.jsx)(_.Text, {
73
86
  variant: "itemTitle"
74
- }, "Fons Vernall"), (0, _react2.jsx)(_Text["default"], {
87
+ }, "Fons Vernall"), (0, _react2.jsx)(_.Text, {
75
88
  variant: "itemSubtitle",
76
89
  mt: 1
77
- }, "fvernall0@google.it"))), (0, _react2.jsx)(_Box["default"], {
90
+ }, "fvernall0@google.it"))), (0, _react2.jsx)(_.Box, {
78
91
  isRow: true,
79
92
  alignSelf: "center"
80
- }, (0, _react2.jsx)(_IconButton["default"], null, (0, _react2.jsx)(_Icon["default"], {
93
+ }, (0, _react2.jsx)(_.IconButton, null, (0, _react2.jsx)(_.Icon, {
81
94
  icon: _MoreVertIcon["default"],
82
95
  size: "sm",
83
96
  color: "neutral.20"
84
- })))), (0, _react2.jsx)(_Separator["default"], {
97
+ })))), (0, _react2.jsx)(_.Separator, {
85
98
  margin: 0
86
99
  }));
87
100
  };
88
- exports.WithSubtitle = WithSubtitle;
101
+ exports.WithSubtitle = WithSubtitle;
102
+ var WithHoverHandlers = function WithHoverHandlers(args) {
103
+ var _useState = (0, _react.useState)(false),
104
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
105
+ isHovered = _useState2[0],
106
+ setIsHovered = _useState2[1];
107
+ var handleHoverChange = function handleHoverChange() {
108
+ setIsHovered(function (previousIsHovered) {
109
+ return !previousIsHovered;
110
+ });
111
+ };
112
+ var sx = function sx(shouldTranslate) {
113
+ return {
114
+ transform: "".concat(shouldTranslate ? 'translate(15px)' : 'translate(0)')
115
+ };
116
+ };
117
+ return (0, _react2.jsx)(_react["default"].Fragment, null, (0, _react2.jsx)(_.Separator, {
118
+ margin: 0
119
+ }), (0, _react2.jsx)(_.ListItem, (0, _extends2["default"])({}, args, {
120
+ onHoverEnd: handleHoverChange,
121
+ onHoverStart: handleHoverChange
122
+ }), (0, _react2.jsx)(_.Box, {
123
+ isRow: true,
124
+ mr: "auto",
125
+ alignSelf: "center"
126
+ }, (0, _react2.jsx)(_.Icon, {
127
+ icon: _AccountIcon["default"],
128
+ alignSelf: "center",
129
+ mr: "sm",
130
+ color: "accent.40",
131
+ size: 32
132
+ }), (0, _react2.jsx)(_.Box, {
133
+ sx: sx(isHovered)
134
+ }, (0, _react2.jsx)(_.Text, {
135
+ variant: "itemTitle"
136
+ }, "Fons Vernall"), (0, _react2.jsx)(_.Text, {
137
+ variant: "itemSubtitle",
138
+ mt: 1
139
+ }, "fvernall0@google.it"))), (0, _react2.jsx)(_.Box, {
140
+ isRow: true,
141
+ alignSelf: "center"
142
+ }, (0, _react2.jsx)(_.IconButton, {
143
+ size: 26
144
+ }, (0, _react2.jsx)(_.Icon, {
145
+ icon: _MoreVertIcon["default"],
146
+ size: 20,
147
+ color: "neutral.20"
148
+ })))), (0, _react2.jsx)(_.Separator, {
149
+ margin: 0
150
+ }));
151
+ };
152
+ exports.WithHoverHandlers = WithHoverHandlers;
@@ -4,16 +4,20 @@ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequ
4
4
  var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
5
5
  var _react = _interopRequireDefault(require("react"));
6
6
  var _react2 = require("@testing-library/react");
7
+ var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
7
8
  var _testAxe = _interopRequireDefault(require("../../utils/testUtils/testAxe"));
8
9
  var _ListItem = _interopRequireDefault(require("./ListItem"));
9
10
  var _react3 = require("@emotion/react");
10
11
  var testTitle = 'Test Title';
12
+ var TEST_ID = 'ListItem-testid';
11
13
  var defaultProps = {
12
14
  title: testTitle
13
15
  };
14
16
  var getComponent = function getComponent() {
15
17
  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
16
- return (0, _react2.render)((0, _react3.jsx)(_ListItem["default"], (0, _extends2["default"])({}, defaultProps, props)));
18
+ return (0, _react2.render)((0, _react3.jsx)(_ListItem["default"], (0, _extends2["default"])({}, defaultProps, props, {
19
+ "data-testid": TEST_ID
20
+ })));
17
21
  };
18
22
 
19
23
  // Need to be added to each test file to test accessibility using axe.
@@ -25,15 +29,46 @@ var getComponent = function getComponent() {
25
29
  }
26
30
  }
27
31
  });
28
- test('renders ListItem component title', function () {
29
- getComponent();
30
- var title = _react2.screen.getByRole('listitem');
31
- expect(title).toBeInTheDocument();
32
- });
33
- test('renders ListItem component with selected state', function () {
34
- getComponent({
35
- isSelected: true
32
+ describe('ListItem', function () {
33
+ test('renders ListItem component title', function () {
34
+ getComponent();
35
+ var title = _react2.screen.getByTestId(TEST_ID);
36
+ expect(title).toBeInTheDocument();
37
+ });
38
+ test('renders ListItem component with selected state', function () {
39
+ getComponent({
40
+ isSelected: true
41
+ });
42
+ var title = _react2.screen.getByTestId(TEST_ID);
43
+ expect(title).toHaveClass('is-selected');
44
+ });
45
+ describe('when hovered', function () {
46
+ var onHoverTest;
47
+ beforeEach(function () {
48
+ onHoverTest = jest.fn();
49
+ });
50
+ test('it calls the onHoverChange callback', function () {
51
+ getComponent({
52
+ onHoverChange: onHoverTest
53
+ });
54
+ _userEvent["default"].hover(_react2.screen.getByTestId(TEST_ID));
55
+ expect(onHoverTest).toHaveBeenCalled();
56
+ });
57
+ test('it calls the onHoverStart callback', function () {
58
+ getComponent({
59
+ onHoverStart: onHoverTest
60
+ });
61
+ _userEvent["default"].hover(_react2.screen.getByTestId(TEST_ID));
62
+ expect(onHoverTest).toHaveBeenCalled();
63
+ });
64
+ test('it calls the onHoverEnd callback when unhovered', function () {
65
+ getComponent({
66
+ onHoverEnd: onHoverTest
67
+ });
68
+ var listItem = _react2.screen.getByTestId(TEST_ID);
69
+ _userEvent["default"].hover(listItem);
70
+ _userEvent["default"].unhover(listItem);
71
+ expect(onHoverTest).toHaveBeenCalled();
72
+ });
36
73
  });
37
- var title = _react2.screen.getByRole('listitem');
38
- expect(title).toHaveClass('is-selected');
39
74
  });
@@ -33,7 +33,7 @@ var _ListViewItem = _interopRequireDefault(require("../ListViewItem"));
33
33
  var _Loader = _interopRequireDefault(require("../Loader"));
34
34
  var _ListViewContext = require("./ListViewContext");
35
35
  var _react2 = require("@emotion/react");
36
- var _excluded = ["disabledKeys", "loadingState", "onLoadMore", "onSelectionChange", "selectionMode", "selectionStyle"];
36
+ var _excluded = ["disabledKeys", "isHoverable", "loadingState", "onLoadMore", "onSelectionChange", "selectedKeys", "selectionMode", "selectionStyle"];
37
37
  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); }
38
38
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
39
39
  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; }
@@ -82,9 +82,12 @@ function useListLayout(state) {
82
82
 
83
83
  var ListView = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
84
84
  var disabledKeys = props.disabledKeys,
85
+ _props$isHoverable = props.isHoverable,
86
+ isHoverable = _props$isHoverable === void 0 ? true : _props$isHoverable,
85
87
  loadingState = props.loadingState,
86
88
  onLoadMore = props.onLoadMore,
87
89
  onSelectionChange = props.onSelectionChange,
90
+ selectedKeys = props.selectedKeys,
88
91
  selectionMode = props.selectionMode,
89
92
  selectionStyle = props.selectionStyle,
90
93
  others = (0, _objectWithoutProperties2["default"])(props, _excluded);
@@ -144,6 +147,7 @@ var ListView = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
144
147
  }), function (type, item) {
145
148
  if (type === 'item') {
146
149
  return (0, _react2.jsx)(_ListViewItem["default"], {
150
+ isHoverable: isHoverable,
147
151
  item: item
148
152
  });
149
153
  }
@@ -168,6 +172,8 @@ ListView.propTypes = {
168
172
  items: _isIterable.isIterableProp,
169
173
  /** The element's unique identifier. See [MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id). */
170
174
  id: _propTypes["default"].string,
175
+ /** Whether ListView should handle hover state (defaults to true) */
176
+ isHoverable: _propTypes["default"].bool,
171
177
  /** Defines a string value that labels the current element. */
172
178
  'aria-label': _propTypes["default"].string,
173
179
  /** Identifies the element (or elements) that labels the current element. */
@@ -29,6 +29,7 @@ var ListViewItem = function ListViewItem(props) {
29
29
  _props$item$props$has = _props$item$props.hasSeparator,
30
30
  hasSeparator = _props$item$props$has === void 0 ? true : _props$item$props$has,
31
31
  hasInsetSeparator = _props$item$props.hasInsetSeparator,
32
+ isHoverable = props.isHoverable,
32
33
  className = props.className;
33
34
  var dataId = item.props['data-id'];
34
35
  var _useContext = (0, _react.useContext)(_ListViewContext.ListViewContext),
@@ -57,7 +58,7 @@ var ListViewItem = function ListViewItem(props) {
57
58
  var isSelected = state.selectionManager.isSelected(item.key);
58
59
  var mergedProps = (0, _reactAria.mergeProps)(raRowProps, hoverProps, focusWithinProps, focusProps);
59
60
  var _useStatusClasses = (0, _hooks.useStatusClasses)(className, {
60
- isHovered: isSelectable && isHovered,
61
+ isHovered: isSelectable && isHovered && isHoverable,
61
62
  isSelected: isSelected,
62
63
  isFocused: isDisabled ? false : isFocusVisible || isFocusVisibleWithin,
63
64
  hasSeparator: hasSeparator,
@@ -94,7 +95,8 @@ ListViewItem.propTypes = {
94
95
  hasSeparator: _propTypes["default"].bool,
95
96
  hasInsetSeparator: _propTypes["default"].bool
96
97
  })
97
- })
98
+ }),
99
+ isHoverable: _propTypes["default"].bool
98
100
  };
99
101
  var _default = ListViewItem;
100
102
  exports["default"] = _default;