@pingux/astro 1.2.0-alpha.6 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/lib/cjs/components/AccordionGridGroup/AccordionGridGroup.js +32 -25
  3. package/lib/cjs/components/AccordionGridGroup/AccordionGridGroup.stories.js +148 -169
  4. package/lib/cjs/components/AccordionGridGroup/AccordionGridGroup.test.js +25 -30
  5. package/lib/cjs/components/AccordionGridItem/AccordionGridItem.js +29 -14
  6. package/lib/cjs/components/AccordionGridItem/AccordionGridItemBody.js +3 -3
  7. package/lib/cjs/components/AccordionGridItem/AccordionGridItemHeader.js +16 -18
  8. package/lib/cjs/components/AccordionGroup/AccordionGroup.js +2 -1
  9. package/lib/cjs/components/AccordionGroup/AccordionGroup.test.js +20 -1
  10. package/lib/cjs/components/Breadcrumbs/Breadcrumbs.stories.js +3 -3
  11. package/lib/cjs/components/Button/Button.js +14 -2
  12. package/lib/cjs/components/Button/Button.stories.js +33 -33
  13. package/lib/cjs/components/EnvironmentBreadcrumb/EnvironmentBreadcrumb.js +5 -3
  14. package/lib/cjs/components/Link/Link.js +2 -1
  15. package/lib/cjs/components/ListView/ListView.js +9 -13
  16. package/lib/cjs/components/ListViewItem/ListViewItem.js +15 -3
  17. package/lib/cjs/components/Modal/Modal.stories.js +1 -1
  18. package/lib/cjs/components/OverlayPanel/OverlayPanel.js +2 -16
  19. package/lib/cjs/components/OverlayPanel/OverlayPanel.test.js +44 -0
  20. package/lib/cjs/components/RockerButton/RockerButton.js +14 -22
  21. package/lib/cjs/components/RockerButtonGroup/RockerButtonGroup.js +5 -9
  22. package/lib/cjs/components/RockerButtonGroup/RockerButtonGroup.stories.js +4 -22
  23. package/lib/cjs/components/RockerButtonGroup/RockerButtonGroup.test.js +5 -14
  24. package/lib/cjs/components/SearchField/SearchField.stories.js +1 -15
  25. package/lib/cjs/components/TextAreaField/TextAreaField.js +54 -9
  26. package/lib/cjs/components/TextAreaField/TextAreaField.stories.js +31 -52
  27. package/lib/cjs/components/TextAreaField/TextAreaField.test.js +12 -0
  28. package/lib/cjs/context/AccordionGridContext/index.js +20 -0
  29. package/lib/cjs/hooks/useAriaLabelWarning/useAriaLabelWarning.js +2 -1
  30. package/lib/cjs/hooks/useField/useField.js +5 -0
  31. package/lib/cjs/hooks/useRockerButton/useRockerButton.js +4 -6
  32. package/lib/cjs/layouts/ListLayout.stories.js +6 -6
  33. package/lib/cjs/recipes/ArrayField.stories.js +1 -1
  34. package/lib/cjs/recipes/ConditionalFilter.stories.js +7 -3
  35. package/lib/cjs/recipes/RadioButtonsWithLinks.stories.js +1 -1
  36. package/lib/cjs/styles/variants/boxes.js +9 -0
  37. package/lib/cjs/styles/variants/buttons.js +20 -0
  38. package/lib/components/AccordionGridGroup/AccordionGridGroup.js +32 -24
  39. package/lib/components/AccordionGridGroup/AccordionGridGroup.stories.js +143 -166
  40. package/lib/components/AccordionGridGroup/AccordionGridGroup.test.js +24 -25
  41. package/lib/components/AccordionGridItem/AccordionGridItem.js +29 -15
  42. package/lib/components/AccordionGridItem/AccordionGridItemBody.js +4 -4
  43. package/lib/components/AccordionGridItem/AccordionGridItemHeader.js +19 -20
  44. package/lib/components/AccordionGroup/AccordionGroup.js +2 -1
  45. package/lib/components/AccordionGroup/AccordionGroup.test.js +16 -2
  46. package/lib/components/Breadcrumbs/Breadcrumbs.stories.js +3 -3
  47. package/lib/components/Button/Button.js +15 -3
  48. package/lib/components/Button/Button.stories.js +17 -15
  49. package/lib/components/EnvironmentBreadcrumb/EnvironmentBreadcrumb.js +5 -3
  50. package/lib/components/Link/Link.js +2 -1
  51. package/lib/components/ListView/ListView.js +9 -12
  52. package/lib/components/ListViewItem/ListViewItem.js +14 -3
  53. package/lib/components/Modal/Modal.stories.js +1 -1
  54. package/lib/components/OverlayPanel/OverlayPanel.js +3 -16
  55. package/lib/components/OverlayPanel/OverlayPanel.test.js +38 -0
  56. package/lib/components/RockerButton/RockerButton.js +14 -21
  57. package/lib/components/RockerButtonGroup/RockerButtonGroup.js +5 -9
  58. package/lib/components/RockerButtonGroup/RockerButtonGroup.stories.js +2 -17
  59. package/lib/components/RockerButtonGroup/RockerButtonGroup.test.js +5 -11
  60. package/lib/components/SearchField/SearchField.stories.js +0 -11
  61. package/lib/components/TextAreaField/TextAreaField.js +54 -10
  62. package/lib/components/TextAreaField/TextAreaField.stories.js +26 -42
  63. package/lib/components/TextAreaField/TextAreaField.test.js +13 -0
  64. package/lib/context/AccordionGridContext/index.js +5 -0
  65. package/lib/hooks/useAriaLabelWarning/useAriaLabelWarning.js +2 -1
  66. package/lib/hooks/useField/useField.js +5 -0
  67. package/lib/hooks/useRockerButton/useRockerButton.js +4 -6
  68. package/lib/layouts/ListLayout.stories.js +6 -6
  69. package/lib/recipes/ArrayField.stories.js +1 -1
  70. package/lib/recipes/ConditionalFilter.stories.js +7 -3
  71. package/lib/recipes/RadioButtonsWithLinks.stories.js +1 -1
  72. package/lib/styles/variants/boxes.js +9 -0
  73. package/lib/styles/variants/buttons.js +20 -0
  74. package/package.json +3 -3
  75. package/lib/cjs/components/AccordionGridGroup/AccordionGridContext.js +0 -17
  76. package/lib/components/AccordionGridGroup/AccordionGridContext.js +0 -2
