@pingux/astro 2.3.0-alpha.3 → 2.3.0-alpha.5
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.
- package/lib/cjs/components/CollapsiblePanel/CollapsiblePanel.js +1 -1
- package/lib/cjs/components/EnvironmentBreadcrumb/EnvironmentalBreadcrumb.styles.js +0 -3
- package/lib/cjs/components/ListView/ListView.js +6 -2
- package/lib/cjs/components/ListView/ListView.test.js +21 -0
- package/lib/cjs/components/ListViewItem/ListViewItem.js +15 -4
- package/lib/components/CollapsiblePanel/CollapsiblePanel.js +1 -1
- package/lib/components/EnvironmentBreadcrumb/EnvironmentalBreadcrumb.styles.js +0 -3
- package/lib/components/ListView/ListView.js +6 -2
- package/lib/components/ListView/ListView.test.js +21 -0
- package/lib/components/ListViewItem/ListViewItem.js +15 -2
- package/package.json +1 -1
@@ -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:
|
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
|
5
|
-
var _Object$
|
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,
|
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:
|
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,
|
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;
|