@pingux/astro 2.3.0-alpha.2 → 2.3.0-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.
@@ -58,7 +58,7 @@ var CollapsiblePanel = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref)
58
58
  className: classNames,
59
59
  "data-testid": "collapsible-panel",
60
60
  ref: ref,
61
- tabIndex: 0,
61
+ tabIndex: -1,
62
62
  variant: "collapsiblePanel.content"
63
63
  }, mergedProps, others), (0, _react2.jsx)(_.Box, {
64
64
  isRow: true,
@@ -97,6 +97,7 @@ var ListView = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
97
97
  hoveredItem = _useState2[0],
98
98
  setHoveredItem = _useState2[1];
99
99
  var isLoading = loadingState === _loadingStates["default"].LOADING_MORE || loadingState === _loadingStates["default"].LOADING;
100
+ var isFocusable = selectionMode !== 'none';
100
101
  var renderWrapper = function renderWrapper(parent, reusableView) {
101
102
  return (0, _react2.jsx)(_virtualizer.VirtualizerItem, {
102
103
  key: reusableView.key,
@@ -157,12 +158,15 @@ var ListView = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
157
158
  collection: collection,
158
159
  transitionDuration: 0
159
160
  }, others, {
160
- onFocus: onFocus,
161
- onScroll: resetHoverState
161
+ onFocus: isFocusable && onFocus,
162
+ onScroll: resetHoverState,
163
+ tabIndex: isFocusable ? 0 : -1,
164
+ shouldUseVirtualFocus: !isFocusable
162
165
  }), function (type, item) {
163
166
  if (type === 'item') {
164
167
  return (0, _react2.jsx)(_ListViewItem["default"], {
165
168
  isHoverable: isHoverable,
169
+ isFocusable: isFocusable,
166
170
  item: item
167
171
  });
168
172
  }
@@ -347,4 +347,25 @@ test('list view reset hover on item when scroll', function () {
347
347
  }
348
348
  });
349
349
  expect(listItem[0]).not.toHaveClass('is-hovered');
350
+ });
351
+ test('list view item should not receive focus when selectionMode is "none"', function () {
352
+ var onFocus = jest.fn();
353
+ getComponent({
354
+ onFocus: onFocus,
355
+ selectionMode: 'none'
356
+ });
357
+ var options = _testWrapper.screen.getAllByRole('gridcell');
358
+ _userEvent["default"].tab();
359
+ expect(onFocus).not.toHaveBeenCalled();
360
+ expect(options[0]).not.toHaveClass('is-focused');
361
+ });
362
+ test('list view item should receive focus when selectionMode is default or a value other than "none"', function () {
363
+ var onFocus = jest.fn();
364
+ getComponent({
365
+ onFocus: onFocus
366
+ });
367
+ var options = _testWrapper.screen.getAllByRole('gridcell');
368
+ _userEvent["default"].tab();
369
+ expect(onFocus).toHaveBeenCalled();
370
+ expect(options[0]).toHaveClass('is-focused');
350
371
  });
@@ -1,15 +1,22 @@
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;
12
18
  var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
19
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
13
20
  var _react = _interopRequireWildcard(require("react"));
14
21
  var _reactAria = require("react-aria");
15
22
  var _interactions = require("@react-aria/interactions");
@@ -21,6 +28,8 @@ var _ListViewContext = require("../ListView/ListViewContext");
21
28
  var _react2 = require("@emotion/react");
22
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); }
23
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; }
24
33
  var ListViewItem = function ListViewItem(props) {
25
34
  var item = props.item,
26
35
  _props$item$props = props.item.props,
@@ -30,6 +39,7 @@ var ListViewItem = function ListViewItem(props) {
30
39
  hasSeparator = _props$item$props$has === void 0 ? true : _props$item$props$has,
31
40
  hasInsetSeparator = _props$item$props.hasInsetSeparator,
32
41
  isHoverable = props.isHoverable,
42
+ isFocusable = props.isFocusable,
33
43
  className = props.className;
34
44
  var dataId = item.props['data-id'];
35
45
  var _useContext = (0, _react.useContext)(_ListViewContext.ListViewContext),
@@ -60,7 +70,7 @@ var ListViewItem = function ListViewItem(props) {
60
70
  raRowProps = _useListItem.rowProps,
61
71
  gridCellProps = _useListItem.gridCellProps;
62
72
  var isSelected = state.selectionManager.isSelected(item.key);
63
- var mergedProps = (0, _reactAria.mergeProps)(raRowProps, hoverProps, focusWithinProps, focusProps);
73
+ var mergedProps = (0, _reactAria.mergeProps)(raRowProps, hoverProps, isFocusable ? _objectSpread(_objectSpread({}, focusProps), focusWithinProps) : {});
64
74
  var _useStatusClasses = (0, _hooks.useStatusClasses)(className, {
65
75
  isHovered: isSelectable && isHovered && isHoverable && item.key === state.hover.hoveredItem,
66
76
  isSelected: isSelected,
@@ -100,7 +110,8 @@ ListViewItem.propTypes = {
100
110
  hasInsetSeparator: _propTypes["default"].bool
101
111
  })
102
112
  }),
103
- isHoverable: _propTypes["default"].bool
113
+ isHoverable: _propTypes["default"].bool,
114
+ isFocusable: _propTypes["default"].bool
104
115
  };
105
116
  var _default = ListViewItem;
106
117
  exports["default"] = _default;
@@ -45,7 +45,7 @@ var CollapsiblePanel = /*#__PURE__*/forwardRef(function (props, ref) {
45
45
  className: classNames,
46
46
  "data-testid": "collapsible-panel",
47
47
  ref: ref,
48
- tabIndex: 0,
48
+ tabIndex: -1,
49
49
  variant: "collapsiblePanel.content"
50
50
  }, mergedProps, others), ___EmotionJSX(Box, {
51
51
  isRow: true,
@@ -84,6 +84,7 @@ var ListView = /*#__PURE__*/forwardRef(function (props, ref) {
84
84
  hoveredItem = _useState2[0],
85
85
  setHoveredItem = _useState2[1];
86
86
  var isLoading = loadingState === loadingStates.LOADING_MORE || loadingState === loadingStates.LOADING;
87
+ var isFocusable = selectionMode !== 'none';
87
88
  var renderWrapper = function renderWrapper(parent, reusableView) {
88
89
  return ___EmotionJSX(VirtualizerItem, {
89
90
  key: reusableView.key,
@@ -144,12 +145,15 @@ var ListView = /*#__PURE__*/forwardRef(function (props, ref) {
144
145
  collection: collection,
145
146
  transitionDuration: 0
146
147
  }, others, {
147
- onFocus: onFocus,
148
- onScroll: resetHoverState
148
+ onFocus: isFocusable && onFocus,
149
+ onScroll: resetHoverState,
150
+ tabIndex: isFocusable ? 0 : -1,
151
+ shouldUseVirtualFocus: !isFocusable
149
152
  }), function (type, item) {
150
153
  if (type === 'item') {
151
154
  return ___EmotionJSX(ListViewItem, {
152
155
  isHoverable: isHoverable,
156
+ isFocusable: isFocusable,
153
157
  item: item
154
158
  });
155
159
  }
@@ -344,4 +344,25 @@ test('list view reset hover on item when scroll', function () {
344
344
  }
345
345
  });
346
346
  expect(listItem[0]).not.toHaveClass('is-hovered');
347
+ });
348
+ test('list view item should not receive focus when selectionMode is "none"', function () {
349
+ var onFocus = jest.fn();
350
+ getComponent({
351
+ onFocus: onFocus,
352
+ selectionMode: 'none'
353
+ });
354
+ var options = screen.getAllByRole('gridcell');
355
+ userEvent.tab();
356
+ expect(onFocus).not.toHaveBeenCalled();
357
+ expect(options[0]).not.toHaveClass('is-focused');
358
+ });
359
+ test('list view item should receive focus when selectionMode is default or a value other than "none"', function () {
360
+ var onFocus = jest.fn();
361
+ getComponent({
362
+ onFocus: onFocus
363
+ });
364
+ var options = screen.getAllByRole('gridcell');
365
+ userEvent.tab();
366
+ expect(onFocus).toHaveBeenCalled();
367
+ expect(options[0]).toHaveClass('is-focused');
347
368
  });
@@ -1,4 +1,15 @@
1
+ import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
2
+ import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols";
3
+ import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
4
+ import _Object$getOwnPropertyDescriptor from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor";
5
+ import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each";
6
+ import _Object$getOwnPropertyDescriptors from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors";
7
+ import _Object$defineProperties from "@babel/runtime-corejs3/core-js-stable/object/define-properties";
8
+ import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object/define-property";
1
9
  import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
10
+ import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
11
+ 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; }
12
+ 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) { _defineProperty(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; }
2
13
  import React, { useContext, useRef } from 'react';
3
14
  import { mergeProps, useFocusRing } from 'react-aria';
4
15
  import { useHover } from '@react-aria/interactions';
@@ -17,6 +28,7 @@ var ListViewItem = function ListViewItem(props) {
17
28
  hasSeparator = _props$item$props$has === void 0 ? true : _props$item$props$has,
18
29
  hasInsetSeparator = _props$item$props.hasInsetSeparator,
19
30
  isHoverable = props.isHoverable,
31
+ isFocusable = props.isFocusable,
20
32
  className = props.className;
21
33
  var dataId = item.props['data-id'];
22
34
  var _useContext = useContext(ListViewContext),
@@ -47,7 +59,7 @@ var ListViewItem = function ListViewItem(props) {
47
59
  raRowProps = _useListItem.rowProps,
48
60
  gridCellProps = _useListItem.gridCellProps;
49
61
  var isSelected = state.selectionManager.isSelected(item.key);
50
- var mergedProps = mergeProps(raRowProps, hoverProps, focusWithinProps, focusProps);
62
+ var mergedProps = mergeProps(raRowProps, hoverProps, isFocusable ? _objectSpread(_objectSpread({}, focusProps), focusWithinProps) : {});
51
63
  var _useStatusClasses = useStatusClasses(className, {
52
64
  isHovered: isSelectable && isHovered && isHoverable && item.key === state.hover.hoveredItem,
53
65
  isSelected: isSelected,
@@ -87,6 +99,7 @@ ListViewItem.propTypes = {
87
99
  hasInsetSeparator: PropTypes.bool
88
100
  })
89
101
  }),
90
- isHoverable: PropTypes.bool
102
+ isHoverable: PropTypes.bool,
103
+ isFocusable: PropTypes.bool
91
104
  };
92
105
  export default ListViewItem;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pingux/astro",
3
- "version": "2.3.0-alpha.2",
3
+ "version": "2.3.0-alpha.4",
4
4
  "description": "PingUX themeable React component library",
5
5
  "repository": {
6
6
  "type": "git",