@pingux/astro 1.5.0-alpha.0 → 1.5.0

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/CHANGELOG.md CHANGED
@@ -3,6 +3,23 @@
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
+ # [1.5.0](https://gitlab.corp.pingidentity.com/ux/pingux/compare/@pingux/astro@1.4.1...@pingux/astro@1.5.0) (2022-03-22)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * [UIP-5282] Code View discrepancies ([9e483b1](https://gitlab.corp.pingidentity.com/ux/pingux/commit/9e483b1078cc47a21c40fce1d256230dc6d57d65))
12
+
13
+
14
+ ### Features
15
+
16
+ * [UIP-5162] Add MultiselectFilter component ([b624104](https://gitlab.corp.pingidentity.com/ux/pingux/commit/b624104fe17352d7975498378bc605562698916a))
17
+ * [UIP-5163] Tab with Popover menu ([2334558](https://gitlab.corp.pingidentity.com/ux/pingux/commit/23345584dfd0bcc40700cb9925fa908002388de2))
18
+
19
+
20
+
21
+
22
+
6
23
  ## [1.4.1](https://gitlab.corp.pingidentity.com/ux/pingux/compare/@pingux/astro@1.4.0...@pingux/astro@1.4.1) (2022-03-18)
7
24
 
8
25
  **Note:** Version bump only for package @pingux/astro
@@ -140,7 +140,7 @@ var CodeView = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
140
140
  }
141
141
 
142
142
  return (0, _react2.jsx)(_.CopyText, {
143
- mode: "nonClickableContent",
143
+ mode: "link",
144
144
  textToCopy: children,
145
145
  tooltipProps: {
146
146
  offset: 15
@@ -57,8 +57,21 @@ var textValue = "\nexport const Default = args => (\n <>\n <Text sx={{ fontW
57
57
  var getComponent = function getComponent() {
58
58
  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
59
59
  return (0, _testWrapper.render)((0, _react2.jsx)(_.CodeView, (0, _extends2["default"])({}, defaultProps, props), textValue));
60
- }; // Need to be added to each test file to test accessibility using axe.
60
+ };
61
61
 
62
+ beforeEach(function () {
63
+ var mockClipboard = {
64
+ writeText: jest.fn()
65
+ };
66
+ global.navigator.clipboard = mockClipboard;
67
+ global.document.execCommand = jest.fn();
68
+ global.document.execCommand.mockReturnValue(true);
69
+ });
70
+ afterEach(function () {
71
+ jest.resetAllMocks();
72
+ global.navigator.clipboard = originalClipboard;
73
+ global.document.execCommand = originalExecCommand;
74
+ }); // Need to be added to each test file to test accessibility using axe.
62
75
 
63
76
  (0, _testAxe["default"])(getComponent);
64
77
  test('renders component in the default state', function () {
@@ -69,29 +82,22 @@ test('renders component in the default state', function () {
69
82
  expect(container).toBeInstanceOf(HTMLDivElement);
70
83
  expect(container).toBeInTheDocument();
71
84
  });
72
- test('tooltip renders on hover', function () {
85
+ test('copy button is hovered and renders tooltip via mouse', function () {
73
86
  getComponent();
74
87
 
75
- var container = _testWrapper.screen.getByTestId(testId);
88
+ var copyBtn = _testWrapper.screen.getByLabelText('copy');
76
89
 
77
- _testWrapper.fireEvent.mouseMove(container);
90
+ expect(copyBtn).not.toHaveFocus();
78
91
 
79
- _testWrapper.fireEvent.mouseEnter(container);
92
+ _userEvent["default"].hover(copyBtn);
80
93
 
94
+ expect(copyBtn).toHaveClass('is-hovered');
81
95
  expect(_testWrapper.screen.queryByRole('tooltip')).toBeInTheDocument();
82
96
  expect(_testWrapper.screen.queryByRole('tooltip')).toHaveTextContent('Copy to clipboard');
83
97
  });
84
- test('content and copy button are focused via keyboard', function () {
98
+ test('copy button is focused and renders tooltip via keyboard', function () {
85
99
  getComponent();
86
100
 
87
- var container = _testWrapper.screen.getByTestId(testId);
88
-
89
- expect(container).not.toHaveFocus();
90
-
91
- _userEvent["default"].tab();
92
-
93
- expect(container).toHaveFocus();
94
-
95
101
  var copyBtn = _testWrapper.screen.getByLabelText('copy');
96
102
 
97
103
  expect(copyBtn).not.toHaveFocus();
@@ -100,6 +106,8 @@ test('content and copy button are focused via keyboard', function () {
100
106
 
101
107
  expect(copyBtn).toHaveFocus();
102
108
  expect(copyBtn).toHaveClass('is-focused');
109
+ expect(_testWrapper.screen.queryByRole('tooltip')).toBeInTheDocument();
110
+ expect(_testWrapper.screen.queryByRole('tooltip')).toHaveTextContent('Copy to clipboard');
103
111
  });
104
112
  test('doesn\'t render copy button and tooltip with prop hasNoCopyButton', function () {
105
113
  getComponent({
@@ -126,19 +134,6 @@ test('renders line numbers with prop hasLineNumbers', function () {
126
134
  expect(_testWrapper.screen.queryByText('1')).toBeInTheDocument();
127
135
  expect(_testWrapper.screen.queryByText(linesLength)).toBeInTheDocument();
128
136
  });
129
- beforeEach(function () {
130
- var mockClipboard = {
131
- writeText: jest.fn()
132
- };
133
- global.navigator.clipboard = mockClipboard;
134
- global.document.execCommand = jest.fn();
135
- global.document.execCommand.mockReturnValue(true);
136
- });
137
- afterEach(function () {
138
- jest.resetAllMocks();
139
- global.navigator.clipboard = originalClipboard;
140
- global.document.execCommand = originalExecCommand;
141
- });
142
137
  test('click on copy button copies data to the clipboard', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
143
138
  var button;
144
139
  return _regenerator["default"].wrap(function _callee2$(_context2) {
@@ -129,7 +129,7 @@ var CopyText = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
129
129
  ref: ref,
130
130
  isRow: true,
131
131
  variant: "boxes.copy"
132
- }, others), content, (0, _react2.jsx)(TooltipWrapper, {
132
+ }, wrapperProps, others), content, (0, _react2.jsx)(TooltipWrapper, {
133
133
  isOpen: isTooltipOpen,
134
134
  tooltip: tooltip
135
135
  }, (0, _react2.jsx)(_CopyButton["default"], (0, _extends2["default"])({
@@ -83,7 +83,8 @@ var PopoverMenu = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
83
83
  isDefaultOpen = props.isDefaultOpen,
84
84
  isNotFlippable = props.isNotFlippable,
85
85
  isNotClosedOnSelect = props.isNotClosedOnSelect,
86
- hasNoArrow = props.hasNoArrow;
86
+ hasNoArrow = props.hasNoArrow,
87
+ isContainFocus = props.isContainFocus;
87
88
 
88
89
  var _React$Children$toArr = _react["default"].Children.toArray(children),
89
90
  _React$Children$toArr2 = (0, _slicedToArray2["default"])(_React$Children$toArr, 2),
@@ -124,7 +125,8 @@ var PopoverMenu = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
124
125
  });
125
126
 
126
127
  var contents = (0, _react2.jsx)(_focus.FocusScope, {
127
- restoreFocus: true
128
+ restoreFocus: true,
129
+ contain: isContainFocus
128
130
  }, (0, _react2.jsx)(_overlays.DismissButton, {
129
131
  onDismiss: state.close
130
132
  }), menu, (0, _react2.jsx)(_overlays.DismissButton, {
@@ -169,6 +171,9 @@ PopoverMenu.propTypes = {
169
171
  /** Whether the PopoverMenu hides the arrow. */
170
172
  hasNoArrow: _propTypes["default"].bool,
171
173
 
174
+ /** Whether the PopoverMenu contains focus inside the scope. */
175
+ isContainFocus: _propTypes["default"].bool,
176
+
172
177
  /**
173
178
  * Handler that is called when the overlay's open state changes.
174
179
  *
@@ -10,7 +10,7 @@ _Object$defineProperty(exports, "__esModule", {
10
10
  value: true
11
11
  });
12
12
 
13
- exports["default"] = exports.CollectionTab = void 0;
13
+ exports["default"] = exports.TabLine = exports.CollectionTab = void 0;
14
14
 
15
15
  var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
16
16
 
@@ -30,19 +30,15 @@ var _utils = require("@react-aria/utils");
30
30
 
31
31
  var _collections = require("@react-stately/collections");
32
32
 
33
- var _Box = _interopRequireDefault(require("../Box"));
34
-
35
33
  var _Tabs = require("../Tabs");
36
34
 
37
- var _Text = _interopRequireDefault(require("../Text"));
38
-
39
35
  var _hooks = require("../../hooks");
40
36
 
41
37
  var _orientation = _interopRequireDefault(require("../../utils/devUtils/constants/orientation"));
42
38
 
43
- var _TooltipTrigger = _interopRequireWildcard(require("../TooltipTrigger"));
39
+ var _TabPicker = _interopRequireDefault(require("../TabPicker"));
44
40
 
45
- var _Button = _interopRequireDefault(require("../Button"));
41
+ var _ = require("../..");
46
42
 
47
43
  var _react2 = require("@emotion/react");
48
44
 
@@ -101,24 +97,34 @@ var CollectionTab = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
101
97
  }, state, tabRef),
102
98
  tabProps = _useTab.tabProps;
103
99
 
104
- var tab = (0, _react2.jsx)(_Box["default"], {
100
+ var tab = (0, _react2.jsx)(_.Box, {
105
101
  isRow: true
106
- }, slots === null || slots === void 0 ? void 0 : slots.beforeTab, (0, _react2.jsx)(_Box["default"], (0, _extends2["default"])({
102
+ }, slots === null || slots === void 0 ? void 0 : slots.beforeTab, (0, _react2.jsx)(_.Box, (0, _extends2["default"])({
107
103
  className: classNames,
108
104
  variant: "tab"
109
105
  }, (0, _utils.mergeProps)(focusProps, hoverProps, tabProps), otherItemProps, {
110
106
  ref: tabRef,
111
107
  title: titleAttr || undefined
112
- }), icon, (0, _react2.jsx)(_Text["default"], (0, _extends2["default"])({
108
+ }), icon, (0, _react2.jsx)(_.Text, (0, _extends2["default"])({
113
109
  variant: "tabLabel"
114
110
  }, tabLabelProps), rendered), isSelected && !isDisabled && (0, _react2.jsx)(TabLine, tabLineProps)), slots === null || slots === void 0 ? void 0 : slots.afterTab);
115
111
 
112
+ if (mode === 'list' && itemProps.list) {
113
+ return (0, _react2.jsx)(_TabPicker["default"], (0, _extends2["default"])({
114
+ ref: tabRef,
115
+ className: classNames,
116
+ items: itemProps.list,
117
+ state: state,
118
+ item: item
119
+ }, (0, _utils.mergeProps)(focusProps, hoverProps, tabProps), otherItemProps));
120
+ }
121
+
116
122
  if (mode === 'tooltip') {
117
- return (0, _react2.jsx)(_react["default"].Fragment, null, separator, (0, _react2.jsx)(_TooltipTrigger["default"], (0, _extends2["default"])({}, tooltipTriggerProps, {
123
+ return (0, _react2.jsx)(_react["default"].Fragment, null, separator, (0, _react2.jsx)(_.TooltipTrigger, (0, _extends2["default"])({}, tooltipTriggerProps, {
118
124
  isOpen: isHovered || isFocusVisible
119
- }), (0, _react2.jsx)(_Button["default"], {
125
+ }), (0, _react2.jsx)(_.Button, {
120
126
  variant: "quiet"
121
- }, tab), (0, _react2.jsx)(_TooltipTrigger.Tooltip, null, itemProps.textValue || itemProps.title)));
127
+ }, tab), (0, _react2.jsx)(_.Tooltip, null, itemProps.textValue || itemProps.title)));
122
128
  }
123
129
 
124
130
  return tab;
@@ -133,7 +139,7 @@ CollectionTab.propTypes = {
133
139
  rendered: _propTypes["default"].node,
134
140
  tabLineProps: _propTypes["default"].shape({})
135
141
  }),
136
- mode: _propTypes["default"].oneOf(['default', 'tooltip']),
142
+ mode: _propTypes["default"].oneOf(['default', 'tooltip', 'list']),
137
143
  orientation: _propTypes["default"].oneOf(['horizontal', 'vertical']),
138
144
  tooltipTriggerProps: _propTypes["default"].shape({}),
139
145
  slots: _propTypes["default"].shape({
@@ -143,12 +149,13 @@ CollectionTab.propTypes = {
143
149
  };
144
150
 
145
151
  var TabLine = function TabLine(props) {
146
- return (0, _react2.jsx)(_Box["default"], (0, _extends2["default"])({
152
+ return (0, _react2.jsx)(_.Box, (0, _extends2["default"])({
147
153
  role: "presentation",
148
154
  variant: "tabLine"
149
155
  }, props));
150
156
  }; // Export Item as default Tab for simplicity, convert to CollectionTab within Tabs component
151
157
 
152
158
 
159
+ exports.TabLine = TabLine;
153
160
  var _default = _collections.Item;
154
161
  exports["default"] = _default;
@@ -0,0 +1,239 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime-corejs3/helpers/interopRequireWildcard");
4
+
5
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
6
+
7
+ var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
8
+
9
+ _Object$defineProperty(exports, "__esModule", {
10
+ value: true
11
+ });
12
+
13
+ exports["default"] = void 0;
14
+
15
+ var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
16
+
17
+ var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
18
+
19
+ var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find"));
20
+
21
+ var _findIndex = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find-index"));
22
+
23
+ var _from = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/from"));
24
+
25
+ var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
26
+
27
+ var _some = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/some"));
28
+
29
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
30
+
31
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
32
+
33
+ var _react = _interopRequireWildcard(require("react"));
34
+
35
+ var _propTypes = _interopRequireDefault(require("prop-types"));
36
+
37
+ var _collections = require("@react-stately/collections");
38
+
39
+ var _ArrowDropUpIcon = _interopRequireDefault(require("mdi-react/ArrowDropUpIcon"));
40
+
41
+ var _ArrowDropDownIcon = _interopRequireDefault(require("mdi-react/ArrowDropDownIcon"));
42
+
43
+ var _hooks = require("../../hooks");
44
+
45
+ var _ = require("../..");
46
+
47
+ var _Tab = require("../Tab");
48
+
49
+ var _react2 = require("@emotion/react");
50
+
51
+ /* istanbul ignore next */
52
+ var TabPicker = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
53
+ var className = _ref.className,
54
+ items = _ref.items,
55
+ state = _ref.state,
56
+ item = _ref.item,
57
+ others = (0, _objectWithoutProperties2["default"])(_ref, ["className", "items", "state", "item"]);
58
+
59
+ var _useState = (0, _react.useState)(false),
60
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
61
+ isOpen = _useState2[0],
62
+ setIsOpen = _useState2[1];
63
+
64
+ var _useState3 = (0, _react.useState)(state.selectedKey),
65
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
66
+ selectedItem = _useState4[0],
67
+ setSelectedItem = _useState4[1];
68
+
69
+ var selectionManager = state.selectionManager;
70
+
71
+ var _useState5 = (0, _react.useState)(selectionManager.focusedKey),
72
+ _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
73
+ focusedItem = _useState6[0],
74
+ setFocusedItem = _useState6[1];
75
+
76
+ var isTabFocused = selectionManager.focusedKey === item.key;
77
+ var isTabSelected = state.selectedKey === item.key;
78
+ var isListItemFocused = (0, _some["default"])(items).call(items, function (el) {
79
+ return el.key === selectionManager.focusedKey;
80
+ });
81
+ var isListItemSelected = (0, _some["default"])(items).call(items, function (el) {
82
+ return el.key === state.selectedKey;
83
+ });
84
+
85
+ var _useMemo = (0, _react.useMemo)(function () {
86
+ var _context, _tabs$prevIndex, _tabs$nextIndex;
87
+
88
+ var tabs = (0, _filter["default"])(_context = (0, _from["default"])(state.collection)).call(_context, function (tab) {
89
+ var _tab$value;
90
+
91
+ return !(tab === null || tab === void 0 ? void 0 : (_tab$value = tab.value) === null || _tab$value === void 0 ? void 0 : _tab$value.isListItem);
92
+ });
93
+ var prevIndex = (0, _findIndex["default"])(tabs).call(tabs, function (tab) {
94
+ return tab.key === item.key;
95
+ }) - 1;
96
+ var nextIndex = (0, _findIndex["default"])(tabs).call(tabs, function (tab) {
97
+ return tab.key === item.key;
98
+ }) + 1;
99
+ return {
100
+ prevKey: ((_tabs$prevIndex = tabs[prevIndex]) === null || _tabs$prevIndex === void 0 ? void 0 : _tabs$prevIndex.key) || tabs[tabs.length].key,
101
+ nextKey: ((_tabs$nextIndex = tabs[nextIndex]) === null || _tabs$nextIndex === void 0 ? void 0 : _tabs$nextIndex.key) || tabs[0].key
102
+ };
103
+ }, []),
104
+ prevKey = _useMemo.prevKey,
105
+ nextKey = _useMemo.nextKey;
106
+
107
+ var _useStatusClasses = (0, _hooks.useStatusClasses)(className, {
108
+ isSelected: isListItemSelected
109
+ }),
110
+ classNames = _useStatusClasses.classNames;
111
+
112
+ var menuRef = (0, _react.useRef)();
113
+
114
+ var handleSelectedItem = function handleSelectedItem(currentItem) {
115
+ state.setSelectedKey(currentItem);
116
+ setFocusedItem(currentItem);
117
+ };
118
+
119
+ (0, _react.useEffect)(function () {
120
+ if (selectedItem) {
121
+ handleSelectedItem(selectedItem);
122
+ }
123
+ }, [selectedItem]);
124
+ (0, _react.useEffect)(function () {
125
+ if (focusedItem) {
126
+ selectionManager.setFocusedKey(focusedItem);
127
+ }
128
+ }, [focusedItem]);
129
+ (0, _react.useEffect)(function () {
130
+ if (isOpen && (isTabFocused || isListItemSelected) && menuRef.current) {
131
+ if (focusedItem) {
132
+ var _context2;
133
+
134
+ (0, _find["default"])(_context2 = (0, _from["default"])(menuRef.current.children)).call(_context2, function (el) {
135
+ return el.dataset.key === focusedItem;
136
+ }).focus();
137
+ } else {
138
+ menuRef.current.firstChild.focus();
139
+ }
140
+ }
141
+
142
+ if (!isOpen && isTabSelected && !selectedItem) {
143
+ setSelectedItem(selectionManager.focusedKey);
144
+ }
145
+ }, [isOpen]);
146
+ (0, _react.useEffect)(function () {
147
+ if (isOpen && isListItemFocused) {
148
+ setFocusedItem(selectionManager.focusedKey);
149
+ } else if (!isOpen && isListItemFocused) {
150
+ selectionManager.setFocusedKey(item.key);
151
+ }
152
+ }, [selectionManager.focusedKey]);
153
+ (0, _react.useEffect)(function () {
154
+ if (isTabSelected || isTabFocused) {
155
+ if (selectedItem) {
156
+ handleSelectedItem(selectedItem);
157
+ } else if (isListItemSelected && !selectedItem) {
158
+ setSelectedItem(state.selectedKey);
159
+ } else {
160
+ setFocusedItem(items[0].key);
161
+ }
162
+ } else if (!isListItemSelected && !isListItemFocused) {
163
+ setIsOpen(false);
164
+ setSelectedItem(null);
165
+ setFocusedItem(null);
166
+ }
167
+ }, [isTabSelected, isListItemSelected]);
168
+
169
+ var handleKeyNavigation = function handleKeyNavigation(e) {
170
+ switch (e.key) {
171
+ case 'ArrowRight':
172
+ {
173
+ selectionManager.setFocusedKey(nextKey);
174
+ break;
175
+ }
176
+
177
+ case 'ArrowLeft':
178
+ {
179
+ selectionManager.setFocusedKey(prevKey);
180
+ break;
181
+ }
182
+
183
+ default:
184
+ break;
185
+ }
186
+ };
187
+
188
+ var tabProps = others;
189
+ delete tabProps.onPointerDown;
190
+ delete tabProps.onKeyDown;
191
+ return (0, _react2.jsx)(_.PopoverMenu, {
192
+ onOpenChange: setIsOpen,
193
+ isOpen: isOpen,
194
+ isContainFocus: true
195
+ }, (0, _react2.jsx)(_.Button, {
196
+ className: classNames,
197
+ variant: "menuTab",
198
+ onKeyDown: handleKeyNavigation
199
+ }, (0, _react2.jsx)(_.Box, (0, _extends2["default"])({
200
+ className: classNames,
201
+ variant: "tab",
202
+ ref: ref
203
+ }, tabProps), (0, _react2.jsx)(_.Text, {
204
+ variant: "tabLabel"
205
+ }, item.props.name), selectedItem && (0, _react2.jsx)(_Tab.TabLine, null)), (0, _react2.jsx)(_.Icon, {
206
+ icon: isOpen ? _ArrowDropUpIcon["default"] : _ArrowDropDownIcon["default"]
207
+ })), (0, _react2.jsx)(_.Menu, {
208
+ onAction: setSelectedItem,
209
+ selectionMode: "single",
210
+ selectedKeys: [selectionManager.focusedKey],
211
+ ref: menuRef
212
+ }, (0, _map["default"])(items).call(items, function (tab) {
213
+ return (0, _react2.jsx)(_collections.Item, {
214
+ key: tab.key
215
+ }, tab.name);
216
+ })));
217
+ });
218
+ TabPicker.propTypes = {
219
+ item: _propTypes["default"].shape({
220
+ key: _propTypes["default"].string,
221
+ props: _propTypes["default"].shape({
222
+ name: _propTypes["default"].string
223
+ })
224
+ }),
225
+ items: _propTypes["default"].arrayOf(_propTypes["default"].shape({
226
+ key: _propTypes["default"].string
227
+ })),
228
+ state: _propTypes["default"].shape({
229
+ collection: _propTypes["default"].shape({}),
230
+ selectedKey: _propTypes["default"].string,
231
+ setSelectedKey: _propTypes["default"]["function"],
232
+ selectionManager: _propTypes["default"].shape({
233
+ focusedKey: _propTypes["default"].string,
234
+ setFocusedKey: _propTypes["default"]["function"]
235
+ })
236
+ })
237
+ };
238
+ var _default = TabPicker;
239
+ exports["default"] = _default;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
+
5
+ var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
6
+
7
+ _Object$defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+
11
+ _Object$defineProperty(exports, "default", {
12
+ enumerable: true,
13
+ get: function get() {
14
+ return _TabPicker["default"];
15
+ }
16
+ });
17
+
18
+ var _TabPicker = _interopRequireDefault(require("./TabPicker"));
@@ -18,12 +18,8 @@ var _defineProperties = _interopRequireDefault(require("@babel/runtime-corejs3/c
18
18
 
19
19
  var _getOwnPropertyDescriptors = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors"));
20
20
 
21
- var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each"));
22
-
23
21
  var _getOwnPropertyDescriptor = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor"));
24
22
 
25
- var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
26
-
27
23
  var _getOwnPropertySymbols = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols"));
28
24
 
29
25
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
@@ -32,10 +28,16 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/e
32
28
 
33
29
  var _from = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/from"));
34
30
 
35
- var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
31
+ var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
36
32
 
37
33
  var _defineProperty3 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
38
34
 
35
+ var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
36
+
37
+ var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
38
+
39
+ var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each"));
40
+
39
41
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
40
42
 
41
43
  var _react = _interopRequireWildcard(require("react"));
@@ -58,22 +60,23 @@ var _react2 = require("@emotion/react");
58
60
 
59
61
  function ownKeys(object, enumerableOnly) { var keys = (0, _keys["default"])(object); if (_getOwnPropertySymbols["default"]) { var symbols = (0, _getOwnPropertySymbols["default"])(object); if (enumerableOnly) symbols = (0, _filter["default"])(symbols).call(symbols, function (sym) { return (0, _getOwnPropertyDescriptor["default"])(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
60
62
 
61
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context2; (0, _forEach["default"])(_context2 = ownKeys(Object(source), true)).call(_context2, function (key) { (0, _defineProperty3["default"])(target, key, source[key]); }); } else if (_getOwnPropertyDescriptors["default"]) { (0, _defineProperties["default"])(target, (0, _getOwnPropertyDescriptors["default"])(source)); } else { var _context3; (0, _forEach["default"])(_context3 = ownKeys(Object(source))).call(_context3, function (key) { (0, _defineProperty2["default"])(target, key, (0, _getOwnPropertyDescriptor["default"])(source, key)); }); } } return target; }
63
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context6; (0, _forEach["default"])(_context6 = ownKeys(Object(source), true)).call(_context6, function (key) { (0, _defineProperty3["default"])(target, key, source[key]); }); } else if (_getOwnPropertyDescriptors["default"]) { (0, _defineProperties["default"])(target, (0, _getOwnPropertyDescriptors["default"])(source)); } else { var _context7; (0, _forEach["default"])(_context7 = ownKeys(Object(source))).call(_context7, function (key) { (0, _defineProperty2["default"])(target, key, (0, _getOwnPropertyDescriptor["default"])(source, key)); }); } } return target; }
62
64
 
63
65
  var TabsContext = /*#__PURE__*/_react["default"].createContext({});
64
66
 
65
67
  exports.TabsContext = TabsContext;
66
68
  var Tabs = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
67
- var _context;
69
+ var _context4, _context5;
68
70
 
69
71
  var children = props.children,
70
72
  isDisabled = props.isDisabled,
73
+ items = props.items,
71
74
  onSelectionChange = props.onSelectionChange,
72
75
  orientation = props.orientation,
73
76
  mode = props.mode,
74
77
  tabListProps = props.tabListProps,
75
78
  tabPanelProps = props.tabPanelProps,
76
- others = (0, _objectWithoutProperties2["default"])(props, ["children", "isDisabled", "onSelectionChange", "orientation", "mode", "tabListProps", "tabPanelProps"]);
79
+ others = (0, _objectWithoutProperties2["default"])(props, ["children", "isDisabled", "items", "onSelectionChange", "orientation", "mode", "tabListProps", "tabPanelProps"]);
77
80
  var tabListRef = (0, _react.useRef)();
78
81
  (0, _hooks.usePropWarning)(props, 'disabled', 'isDisabled');
79
82
  /* istanbul ignore next */
@@ -87,8 +90,30 @@ var Tabs = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
87
90
  (0, _react.useImperativeHandle)(ref, function () {
88
91
  return tabPanelRef.current;
89
92
  });
93
+ var allItems = [];
94
+
95
+ if (mode === 'list') {
96
+ (0, _forEach["default"])(items).call(items, function (item) {
97
+ var _context;
98
+
99
+ allItems = (0, _concat["default"])(_context = []).call(_context, allItems, [item]);
100
+
101
+ if (item.list) {
102
+ var _context2, _context3;
103
+
104
+ var list = (0, _map["default"])(_context2 = item.list).call(_context2, function (el) {
105
+ return _objectSpread(_objectSpread({}, el), {}, {
106
+ isListItem: true
107
+ });
108
+ });
109
+ allItems = (0, _concat["default"])(_context3 = []).call(_context3, allItems, list);
110
+ }
111
+ });
112
+ }
113
+
90
114
  var state = (0, _tabs2.useTabListState)(_objectSpread(_objectSpread({}, props), {}, {
91
- onSelectionChange: onSelectionChange
115
+ onSelectionChange: onSelectionChange,
116
+ items: mode === 'list' ? allItems : items
92
117
  }));
93
118
 
94
119
  var _useTabList = (0, _tabs.useTabList)(props, state, tabListRef),
@@ -106,7 +131,11 @@ var Tabs = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
106
131
  isRow: orientation === _orientation["default"].HORIZONTAL
107
132
  }, tabListProps, raTabListProps, {
108
133
  ref: tabListRef
109
- }), (0, _map["default"])(_context = (0, _from["default"])(state.collection)).call(_context, function (item) {
134
+ }), (0, _map["default"])(_context4 = (0, _filter["default"])(_context5 = (0, _from["default"])(state.collection)).call(_context5, function (item) {
135
+ var _item$value;
136
+
137
+ return !(item === null || item === void 0 ? void 0 : (_item$value = item.value) === null || _item$value === void 0 ? void 0 : _item$value.isListItem);
138
+ })).call(_context4, function (item) {
110
139
  var _item$props;
111
140
 
112
141
  return (0, _react2.jsx)(_Tab.CollectionTab, {
@@ -136,7 +165,7 @@ Tabs.propTypes = {
136
165
  orientation: _propTypes["default"].oneOf(['horizontal', 'vertical']),
137
166
 
138
167
  /** Determines the behavior model for the tabs. */
139
- mode: _propTypes["default"].oneOf(['default', 'tooltip']),
168
+ mode: _propTypes["default"].oneOf(['default', 'tooltip', 'list']),
140
169
 
141
170
  /**
142
171
  * *For performance reasons, use this prop instead of Array.map when iteratively rendering Items*.
@@ -154,12 +183,16 @@ Tabs.propTypes = {
154
183
  tabListProps: _propTypes["default"].shape({}),
155
184
 
156
185
  /** Props object that is spread directly into all of the tab panel wrapper elements. */
157
- tabPanelProps: _propTypes["default"].shape({})
186
+ tabPanelProps: _propTypes["default"].shape({}),
187
+
188
+ /** Whether tabs are activated automatically on focus or manually¸ */
189
+ keyboardActivation: _propTypes["default"].oneOf(['automatic', 'manual'])
158
190
  };
159
191
  Tabs.defaultProps = {
160
192
  isDisabled: false,
161
193
  orientation: 'horizontal',
162
- mode: 'default'
194
+ mode: 'default',
195
+ keyboardActivation: 'manual'
163
196
  };
164
197
  Tabs.displayName = 'Tabs';
165
198
  var _default = Tabs;