@@ -30,7 +30,7 @@ var _grid = require("@react-aria/grid");
30
30
 
31
31
  var _utils = require("@react-aria/utils");
32
32
 
33
- var _AccordionGridContext = require("../AccordionGridGroup/AccordionGridContext");
33
+ var _AccordionGridContext = require("../../context/AccordionGridContext");
34
34
 
35
35
  var _Box = _interopRequireDefault(require("../Box"));
36
36
 
@@ -38,6 +38,8 @@ var _AccordionGridItemHeader = _interopRequireDefault(require("./AccordionGridIt
38
38
 
39
39
  var _AccordionGridItemBody = _interopRequireDefault(require("./AccordionGridItemBody"));
40
40
 
41
+ var _hooks = require("../../hooks");
42
+
41
43
  var _react2 = require("@emotion/react");
42
44
 
43
45
  var AccordionGridItem = function AccordionGridItem(props) {
@@ -47,7 +49,8 @@ var AccordionGridItem = function AccordionGridItem(props) {
47
49
  headerProps = props.headerProps,
48
50
  bodyProps = props.bodyProps,
49
51
  children = props.children,
50
- others = (0, _objectWithoutProperties2["default"])(props, ["item", "headerProps", "bodyProps", "children"]);
52
+ className = props.className,
53
+ others = (0, _objectWithoutProperties2["default"])(props, ["item", "headerProps", "bodyProps", "children", "className"]);
51
54
 
52
55
  var _React$Children$toArr = _react["default"].Children.toArray(children),
53
56
  _React$Children$toArr2 = (0, _toArray2["default"])(_React$Children$toArr),
@@ -57,10 +60,18 @@ var AccordionGridItem = function AccordionGridItem(props) {
57
60
 
58
61
  var cellNode = (0, _concat["default"])(_context = []).call(_context, item.childNodes)[0];
59
62
 
60
- var _useContext = (0, _react.useContext)(_AccordionGridContext.AccordionGridContext),
61
- state = _useContext.state;
63
+ var _useAccordionGridCont = (0, _AccordionGridContext.useAccordionGridContext)(),
64
+ state = _useAccordionGridCont.state; // Treat first cell as a row, fixes focus and keyboard interactions
65
+
66
+
67
+ var isDisabled = state.disabledKeys.has(cellNode.key);
68
+ var isSelected = state.selectionManager.isSelected(cellNode.key); // Sync selection between the first cell and the row
62
69
 
63
- var isDisabled = state.disabledKeys.has(item.key);
70
+ (0, _react.useEffect)(function () {
71
+ if (isSelected !== state.selectionManager.isSelected(item.key)) {
72
+ state.selectionManager.toggleSelection(item.key);
73
+ }
74
+ }, [isSelected, state.selectionManager, item.key]);
64
75
  var rowRef = (0, _react.useRef)();
65
76
  var cellRef = (0, _react.useRef)();
66
77
  var cellBodyRef = (0, _react.useRef)();
@@ -70,20 +81,24 @@ var AccordionGridItem = function AccordionGridItem(props) {
70
81
  }, state, rowRef),
71
82
  rowProps = _useGridRow.rowProps;
72
83
 
73
- var isSelected = state.selectionManager.isSelected(item.key);
74
- return (0, _react2.jsx)(_Box["default"], (0, _extends2["default"])({
75
- as: "div",
84
+ var _useStatusClasses = (0, _hooks.useStatusClasses)(className, {
85
+ isSelected: isSelected,
76
86
  isDisabled: isDisabled
87
+ }),
88
+ classNames = _useStatusClasses.classNames;
89
+
90
+ return (0, _react2.jsx)(_Box["default"], (0, _extends2["default"])({
91
+ as: "div"
77
92
  }, (0, _utils.mergeProps)(rowProps, others), {
78
- ref: rowRef,
79
- role: "row"
93
+ "aria-selected": isSelected,
94
+ className: classNames,
95
+ ref: rowRef
80
96
  }), (0, _react2.jsx)(_AccordionGridItemHeader["default"], (0, _extends2["default"])({
81
97
  item: item,
82
- cellNode: cellNode,
83
- ref: cellRef
84
- }, headerProps, {
98
+ ref: cellRef,
99
+ isDisabled: isDisabled,
85
100
  isSelected: isSelected
86
- }), header), (0, _react2.jsx)(_AccordionGridItemBody["default"], (0, _extends2["default"])({
101
+ }, headerProps), header), (0, _react2.jsx)(_AccordionGridItemBody["default"], (0, _extends2["default"])({
87
102
  item: item,
88
103
  ref: cellBodyRef,
89
104
  isSelected: isSelected
@@ -26,7 +26,7 @@ var _grid = require("@react-aria/grid");
26
26
 
27
27
  var _interactions = require("@react-aria/interactions");
28
28
 
29
- var _AccordionGridContext = require("../AccordionGridGroup/AccordionGridContext");
29
+ var _AccordionGridContext = require("../../context/AccordionGridContext");
30
30
 
31
31
  var _Box = _interopRequireDefault(require("../Box"));
32
32
 
@@ -42,8 +42,8 @@ var AccordionGridItemBody = /*#__PURE__*/(0, _react.forwardRef)(function (props,
42
42
  children = props.children,
43
43
  isSelected = props.isSelected;
44
44
 
45
- var _useContext = (0, _react.useContext)(_AccordionGridContext.AccordionGridContext),
46
- state = _useContext.state;
45
+ var _useAccordionGridCont = (0, _AccordionGridContext.useAccordionGridContext)(),
46
+ state = _useAccordionGridCont.state;
47
47
 
48
48
  var cellNode = (0, _concat["default"])(_context = []).call(_context, item.childNodes)[1];
49
49
 
@@ -34,7 +34,7 @@ var _MenuDownIcon = _interopRequireDefault(require("mdi-react/MenuDownIcon"));
34
34
 
35
35
  var _MenuUpIcon = _interopRequireDefault(require("mdi-react/MenuUpIcon"));
36
36
 
37
- var _AccordionGridContext = require("../AccordionGridGroup/AccordionGridContext");
37
+ var _AccordionGridContext = require("../../context/AccordionGridContext");
38
38
 
39
39
  var _Box = _interopRequireDefault(require("../Box"));
40
40
 
@@ -50,20 +50,26 @@ var AccordionGridItemHeader = /*#__PURE__*/(0, _react.forwardRef)(function (prop
50
50
  var item = props.item,
51
51
  className = props.className,
52
52
  children = props.children,
53
- key = props.key,
54
53
  isSelected = props.isSelected,
55
- others = (0, _objectWithoutProperties2["default"])(props, ["item", "className", "children", "key", "isSelected"]);
54
+ others = (0, _objectWithoutProperties2["default"])(props, ["item", "className", "children", "isSelected"]);
56
55
 
57
- var _useContext = (0, _react.useContext)(_AccordionGridContext.AccordionGridContext),
58
- state = _useContext.state;
56
+ var _useAccordionGridCont = (0, _AccordionGridContext.useAccordionGridContext)(),
57
+ state = _useAccordionGridCont.state;
59
58
 
59
+ var cellRef = (0, _react.useRef)();
60
+ /* istanbul ignore next */
61
+
62
+ (0, _react.useImperativeHandle)(ref, function () {
63
+ return cellRef.current;
64
+ });
60
65
  var cellNode = (0, _concat["default"])(_context = []).call(_context, item.childNodes)[0];
61
66
 
62
67
  var _useGridCell = (0, _grid.useGridCell)({
63
68
  node: cellNode,
64
69
  focusMode: 'cell'
65
- }, state, ref),
66
- gridCellProps = _useGridCell.gridCellProps;
70
+ }, state, cellRef),
71
+ gridCellProps = _useGridCell.gridCellProps,
72
+ isPressed = _useGridCell.isPressed;
67
73
 
68
74
  var _useHover = (0, _interactions.useHover)({}),
69
75
  hoverProps = _useHover.hoverProps,
@@ -78,14 +84,7 @@ var AccordionGridItemHeader = /*#__PURE__*/(0, _react.forwardRef)(function (prop
78
84
  focusProps = _useFocusRing2.focusProps,
79
85
  isFocusVisible = _useFocusRing2.isFocusVisible;
80
86
 
81
- var _usePress = (0, _interactions.usePress)({
82
- ref: ref,
83
- isPressed: item.props.isPressed
84
- }),
85
- pressProps = _usePress.pressProps,
86
- isPressed = _usePress.isPressed;
87
-
88
- var mergedProps = (0, _utils.mergeProps)(gridCellProps, hoverProps, focusWithinProps, focusProps, pressProps);
87
+ var mergedProps = (0, _utils.mergeProps)(gridCellProps, hoverProps, focusWithinProps, focusProps);
89
88
 
90
89
  var _useStatusClasses = (0, _hooks.useStatusClasses)(className, {
91
90
  isPressed: isPressed,
@@ -98,9 +97,8 @@ var AccordionGridItemHeader = /*#__PURE__*/(0, _react.forwardRef)(function (prop
98
97
  var ariaLabel = props['aria-label'];
99
98
  return (0, _react2.jsx)(_Box["default"], (0, _extends2["default"])({
100
99
  as: "div",
101
- ref: ref
100
+ ref: cellRef
102
101
  }, mergedProps, {
103
- role: "gridcell",
104
102
  variant: "accordion.accordionGridHeader",
105
103
  isFocused: isFocusVisible,
106
104
  isSelected: isSelected,
@@ -123,8 +121,8 @@ var AccordionGridItemHeader = /*#__PURE__*/(0, _react.forwardRef)(function (prop
123
121
  AccordionGridItemHeader.propTypes = {
124
122
  'aria-label': _propTypes["default"].string,
125
123
  isSelected: _propTypes["default"].bool,
126
- key: _propTypes["default"].string,
127
124
  item: _propTypes["default"].shape({
125
+ key: _propTypes["default"].string,
128
126
  childNodes: _propTypes["default"].arrayOf(_propTypes["default"].shape({})),
129
127
  props: _propTypes["default"].shape({
130
128
  isPressed: _propTypes["default"].bool
@@ -57,8 +57,9 @@ var AccordionGroup = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
57
57
 
58
58
  var _useAccordion = (0, _accordion.useAccordion)(props, state, accordionRef),
59
59
  accordionProps = _useAccordion.accordionProps;
60
- /* istanbul ignore next */
61
60
 
61
+ delete accordionProps.onMouseDown;
62
+ /* istanbul ignore next */
62
63
 
63
64
  (0, _react.useImperativeHandle)(ref, function () {
64
65
  return accordionRef.current;
@@ -46,7 +46,11 @@ var getComponent = function getComponent() {
46
46
  textValue: "Duplicate",
47
47
  "data-id": "third",
48
48
  label: "Accordion item"
49
- }, (0, _react2.jsx)(_Text["default"], null, "Render me!"))));
49
+ }, (0, _react2.jsx)(_index.TextField, {
50
+ role: "form",
51
+ label: "Example Label",
52
+ "data-testid": "testField"
53
+ }))));
50
54
  };
51
55
 
52
56
  var getComponentInOverlayPanel = function getComponentInOverlayPanel() {
@@ -280,6 +284,21 @@ test('expanded keys expands an accordion item', function () {
280
284
  var selectedItem = buttons[0];
281
285
  expect(selectedItem).toHaveAttribute('aria-expanded', 'true');
282
286
  });
287
+ test('able to click a textfield that is the rendered child of an accordion', function () {
288
+ getComponent({
289
+ expandedKeys: ['third']
290
+ });
291
+
292
+ var field = _testWrapper.screen.getByTestId('testField');
293
+
294
+ var input = _testWrapper.screen.getByRole('form');
295
+
296
+ _userEvent["default"].click(input);
297
+
298
+ _userEvent["default"].type(input, 'banana');
299
+
300
+ expect(field).toHaveClass('has-focus-within');
301
+ });
283
302
  test('Item accepts a data-id and the data-id can be found in the DOM', function () {
284
303
  getComponent();
285
304
 
@@ -63,15 +63,15 @@ var Default = function Default(args) {
63
63
  onAction: onAction
64
64
  }, args), (0, _react2.jsx)(_collections.Item, {
65
65
  key: "home",
66
- variant: "text",
66
+ variant: "link",
67
67
  "data-id": "home"
68
68
  }, "Home"), (0, _react2.jsx)(_collections.Item, {
69
69
  key: "trendy",
70
- variant: "text",
70
+ variant: "link",
71
71
  "data-id": "trendy"
72
72
  }, "Trendy"), (0, _react2.jsx)(_collections.Item, {
73
73
  key: "march 2020 assets",
74
- variant: "text",
74
+ variant: "link",
75
75
  "data-id": "march"
76
76
  }, "March 2020 Assets"));
77
77
  };
@@ -71,7 +71,8 @@ var Button = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
71
71
  onPressChange = props.onPressChange,
72
72
  onPressUp = props.onPressUp,
73
73
  children = props.children,
74
- others = (0, _objectWithoutProperties2["default"])(props, ["className", "isDisabled", "isLoading", "onHoverStart", "onHoverChange", "onHoverEnd", "onPress", "onPressStart", "onPressEnd", "onPressChange", "onPressUp", "children"]);
74
+ variant = props.variant,
75
+ others = (0, _objectWithoutProperties2["default"])(props, ["className", "isDisabled", "isLoading", "onHoverStart", "onHoverChange", "onHoverEnd", "onPress", "onPressStart", "onPressEnd", "onPressChange", "onPressUp", "children", "variant"]);
75
76
  var buttonRef = (0, _react.useRef)();
76
77
  (0, _hooks.usePropWarning)(props, 'disabled', 'isDisabled');
77
78
  /* istanbul ignore next */
@@ -102,7 +103,17 @@ var Button = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
102
103
  }),
103
104
  classNames = _useStatusClasses.classNames;
104
105
 
106
+ (0, _hooks.useDeprecationWarning)('The "icon" variant for `Button` is deprecated in Astro-UI 1.0.0, use the `IconButton` component instead.', {
107
+ isActive: props.variant === 'icon'
108
+ });
109
+ (0, _hooks.useDeprecationWarning)('The "danger" variant for `Button` will be deprecated in Astro-UI 2.0.0, use the `critical` variant instead.', {
110
+ isActive: props.variant === 'danger'
111
+ });
112
+ (0, _hooks.useDeprecationWarning)('The "text" variant for `Button` will be deprecated in Astro-UI 2.0.0, use the `link` variant instead.', {
113
+ isActive: props.variant === 'text'
114
+ });
105
115
  var ariaLabel = props['aria-label'];
116
+ (0, _hooks.useAriaLabelWarning)('Button', ariaLabel, variant === 'filter');
106
117
  return (0, _react2.jsx)(_themeUi.Button, (0, _extends2["default"])({
107
118
  "aria-label": ariaLabel,
108
119
  ref: buttonRef,
@@ -113,7 +124,8 @@ var Button = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
113
124
  display: 'flex',
114
125
  justifyContent: 'center',
115
126
  alignItems: 'center'
116
- }
127
+ },
128
+ variant: variant
117
129
  }, others, (0, _utils.mergeProps)(hoverProps, focusProps, buttonProps)), isLoading ? (0, _react2.jsx)("span", {
118
130
  style: {
119
131
  visibility: 'hidden'
@@ -8,7 +8,7 @@ _Object$defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
10
 
11
- exports.ColorBlockButton = exports.InlineButton = exports.TextButton = exports.TextIconButton = exports.Disabled = exports.Default = exports["default"] = void 0;
11
+ exports.FilterButton = exports.ColorBlockButton = exports.InlineButton = exports.TextIconButton = exports.Disabled = exports.Default = exports["default"] = void 0;
12
12
 
13
13
  var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
14
14
 
@@ -20,16 +20,12 @@ var _AddCircleIcon = _interopRequireDefault(require("mdi-react/AddCircleIcon"));
20
20
 
21
21
  var _CreateIcon = _interopRequireDefault(require("mdi-react/CreateIcon"));
22
22
 
23
- var _Box = _interopRequireDefault(require("../Box"));
24
-
25
- var _ = _interopRequireDefault(require("."));
26
-
27
- var _Icon = _interopRequireDefault(require("../Icon"));
28
-
29
- var _Text = _interopRequireDefault(require("../Text"));
23
+ var _FilterIcon = _interopRequireDefault(require("mdi-react/FilterIcon"));
30
24
 
31
25
  var _variants = require("../../utils/devUtils/constants/variants");
32
26
 
27
+ var _index = require("../../index");
28
+
33
29
  var _react2 = require("@emotion/react");
34
30
 
35
31
  // removing the iconButton variants from this story.
@@ -41,7 +37,7 @@ delete variants.INVERTED; // add designer approved variants for devs to use here
41
37
  var variantOptions = ['critical', 'danger', 'default', 'inline', 'link', 'primary', 'success', 'text'];
42
38
  var _default = {
43
39
  title: 'Button',
44
- component: _["default"],
40
+ component: _index.Button,
45
41
  argTypes: {
46
42
  variant: {
47
43
  control: {
@@ -74,13 +70,13 @@ var _default = {
74
70
  exports["default"] = _default;
75
71
 
76
72
  var Default = function Default(args) {
77
- return (0, _react2.jsx)(_["default"], args);
73
+ return (0, _react2.jsx)(_index.Button, args);
78
74
  };
79
75
 
80
76
  exports.Default = Default;
81
77
 
82
78
  var Disabled = function Disabled() {
83
- return (0, _react2.jsx)(_["default"], {
79
+ return (0, _react2.jsx)(_index.Button, {
84
80
  isDisabled: true
85
81
  }, "Button Text");
86
82
  };
@@ -88,12 +84,12 @@ var Disabled = function Disabled() {
88
84
  exports.Disabled = Disabled;
89
85
 
90
86
  var TextIconButton = function TextIconButton() {
91
- return (0, _react2.jsx)(_["default"], {
87
+ return (0, _react2.jsx)(_index.Button, {
92
88
  mb: "sm"
93
- }, (0, _react2.jsx)(_Box["default"], {
89
+ }, (0, _react2.jsx)(_index.Box, {
94
90
  isRow: true,
95
91
  alignItems: "center"
96
- }, (0, _react2.jsx)(_Icon["default"], {
92
+ }, (0, _react2.jsx)(_index.Icon, {
97
93
  icon: _AddCircleIcon["default"],
98
94
  mr: "sm",
99
95
  color: "active",
@@ -103,21 +99,8 @@ var TextIconButton = function TextIconButton() {
103
99
 
104
100
  exports.TextIconButton = TextIconButton;
105
101
 
106
- var TextButton = function TextButton() {
107
- return (0, _react2.jsx)(_["default"], {
108
- mb: "sm",
109
- variant: "text",
110
- "aria-label": "Add option"
111
- }, (0, _react2.jsx)(_Text["default"], {
112
- variant: "label",
113
- color: "active"
114
- }, " + Add Option"));
115
- };
116
-
117
- exports.TextButton = TextButton;
118
-
119
102
  var InlineButton = function InlineButton() {
120
- return (0, _react2.jsx)(_["default"], {
103
+ return (0, _react2.jsx)(_index.Button, {
121
104
  mb: "sm",
122
105
  variant: "inline"
123
106
  }, "Inline");
@@ -129,14 +112,14 @@ var ColorBlockButton = function ColorBlockButton(args) {
129
112
  // Change `isConfigured` property in storybook controls
130
113
  var isConfigured = args.isConfigured,
131
114
  props = (0, _objectWithoutProperties2["default"])(args, ["isConfigured"]);
132
- return (0, _react2.jsx)(_["default"], (0, _extends2["default"])({}, props, {
115
+ return (0, _react2.jsx)(_index.Button, (0, _extends2["default"])({}, props, {
133
116
  variant: "colorBlock",
134
117
  className: isConfigured ? 'is-configured' : ''
135
- }), (0, _react2.jsx)(_Box["default"], null, (0, _react2.jsx)(_Text["default"], {
118
+ }), (0, _react2.jsx)(_index.Box, null, (0, _react2.jsx)(_index.Text, {
136
119
  variant: "buttonTitle"
137
- }, "Title"), (0, _react2.jsx)(_Text["default"], {
120
+ }, "Title"), (0, _react2.jsx)(_index.Text, {
138
121
  variant: "buttonSubtitle"
139
- }, "Info")), (0, _react2.jsx)(_Icon["default"], {
122
+ }, "Info")), (0, _react2.jsx)(_index.Icon, {
140
123
  icon: _CreateIcon["default"]
141
124
  }));
142
125
  };
@@ -151,4 +134,21 @@ ColorBlockButton.story = {
151
134
  defaultValue: false
152
135
  }
153
136
  }
154
- };
137
+ };
138
+
139
+ var FilterButton = function FilterButton() {
140
+ return (0, _react2.jsx)(_index.Box, {
141
+ p: "xx",
142
+ isRow: true,
143
+ gap: "md"
144
+ }, (0, _react2.jsx)(_index.SearchField, {
145
+ "aria-label": "search items"
146
+ }), (0, _react2.jsx)(_index.Button, {
147
+ variant: "filter",
148
+ "aria-label": "filter button"
149
+ }, (0, _react2.jsx)(_index.Icon, {
150
+ icon: _FilterIcon["default"]
151
+ })));
152
+ };
153
+
154
+ exports.FilterButton = FilterButton;
@@ -313,9 +313,11 @@ EnvironmentBreadcrumb.propTypes = {
313
313
  /** The list of environments. */
314
314
  items: _isIterable.isIterableProp,
315
315
 
316
- /** Filter function to generate a filtered list of nodes.
317
- * (nodes: Iterable<Node>) => Iterable<Node>
318
- * */
316
+ /**
317
+ * Filter function to generate a filtered list of nodes.
318
+ *
319
+ * `(nodes: Iterable<Node>) => Iterable<Node>`
320
+ */
319
321
  itemsFilter: _propTypes["default"].func,
320
322
 
321
323
  /** Callback function that fires when the dropdown is opened. */
@@ -37,7 +37,8 @@ var _react2 = require("@emotion/react");
37
37
  var Link = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
38
38
  var className = props.className,
39
39
  isDisabled = props.isDisabled,
40
- others = (0, _objectWithoutProperties2["default"])(props, ["className", "isDisabled"]);
40
+ onPress = props.onPress,
41
+ others = (0, _objectWithoutProperties2["default"])(props, ["className", "isDisabled", "onPress"]);
41
42
  var linkRef = (0, _react.useRef)();
42
43
  (0, _hooks.usePropWarning)(props, 'disabled', 'isDisabled');
43
44
  /* istanbul ignore next */
@@ -45,8 +45,6 @@ var _grid = require("@react-stately/grid");
45
45
 
46
46
  var _grid2 = require("@react-aria/grid");
47
47
 
48
- var _utils = require("@react-aria/utils");
49
-
50
48
  var _layout = require("@react-stately/layout");
51
49
 
52
50
  var _list = require("@react-stately/list");
@@ -103,12 +101,9 @@ function useListLayout(state) {
103
101
  }
104
102
 
105
103
  var ListView = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
106
- var disabledKeys = props.disabledKeys,
107
- loadingState = props.loadingState,
108
- selectedKeys = props.selectedKeys,
104
+ var loadingState = props.loadingState,
109
105
  onLoadMore = props.onLoadMore,
110
- onSelectionChange = props.onSelectionChange,
111
- selectionMode = props.selectionMode;
106
+ selectionStyle = props.selectionStyle;
112
107
  var isLoading = loadingState === _loadingStates["default"].LOADING_MORE || loadingState === _loadingStates["default"].LOADING;
113
108
 
114
109
  var renderWrapper = function renderWrapper(parent, reusableView) {
@@ -160,11 +155,9 @@ var ListView = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
160
155
  });
161
156
  }, [collection]);
162
157
  var state = (0, _grid.useGridState)(_objectSpread(_objectSpread({}, props), {}, {
163
- disabledKeys: disabledKeys,
164
- selectedKeys: selectedKeys,
165
158
  collection: gridCollection,
166
- selectionMode: selectionMode,
167
- onSelectionChange: onSelectionChange
159
+ focusMode: 'cell',
160
+ selectionBehavior: selectionStyle === 'highlight' ? 'replace' : 'toggle'
168
161
  }));
169
162
  var layout = useListLayout(state);
170
163
  var keyboardDelegate = (0, _react.useMemo)(function () {
@@ -199,7 +192,7 @@ var ListView = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
199
192
  state: state,
200
193
  keyboardDelegate: keyboardDelegate
201
194
  }
202
- }, (0, _react2.jsx)(_virtualizer.Virtualizer, (0, _extends2["default"])({}, (0, _utils.mergeProps)(gridProps), {
195
+ }, (0, _react2.jsx)(_virtualizer.Virtualizer, (0, _extends2["default"])({}, gridProps, {
203
196
  onLoadMore: onLoadMore,
204
197
  ref: listViewRef,
205
198
  focusedKey: focusedKey,
@@ -266,6 +259,9 @@ ListView.propTypes = {
266
259
  /** The type of selection that is allowed in the collection. */
267
260
  selectionMode: _propTypes["default"].oneOf(['none', 'single', 'multiple']),
268
261
 
262
+ /** */
263
+ selectionStyle: _propTypes["default"].oneOf(['highlight', undefined]),
264
+
269
265
  /** Callback function that fires when the selected key changes. */
270
266
  onSelectionChange: _propTypes["default"].func,
271
267
 
@@ -278,7 +274,7 @@ ListView.propTypes = {
278
274
  };
279
275
  ListView.defaultProps = {
280
276
  'aria-label': 'listView',
281
- 'selectionMode': 'single'
277
+ selectionMode: 'single'
282
278
  };
283
279
  var _default = ListView;
284
280
  exports["default"] = _default;
@@ -28,6 +28,8 @@ var _grid = require("@react-aria/grid");
28
28
 
29
29
  var _interactions = require("@react-aria/interactions");
30
30
 
31
+ var _selection = require("@react-aria/selection");
32
+
31
33
  var _ListViewContext = require("../ListView/ListViewContext");
32
34
 
33
35
  var _Box = _interopRequireDefault(require("../Box"));
@@ -40,7 +42,9 @@ var ListViewItem = function ListViewItem(props) {
40
42
  var _context;
41
43
 
42
44
  var item = props.item,
43
- _props$item$props = props.item.props,
45
+ _props$item = props.item,
46
+ key = _props$item.key,
47
+ _props$item$props = _props$item.props,
44
48
  listItemProps = _props$item$props.listItemProps,
45
49
  rowProps = _props$item$props.rowProps,
46
50
  _props$item$props$has = _props$item$props.hasSeparator,
@@ -75,7 +79,7 @@ var ListViewItem = function ListViewItem(props) {
75
79
  }, state, rowRef),
76
80
  raRowProps = _useGridRow.rowProps;
77
81
 
78
- var isSelected = raRowProps['aria-selected'];
82
+ var isSelected = state.selectionManager.isSelected(item.key);
79
83
 
80
84
  var _useGridCell = (0, _grid.useGridCell)({
81
85
  node: cellNode,
@@ -83,7 +87,15 @@ var ListViewItem = function ListViewItem(props) {
83
87
  }, state, cellRef),
84
88
  gridCellProps = _useGridCell.gridCellProps;
85
89
 
86
- var mergedProps = (0, _utils.mergeProps)(gridCellProps, hoverProps, focusWithinProps, focusProps);
90
+ var _useSelectableItem = (0, _selection.useSelectableItem)({
91
+ isDisabled: isDisabled,
92
+ selectionManager: state.selectionManager,
93
+ key: key,
94
+ ref: cellRef
95
+ }),
96
+ selectableItemProps = _useSelectableItem.itemProps;
97
+
98
+ var mergedProps = (0, _utils.mergeProps)(gridCellProps, hoverProps, focusWithinProps, focusProps, selectableItemProps);
87
99
 
88
100
  var _useStatusClasses = (0, _hooks.useStatusClasses)(className, {
89
101
  isHovered: isHovered,
@@ -163,7 +163,7 @@ var DarkVariant = function DarkVariant() {
163
163
  onPress: state.close,
164
164
  "aria-label": "Yes"
165
165
  }, "Yes"), (0, _react2.jsx)(_index.Button, {
166
- variant: "text",
166
+ variant: "link",
167
167
  onPress: state.close,
168
168
  "aria-label": "Cancel"
169
169
  }, "Cancel"))))
@@ -18,8 +18,6 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/e
18
18
 
19
19
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
20
20
 
21
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
22
-
23
21
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
24
22
 
25
23
  var _react = _interopRequireWildcard(require("react"));
@@ -52,14 +50,8 @@ var OverlayPanel = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
52
50
  onClose = _useOverlayPanelState.onClose;
53
51
 
54
52
  var overlayPanelRef = (0, _react.useRef)();
55
-
56
- var _useState = (0, _react.useState)(true),
57
- _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
58
- contain = _useState2[0],
59
- setIsContained = _useState2[1];
60
53
  /* istanbul ignore next */
61
54
 
62
-
63
55
  (0, _react.useImperativeHandle)(ref, function () {
64
56
  return overlayPanelRef.current;
65
57
  });
@@ -73,18 +65,12 @@ var OverlayPanel = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
73
65
  e.stopPropagation();
74
66
 
75
67
  if (e.key === 'Escape') {
76
- setIsContained(false);
68
+ onClose(state, triggerRef, onCloseProp);
77
69
  }
78
70
  };
79
71
 
80
- (0, _react.useEffect)(function () {
81
- if (!contain && onClose) {
82
- onClose(state, triggerRef, onCloseProp);
83
- }
84
- }, [contain]);
85
72
  return (0, _react2.jsx)(_focus.FocusScope, {
86
- autoFocus: true,
87
- contain: contain
73
+ autoFocus: true
88
74
  }, (0, _react2.jsx)(_Box["default"], (0, _extends2["default"])({
89
75
  variant: "overlayPanel.overlayPanel",
90
76
  ref: overlayPanelRef
@@ -79,6 +79,15 @@ test('onClose callback fires when provided', function () {
79
79
 
80
80
  expect(onClose).toHaveBeenCalled();
81
81
  });
82
+ test('custom classname can be passed', function () {
83
+ getComponent({
84
+ className: 'testing-class'
85
+ });
86
+
87
+ var overlayPanel = _testWrapper.screen.getByTestId(testId);
88
+
89
+ expect(overlayPanel).toHaveClass('testing-class');
90
+ });
82
91
  test('neither callback fires when not provided', function () {
83
92
  var onClose = jest.fn();
84
93
  getComponent({
@@ -137,4 +146,39 @@ test('triggerRef.current.focus() fires when provided', function () {
137
146
  });
138
147
 
139
148
  expect(focusFunction).toHaveBeenCalled();
149
+ });
150
+ test('triggerRef.current.focus() does not fire when key other than esc is pressed', function () {
151
+ var onClose = jest.fn();
152
+ var focusFunction = jest.fn();
153
+ var state = {
154
+ close: onClose
155
+ };
156
+ var triggerRef = {
157
+ current: {
158
+ focus: focusFunction
159
+ }
160
+ };
161
+ getComponent({
162
+ state: state,
163
+ children: (0, _react2.jsx)("div", null, "Test"),
164
+ triggerRef: triggerRef
165
+ });
166
+
167
+ var overlayPanel = _testWrapper.screen.getByTestId(testId);
168
+
169
+ _testWrapper.fireEvent.keyDown(overlayPanel, {
170
+ key: 'KeyA',
171
+ code: 'KeyA',
172
+ keyCode: 65,
173
+ charCode: 65
174
+ });
175
+
176
+ _testWrapper.fireEvent.keyUp(overlayPanel, {
177
+ key: 'KeyA',
178
+ code: 'KeyA',
179
+ keyCode: 65,
180
+ charCode: 65
181
+ });
182
+
183
+ expect(focusFunction).not.toHaveBeenCalled();
140
184
  });