@pingux/astro 2.32.0-alpha.1 → 2.32.0-alpha.11

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 (143) hide show
  1. package/lib/cjs/components/AccordionGroup/AccordionGroup.stories.js +1 -1
  2. package/lib/cjs/components/Badge/Badge.stories.js +1 -1
  3. package/lib/cjs/components/Badge/Convenience/ConvenienceBadges.stories.js +1 -1
  4. package/lib/cjs/components/Bracket/Bracket.stories.js +1 -1
  5. package/lib/cjs/components/Breadcrumbs/Breadcrumbs.stories.js +1 -1
  6. package/lib/cjs/components/Button/Button.stories.d.ts +1 -1
  7. package/lib/cjs/components/Button/Button.stories.js +1 -1
  8. package/lib/cjs/components/Calendar/Calendar.stories.js +1 -1
  9. package/lib/cjs/components/Calendar/Calendar.test.js +9 -32
  10. package/lib/cjs/components/Callout/Callout.stories.js +1 -1
  11. package/lib/cjs/components/Card/Card.stories.js +1 -1
  12. package/lib/cjs/components/CodeView/CodeView.stories.js +1 -1
  13. package/lib/cjs/components/CollapsiblePanel/CollapsiblePanel.stories.js +1 -1
  14. package/lib/cjs/components/CopyText/CopyText.stories.js +1 -1
  15. package/lib/cjs/components/HelpHint/HelpHint.stories.js +1 -1
  16. package/lib/cjs/components/Icon/Icon.stories.js +1 -1
  17. package/lib/cjs/components/IconBadge/IconBadge.stories.js +1 -1
  18. package/lib/cjs/components/IconButton/IconButton.stories.js +1 -1
  19. package/lib/cjs/components/ImageUploadField/ImageUploadField.test.js +47 -14
  20. package/lib/cjs/components/Label/Label.test.js +10 -7
  21. package/lib/cjs/components/Link/Link.stories.js +1 -1
  22. package/lib/cjs/components/Loader/Loader.stories.js +1 -1
  23. package/lib/cjs/components/Menu/Menu.stories.js +1 -1
  24. package/lib/cjs/components/Messages/Messages.js +42 -9
  25. package/lib/cjs/components/Messages/Messages.stories.js +1 -1
  26. package/lib/cjs/components/Messages/Messages.test.js +7 -4
  27. package/lib/cjs/components/Modal/Modal.stories.js +1 -1
  28. package/lib/cjs/components/NavBar/NavBar.stories.js +1 -1
  29. package/lib/cjs/components/OverlayPanel/OverlayPanel.stories.js +3 -17
  30. package/lib/cjs/components/PanelHeader/PanelHeader.stories.js +1 -1
  31. package/lib/cjs/components/PanelHeader/PanelHeader.test.js +7 -3
  32. package/lib/cjs/components/PopoverMenu/PopoverMenu.stories.js +1 -1
  33. package/lib/cjs/components/RequirementsList/RequirementsList.stories.js +1 -1
  34. package/lib/cjs/components/ScrollBox/ScrollBox.stories.js +1 -1
  35. package/lib/cjs/components/Separator/Separator.stories.js +1 -1
  36. package/lib/cjs/components/Stepper/Stepper.stories.js +1 -1
  37. package/lib/cjs/components/TreeView/TreeView.js +99 -11
  38. package/lib/cjs/components/TreeView/TreeView.stories.js +23 -10
  39. package/lib/cjs/components/TreeView/TreeView.styles.js +22 -2
  40. package/lib/cjs/components/TreeView/TreeView.test.js +91 -11
  41. package/lib/cjs/components/TreeView/TreeViewItem.js +112 -14
  42. package/lib/cjs/components/TreeView/TreeViewKeyboardDelegate.js +200 -0
  43. package/lib/cjs/components/TreeView/TreeViewKeyboardDelegate.test.js +511 -0
  44. package/lib/cjs/components/TreeView/TreeViewRow.js +20 -5
  45. package/lib/cjs/components/TreeView/TreeViewSection.js +164 -16
  46. package/lib/cjs/components/TreeView/TreeViewWrapper.js +40 -0
  47. package/lib/cjs/hooks/useComponentToggle/index.d.ts +1 -0
  48. package/lib/cjs/hooks/useComponentToggle/useComponentToggle.d.ts +32 -0
  49. package/lib/cjs/hooks/useComponentToggle/useComponentToggle.js +4 -20
  50. package/lib/cjs/hooks/useComponentToggle/useComponentToggle.test.d.ts +1 -0
  51. package/lib/cjs/hooks/useComponentToggle/useComponentToggle.test.js +8 -9
  52. package/lib/cjs/hooks/useFallbackImage/index.d.ts +1 -0
  53. package/lib/cjs/hooks/useFallbackImage/useFallbackImage.d.ts +10 -0
  54. package/lib/cjs/hooks/useFallbackImage/useFallbackImage.js +1 -2
  55. package/lib/cjs/hooks/useFallbackImage/useFallbackImage.test.d.ts +1 -0
  56. package/lib/cjs/hooks/useFallbackImage/useFallbackImage.test.js +9 -9
  57. package/lib/cjs/hooks/useImageUploadState/index.d.ts +1 -0
  58. package/lib/cjs/hooks/useImageUploadState/useImageUploadState.d.ts +28 -0
  59. package/lib/cjs/hooks/useImageUploadState/useImageUploadState.js +9 -6
  60. package/lib/cjs/hooks/useModalState/index.d.ts +1 -0
  61. package/lib/cjs/hooks/useModalState/useModalState.d.ts +21 -0
  62. package/lib/cjs/hooks/useModalState/useModalState.js +0 -9
  63. package/lib/cjs/hooks/useModalState/useModalState.test.d.ts +1 -0
  64. package/lib/cjs/recipes/AttributeMapping.stories.js +1 -1
  65. package/lib/cjs/recipes/ConditionFilter.stories.js +1 -1
  66. package/lib/cjs/recipes/MaskedValue.stories.js +1 -1
  67. package/lib/cjs/recipes/MultipagePopup.stories.js +1 -1
  68. package/lib/cjs/recipes/OneWayToBidirectionalArrow.stories.js +1 -1
  69. package/lib/cjs/recipes/PanelContent.stories.js +1 -1
  70. package/lib/cjs/recipes/Slider.stories.js +1 -1
  71. package/lib/cjs/recipes/TrialExperienceIndustryButtons.stories.js +1 -1
  72. package/lib/cjs/recipes/TrialExperienceStatusBar.stories.js +1 -1
  73. package/lib/cjs/utils/designUtils/figmaLinks.d.ts +7 -0
  74. package/lib/cjs/utils/testUtils/setupTests.d.ts +4 -0
  75. package/lib/cjs/utils/testUtils/testAxe.d.ts +2 -0
  76. package/lib/cjs/utils/testUtils/testTheme.d.ts +21 -0
  77. package/lib/cjs/utils/testUtils/testWrapper.d.ts +5 -0
  78. package/lib/cjs/utils/testUtils/testWrapper.js +3 -2
  79. package/lib/cjs/utils/testUtils/universalComponentTest.d.ts +5 -0
  80. package/lib/cjs/utils/testUtils/universalComponentTest.js +86 -0
  81. package/lib/components/AccordionGroup/AccordionGroup.stories.js +1 -1
  82. package/lib/components/Badge/Badge.stories.js +1 -1
  83. package/lib/components/Badge/Convenience/ConvenienceBadges.stories.js +1 -1
  84. package/lib/components/Bracket/Bracket.stories.js +1 -1
  85. package/lib/components/Breadcrumbs/Breadcrumbs.stories.js +1 -1
  86. package/lib/components/Button/Button.stories.js +1 -1
  87. package/lib/components/Calendar/Calendar.stories.js +1 -1
  88. package/lib/components/Calendar/Calendar.test.js +9 -32
  89. package/lib/components/Callout/Callout.stories.js +1 -1
  90. package/lib/components/Card/Card.stories.js +1 -1
  91. package/lib/components/CodeView/CodeView.stories.js +1 -1
  92. package/lib/components/CollapsiblePanel/CollapsiblePanel.stories.js +1 -1
  93. package/lib/components/CopyText/CopyText.stories.js +1 -1
  94. package/lib/components/HelpHint/HelpHint.stories.js +1 -1
  95. package/lib/components/Icon/Icon.stories.js +1 -1
  96. package/lib/components/IconBadge/IconBadge.stories.js +1 -1
  97. package/lib/components/IconButton/IconButton.stories.js +1 -1
  98. package/lib/components/ImageUploadField/ImageUploadField.test.js +47 -14
  99. package/lib/components/Label/Label.test.js +8 -5
  100. package/lib/components/Link/Link.stories.js +1 -1
  101. package/lib/components/Loader/Loader.stories.js +1 -1
  102. package/lib/components/Menu/Menu.stories.js +1 -1
  103. package/lib/components/Messages/Messages.js +47 -15
  104. package/lib/components/Messages/Messages.stories.js +1 -1
  105. package/lib/components/Messages/Messages.test.js +7 -4
  106. package/lib/components/Modal/Modal.stories.js +1 -1
  107. package/lib/components/NavBar/NavBar.stories.js +1 -1
  108. package/lib/components/OverlayPanel/OverlayPanel.stories.js +4 -18
  109. package/lib/components/PanelHeader/PanelHeader.stories.js +1 -1
  110. package/lib/components/PanelHeader/PanelHeader.test.js +7 -3
  111. package/lib/components/PopoverMenu/PopoverMenu.stories.js +1 -1
  112. package/lib/components/RequirementsList/RequirementsList.stories.js +1 -1
  113. package/lib/components/ScrollBox/ScrollBox.stories.js +1 -1
  114. package/lib/components/Separator/Separator.stories.js +1 -1
  115. package/lib/components/Stepper/Stepper.stories.js +1 -1
  116. package/lib/components/TreeView/TreeView.js +100 -12
  117. package/lib/components/TreeView/TreeView.stories.js +23 -10
  118. package/lib/components/TreeView/TreeView.styles.js +22 -2
  119. package/lib/components/TreeView/TreeView.test.js +92 -12
  120. package/lib/components/TreeView/TreeViewItem.js +111 -14
  121. package/lib/components/TreeView/TreeViewKeyboardDelegate.js +176 -0
  122. package/lib/components/TreeView/TreeViewKeyboardDelegate.test.js +496 -0
  123. package/lib/components/TreeView/TreeViewRow.js +20 -5
  124. package/lib/components/TreeView/TreeViewSection.js +161 -16
  125. package/lib/components/TreeView/TreeViewWrapper.js +31 -0
  126. package/lib/hooks/useComponentToggle/useComponentToggle.js +4 -21
  127. package/lib/hooks/useComponentToggle/useComponentToggle.test.js +8 -9
  128. package/lib/hooks/useFallbackImage/useFallbackImage.js +1 -2
  129. package/lib/hooks/useFallbackImage/useFallbackImage.test.js +6 -6
  130. package/lib/hooks/useImageUploadState/useImageUploadState.js +9 -6
  131. package/lib/hooks/useModalState/useModalState.js +0 -10
  132. package/lib/recipes/AttributeMapping.stories.js +1 -1
  133. package/lib/recipes/ConditionFilter.stories.js +1 -1
  134. package/lib/recipes/MaskedValue.stories.js +1 -1
  135. package/lib/recipes/MultipagePopup.stories.js +1 -1
  136. package/lib/recipes/OneWayToBidirectionalArrow.stories.js +1 -1
  137. package/lib/recipes/PanelContent.stories.js +1 -1
  138. package/lib/recipes/Slider.stories.js +1 -1
  139. package/lib/recipes/TrialExperienceIndustryButtons.stories.js +1 -1
  140. package/lib/recipes/TrialExperienceStatusBar.stories.js +1 -1
  141. package/lib/utils/testUtils/testWrapper.js +3 -2
  142. package/lib/utils/testUtils/universalComponentTest.js +74 -0
  143. package/package.json +5 -1
@@ -4,9 +4,13 @@ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequ
4
4
  var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
5
5
  var _react = _interopRequireDefault(require("react"));
6
6
  var _reactStately = require("react-stately");
7
+ var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
7
9
  var _index = require("../../index");
8
10
  var _testWrapper = require("../../utils/testUtils/testWrapper");
9
11
  var _TreeView = require("./TreeView");
12
+ var _TreeViewKeyboardDelegate = require("./TreeViewKeyboardDelegate.test");
13
+ var _TreeViewSection = require("./TreeViewSection");
10
14
  var _ = _interopRequireDefault(require("."));
11
15
  var _react2 = require("@emotion/react");
12
16
  var testId = 'test-TreeView';
@@ -43,9 +47,12 @@ var data = [{
43
47
  }, {
44
48
  title: 'Single Item'
45
49
  }];
50
+ var singleData = [{
51
+ title: 'Single Item'
52
+ }];
46
53
  var TreeViewComponent = function TreeViewComponent(props) {
47
54
  var tree = (0, _reactStately.useTreeData)({
48
- initialItems: data,
55
+ initialItems: props.data,
49
56
  getKey: function getKey(item) {
50
57
  return item.title;
51
58
  },
@@ -65,6 +72,9 @@ var TreeViewComponent = function TreeViewComponent(props) {
65
72
  });
66
73
  });
67
74
  };
75
+ TreeViewComponent.propTypes = {
76
+ data: _propTypes["default"].arrayOf(_propTypes["default"].shape({}))
77
+ };
68
78
  var offsetWidth;
69
79
  var offsetHeight;
70
80
  var scrollHeight;
@@ -98,16 +108,20 @@ test('TreeView component does load', function () {
98
108
  expect(element).toBeInTheDocument();
99
109
  });
100
110
  test('Can select an Item using the mouse', function () {
101
- (0, _testWrapper.render)((0, _react2.jsx)(TreeViewComponent, null));
111
+ (0, _testWrapper.render)((0, _react2.jsx)(TreeViewComponent, {
112
+ data: data
113
+ }));
102
114
  var element = _testWrapper.screen.queryByRole('treegrid');
103
115
  expect(element).toBeInTheDocument();
104
116
  var peopleElement = _testWrapper.screen.queryByText('Single Item');
105
117
  expect(peopleElement).not.toHaveClass('is-selected');
106
- _testWrapper.fireEvent.click(peopleElement);
118
+ _userEvent["default"].click(peopleElement);
107
119
  expect(peopleElement).toHaveClass('is-selected');
108
120
  });
109
121
  test('Renders both Sections and Items', function () {
110
- (0, _testWrapper.render)((0, _react2.jsx)(TreeViewComponent, null));
122
+ (0, _testWrapper.render)((0, _react2.jsx)(TreeViewComponent, {
123
+ data: data
124
+ }));
111
125
  var peopleElement = _testWrapper.screen.getByText('Single Item');
112
126
  expect(peopleElement).toBeInTheDocument();
113
127
  var plantElement = _testWrapper.screen.getByText('Other');
@@ -116,7 +130,9 @@ test('Renders both Sections and Items', function () {
116
130
  expect(allListItems).toHaveLength(3);
117
131
  });
118
132
  test('Can expand an Item using the mouse', function () {
119
- (0, _testWrapper.render)((0, _react2.jsx)(TreeViewComponent, null));
133
+ (0, _testWrapper.render)((0, _react2.jsx)(TreeViewComponent, {
134
+ data: data
135
+ }));
120
136
 
121
137
  // The children of collapsed sections will not
122
138
  // be rendered by default.
@@ -125,47 +141,91 @@ test('Can expand an Item using the mouse', function () {
125
141
  // Clicking the dropdown icon, renders the children
126
142
  // of the collapsed section.
127
143
  var buttons = _testWrapper.screen.queryAllByRole('button');
128
- _testWrapper.fireEvent.click(buttons[0]);
144
+ _userEvent["default"].click(buttons[0]);
129
145
  expect(_testWrapper.screen.queryByText(data[0].items[0].title)).toBeInTheDocument();
130
146
  });
131
147
  test('onExpandedChange change prop calls when used', function () {
132
148
  var onPress = jest.fn();
133
149
  (0, _testWrapper.render)((0, _react2.jsx)(TreeViewComponent, {
150
+ data: data,
134
151
  onExpandedChange: onPress
135
152
  }));
136
153
  expect(onPress).not.toHaveBeenCalled();
137
154
  var buttons = _testWrapper.screen.queryAllByRole('button');
138
- _testWrapper.fireEvent.click(buttons[0]);
155
+ _userEvent["default"].click(buttons[0]);
139
156
  expect(onPress).toHaveBeenCalled();
140
157
  });
141
158
  test('disabledKeys prop disables items in the tree -- rendering them unclickable', function () {
142
159
  (0, _testWrapper.render)((0, _react2.jsx)(TreeViewComponent, {
160
+ data: data,
143
161
  disabledKeys: ['Single Item']
144
162
  }));
145
163
  var listItems = _testWrapper.screen.queryAllByRole('treeitem');
146
164
  var thisItem = listItems[2];
147
165
  expect(thisItem).not.toHaveClass('is-selected');
148
166
  expect(thisItem).toHaveAttribute('aria-disabled', 'true');
149
- _testWrapper.fireEvent.mouseDown(thisItem);
150
- _testWrapper.fireEvent.mouseUp(thisItem);
167
+ _userEvent["default"].click(thisItem);
151
168
  expect(thisItem).not.toHaveClass('is-selected');
152
169
  expect(thisItem).toHaveAttribute('aria-selected', 'false');
153
170
  });
154
171
  test('displays correct aria attributes', function () {
155
- (0, _testWrapper.render)((0, _react2.jsx)(TreeViewComponent, null));
172
+ (0, _testWrapper.render)((0, _react2.jsx)(TreeViewComponent, {
173
+ data: data
174
+ }));
156
175
  var listItems = _testWrapper.screen.getAllByRole('treeitem');
157
176
  var lastTreeItem = listItems[2];
158
177
  expect(lastTreeItem).toHaveAttribute('aria-level', '1');
159
178
  expect(lastTreeItem).toHaveAttribute('aria-posinset', '3');
160
179
  expect(lastTreeItem).toHaveAttribute('aria-setsize', '3');
161
180
  var buttons = _testWrapper.screen.queryAllByRole('button');
162
- _testWrapper.fireEvent.click(buttons[1]);
181
+ _userEvent["default"].click(buttons[1]);
163
182
  var expandedItems = _testWrapper.screen.getAllByRole('treeitem');
164
183
  var nestedItem = expandedItems[2];
165
184
  expect(nestedItem).toHaveAttribute('aria-level', '2');
166
185
  expect(nestedItem).toHaveAttribute('aria-posinset', '1');
167
186
  expect(nestedItem).toHaveAttribute('aria-setsize', '1');
168
187
  });
188
+ test('onKeyDown calls passed in prop call back function', function () {
189
+ var callback = jest.fn();
190
+ (0, _testWrapper.render)((0, _react2.jsx)(TreeViewComponent, {
191
+ data: data,
192
+ onKeyDown: callback
193
+ }));
194
+ var listItems = _testWrapper.screen.queryAllByRole('treeitem');
195
+ var thisItem = listItems[0];
196
+ _userEvent["default"].type(thisItem, '{arrowleft}');
197
+ expect(callback).toHaveBeenCalled();
198
+ });
199
+ test('onKeyDown calls passed in prop call back function', function () {
200
+ var callback = jest.fn();
201
+ (0, _testWrapper.render)((0, _react2.jsx)(TreeViewComponent, {
202
+ data: data,
203
+ onKeyDown: callback
204
+ }));
205
+ var listItems = _testWrapper.screen.queryAllByRole('treeitem');
206
+ var thisItem = listItems[2];
207
+ _userEvent["default"].type(thisItem, '{arrowleft}');
208
+ expect(callback).toHaveBeenCalled();
209
+ });
210
+ test('onKeyDown does not call passed in prop call back function', function () {
211
+ var callback = jest.fn();
212
+ (0, _testWrapper.render)((0, _react2.jsx)(TreeViewComponent, {
213
+ data: data
214
+ }));
215
+ var listItems = _testWrapper.screen.queryAllByRole('treeitem');
216
+ var thisItem = listItems[2];
217
+ _userEvent["default"].type(thisItem, '{arrowleft}');
218
+ expect(callback).not.toHaveBeenCalled();
219
+ });
220
+ test('items still render if there is only one provided', function () {
221
+ var callback = jest.fn();
222
+ (0, _testWrapper.render)((0, _react2.jsx)(TreeViewComponent, {
223
+ data: singleData,
224
+ onKeyDown: callback
225
+ }));
226
+ var listItem = _testWrapper.screen.queryByText('Single Item');
227
+ expect(listItem).toBeInTheDocument();
228
+ });
169
229
  var firstJSX = (0, _react2.jsx)("p", null, "first");
170
230
  var secondJSX = (0, _react2.jsx)("p", null, "second");
171
231
  test('Section or Item Render renders first item if condition is true', function () {
@@ -179,4 +239,24 @@ test('Section or Item Render renders second item if condition is false', functio
179
239
  var thisItem = _testWrapper.screen.getByText('second');
180
240
  expect(thisItem).toBeInTheDocument();
181
241
  expect(_testWrapper.screen.queryByText('first')).not.toBeInTheDocument();
242
+ });
243
+ test('Handler function removes ref from array', function () {
244
+ var newArray = (0, _TreeViewSection.removeRefFromArrayHelper)(_TreeViewKeyboardDelegate.refArray, 'test');
245
+ expect(newArray).toHaveLength(2);
246
+ });
247
+ test('Handler function does not remove ref from array', function () {
248
+ var newArray = (0, _TreeViewSection.removeRefFromArrayHelper)(_TreeViewKeyboardDelegate.refArray, 'anothertest');
249
+ expect(newArray).toHaveLength(3);
250
+ });
251
+ test('Handler function does add ref to array', function () {
252
+ var newArray = (0, _TreeViewSection.addRefToArrayHelper)(_TreeViewKeyboardDelegate.refArray, 'yetanothertest', {
253
+ current: 'currentlystilltesting'
254
+ });
255
+ expect(newArray).toHaveLength(4);
256
+ });
257
+ test('Handler function does not add ref to array', function () {
258
+ var newArray = (0, _TreeViewSection.addRefToArrayHelper)(_TreeViewKeyboardDelegate.refArray, 'test', {
259
+ current: 'currentlystilltesting'
260
+ });
261
+ expect(newArray).toHaveLength(3);
182
262
  });
@@ -8,21 +8,68 @@ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequ
8
8
  _Object$defineProperty(exports, "__esModule", {
9
9
  value: true
10
10
  });
11
- exports["default"] = void 0;
11
+ exports.onKeyDownItem = exports["default"] = void 0;
12
12
  var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
13
13
  var _react = _interopRequireWildcard(require("react"));
14
14
  var _FileIcon = _interopRequireDefault(require("@pingux/mdi-react/FileIcon"));
15
+ var _focus = require("@react-aria/focus");
15
16
  var _listbox = require("@react-aria/listbox");
17
+ var _utils = require("@react-aria/utils");
16
18
  var _propTypes = _interopRequireDefault(require("prop-types"));
17
19
  var _TreeViewContext = require("../../context/TreeViewContext");
20
+ var _hooks = require("../../hooks");
18
21
  var _index = require("../../index");
22
+ var _TreeViewKeyboardDelegate = require("./TreeViewKeyboardDelegate");
19
23
  var _TreeViewRow = _interopRequireDefault(require("./TreeViewRow"));
24
+ var _TreeViewSection = require("./TreeViewSection");
20
25
  var _react2 = require("@emotion/react");
21
26
  function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
22
27
  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; }
28
+ var onKeyDownItem = function onKeyDownItem(e, state, key, tree, isSelected, isExpanded, focusManager, flatKeyArray, refArray, pageLength) {
29
+ switch (e.which) {
30
+ case 32:
31
+ _TreeViewKeyboardDelegate.itemPressHandlers.onSpacePress(e, tree, key, isSelected);
32
+ break;
33
+ case 38:
34
+ _TreeViewKeyboardDelegate.itemPressHandlers.onUpPress(e, key, refArray, flatKeyArray);
35
+ e.preventDefault();
36
+ e.stopPropagation();
37
+ break;
38
+ case 40:
39
+ _TreeViewKeyboardDelegate.itemPressHandlers.onDownPress(e, key, refArray, flatKeyArray);
40
+ e.preventDefault();
41
+ e.stopPropagation();
42
+ break;
43
+ case 37:
44
+ case 39:
45
+ _TreeViewKeyboardDelegate.itemPressHandlers.onRightLeftItemPress(e);
46
+ break;
47
+ case 33:
48
+ _TreeViewKeyboardDelegate.itemPressHandlers.onPageUpPress(e, key, flatKeyArray, refArray, pageLength);
49
+ break;
50
+ case 34:
51
+ _TreeViewKeyboardDelegate.itemPressHandlers.onPageDownPress(e, key, flatKeyArray, refArray, pageLength);
52
+ break;
53
+ case 36:
54
+ _TreeViewKeyboardDelegate.itemPressHandlers.onHomePress(key, flatKeyArray, refArray);
55
+ e.preventDefault();
56
+ e.stopPropagation();
57
+ break;
58
+ case 35:
59
+ _TreeViewKeyboardDelegate.itemPressHandlers.onEndPress(key, flatKeyArray, refArray);
60
+ e.preventDefault();
61
+ e.stopPropagation();
62
+ break;
63
+ default:
64
+ break;
65
+ }
66
+ };
67
+ exports.onKeyDownItem = onKeyDownItem;
23
68
  var TreeViewItem = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
24
69
  var item = props.item,
25
70
  title = props.title,
71
+ focusManager = props.focusManager,
72
+ onKeyDown = props.onKeyDown,
26
73
  level = props.level,
27
74
  position = props.position,
28
75
  setSize = props.setSize;
@@ -32,8 +79,16 @@ var TreeViewItem = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
32
79
  (0, _react.useImperativeHandle)(ref, function () {
33
80
  return treeItemRef.current;
34
81
  });
82
+
83
+ /* istanbul ignore next */
35
84
  var _useTreeViewContext = (0, _TreeViewContext.useTreeViewContext)(),
36
- state = _useTreeViewContext.state;
85
+ state = _useTreeViewContext.state,
86
+ tree = _useTreeViewContext.tree,
87
+ refArray = _useTreeViewContext.refArray,
88
+ setRefs = _useTreeViewContext.setRefs,
89
+ flatKeyArray = _useTreeViewContext.flatKeyArray,
90
+ pageLength = _useTreeViewContext.pageLength,
91
+ setLastFocusedItem = _useTreeViewContext.setLastFocusedItem;
37
92
  var _useOption = (0, _listbox.useOption)({
38
93
  key: key
39
94
  }, state, treeItemRef),
@@ -41,24 +96,65 @@ var TreeViewItem = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
41
96
  isSelected = _useOption.isSelected,
42
97
  isDisabled = _useOption.isDisabled;
43
98
  var isExpanded = state.expandedKeys.has(key);
99
+ var onKeyDownFunction = function onKeyDownFunction(e) {
100
+ /* istanbul ignore next */
101
+ onKeyDownItem(e, state, key, tree, isSelected, isExpanded, focusManager, flatKeyArray, refArray, pageLength);
102
+ if (onKeyDown) {
103
+ onKeyDown(e, key);
104
+ }
105
+ };
106
+
107
+ // ignoring from tests, but this is actually being unit tested
108
+ /* istanbul ignore next */
109
+ var removeRefFromArray = function removeRefFromArray() {
110
+ setRefs(function (prev) {
111
+ return (0, _TreeViewSection.removeRefFromArrayHelper)(prev, key);
112
+ });
113
+ };
114
+ var addRefToArray = function addRefToArray() {
115
+ setRefs(function (prev) {
116
+ return (0, _TreeViewSection.addRefToArrayHelper)(prev, key, treeItemRef);
117
+ });
118
+ };
119
+
120
+ // adds and removes refs on mount and dismount
121
+ /* istanbul ignore next */
122
+ (0, _react.useEffect)(function () {
123
+ // this runs on mount
124
+ addRefToArray();
125
+ return function () {
126
+ // this runs on cleanup
127
+ removeRefFromArray(key, refArray);
128
+ };
129
+ }, []);
130
+ var _useFocusRing = (0, _focus.useFocusRing)(),
131
+ isFocusVisible = _useFocusRing.isFocusVisible,
132
+ focusProps = _useFocusRing.focusProps;
133
+ var mergedProps = (0, _utils.mergeProps)(focusProps, optionProps, {
134
+ onFocus: function onFocus() {
135
+ return setLastFocusedItem(key);
136
+ }
137
+ });
138
+ var _useStatusClasses = (0, _hooks.useStatusClasses)('', {
139
+ isFocused: isFocusVisible
140
+ }),
141
+ classNames = _useStatusClasses.classNames;
44
142
  return (0, _react2.jsx)(_index.Box, (0, _extends2["default"])({
45
143
  as: "li",
46
144
  isRow: true,
47
145
  ref: treeItemRef,
48
- "aria-disabled": isDisabled,
146
+ "aria-disabled": isDisabled
147
+ }, mergedProps, {
148
+ role: "treeitem",
149
+ variant: "treeView.wrapper",
150
+ className: classNames,
151
+ "aria-selected": isSelected,
49
152
  "aria-level": level,
50
153
  "aria-posinset": position + 1,
51
- "aria-setsize": setSize
52
- }, optionProps, {
53
- role: "treeitem",
54
- sx: {
55
- width: '100%',
56
- ml: '36px',
57
- ':not(:last-child)': {
58
- pb: 'sm'
59
- }
60
- },
61
- "aria-selected": isSelected
154
+ "aria-setsize": setSize,
155
+ onKeyDown: function onKeyDown(e) {
156
+ return onKeyDownFunction(e);
157
+ }
62
158
  }), (0, _react2.jsx)(_TreeViewRow["default"], {
63
159
  item: item,
64
160
  title: title,
@@ -72,8 +168,10 @@ TreeViewItem.propTypes = {
72
168
  item: _propTypes["default"].shape({
73
169
  key: _propTypes["default"].string
74
170
  }),
171
+ focusManager: _propTypes["default"].shape({}),
75
172
  name: _propTypes["default"].string,
76
173
  title: _propTypes["default"].string,
174
+ onKeyDown: _propTypes["default"].func,
77
175
  level: _propTypes["default"].number,
78
176
  position: _propTypes["default"].number,
79
177
  setSize: _propTypes["default"].number
@@ -0,0 +1,200 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
4
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
5
+ _Object$defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.verifyIndex = exports.sectionPressHandlers = exports.pageUpOrDown = exports.onUpPress = exports.onTabPress = exports.onSpacePress = exports.onRightPress = exports.onRightLeftItemPress = exports.onPageUpPress = exports.onPageDownPress = exports.onLeftPress = exports.onHomePress = exports.onEnterPress = exports.onEndPress = exports.onDownPress = exports.itemPressHandlers = void 0;
9
+ var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find"));
10
+ var _findIndex = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find-index"));
11
+ var focusPrevious = function focusPrevious(index, refArray, flatKeyList) {
12
+ if (index !== 0) {
13
+ var key = flatKeyList[index - 1].key;
14
+ var _refArray$find = (0, _find["default"])(refArray).call(refArray, function (item) {
15
+ return item.key === key;
16
+ }),
17
+ thisRef = _refArray$find.thisRef;
18
+ thisRef.current.focus();
19
+ }
20
+ };
21
+ var focusNext = function focusNext(index, refArray, flatKeyList) {
22
+ if (index !== flatKeyList.length - 1) {
23
+ var key = flatKeyList[index + 1].key;
24
+ var _refArray$find2 = (0, _find["default"])(refArray).call(refArray, function (item) {
25
+ return item.key === key;
26
+ }),
27
+ thisRef = _refArray$find2.thisRef;
28
+ thisRef.current.focus();
29
+ }
30
+ };
31
+ var verifyIndex = function verifyIndex(thisIndex, interval, length) {
32
+ var newIndex = thisIndex + interval;
33
+ if (newIndex < 0) {
34
+ return 0;
35
+ }
36
+ if (newIndex >= length) {
37
+ return length - 1;
38
+ }
39
+ return newIndex;
40
+ };
41
+ exports.verifyIndex = verifyIndex;
42
+ var onHomePress = function onHomePress(key, flatKeyArray, refArray) {
43
+ var _thisRef$current;
44
+ var firstKey = flatKeyArray[0];
45
+ if (firstKey.key === key) {
46
+ return;
47
+ }
48
+ var _refArray$find3 = (0, _find["default"])(refArray).call(refArray, function (_item) {
49
+ return _item.key === firstKey.key;
50
+ }),
51
+ thisRef = _refArray$find3.thisRef;
52
+ (_thisRef$current = thisRef.current) === null || _thisRef$current === void 0 ? void 0 : _thisRef$current.focus();
53
+ };
54
+ exports.onHomePress = onHomePress;
55
+ var onEndPress = function onEndPress(key, flatKeyArray, refArray) {
56
+ var _thisRef$current2;
57
+ var lastKey = flatKeyArray[flatKeyArray.length - 1];
58
+ if (lastKey.key === key) {
59
+ return;
60
+ }
61
+ var _refArray$find4 = (0, _find["default"])(refArray).call(refArray, function (_item) {
62
+ return _item.key === lastKey.key;
63
+ }),
64
+ thisRef = _refArray$find4.thisRef;
65
+ (_thisRef$current2 = thisRef.current) === null || _thisRef$current2 === void 0 ? void 0 : _thisRef$current2.focus();
66
+ };
67
+ exports.onEndPress = onEndPress;
68
+ var pageUpOrDown = function pageUpOrDown(key, flatKeyArray, refArray, pageLength) {
69
+ var _thisRef$current3;
70
+ var thisIndex = (0, _findIndex["default"])(flatKeyArray).call(flatKeyArray, function (item) {
71
+ return item.key === key;
72
+ });
73
+ var newIndex = verifyIndex(thisIndex, pageLength, flatKeyArray.length);
74
+ var foundKey = flatKeyArray[newIndex].key;
75
+ var _refArray$find5 = (0, _find["default"])(refArray).call(refArray, function (_item) {
76
+ return _item.key === foundKey;
77
+ }),
78
+ thisRef = _refArray$find5.thisRef;
79
+ (_thisRef$current3 = thisRef.current) === null || _thisRef$current3 === void 0 ? void 0 : _thisRef$current3.focus();
80
+ };
81
+ exports.pageUpOrDown = pageUpOrDown;
82
+ var onEnterPress = function onEnterPress(e, state, key) {
83
+ state.toggleKey(key);
84
+ e.preventDefault();
85
+ e.stopPropagation();
86
+ };
87
+ exports.onEnterPress = onEnterPress;
88
+ var onLeftPress = function onLeftPress(e, focusManager, state, key, isExpanded, refArray) {
89
+ var isEventTargetAKey = (0, _find["default"])(refArray).call(refArray, function (_item) {
90
+ return _item.thisRef.current === e.target;
91
+ });
92
+ if (isExpanded && isEventTargetAKey) {
93
+ state.toggleKey(key);
94
+ }
95
+ if (isExpanded && !isEventTargetAKey) {
96
+ focusManager.focusPrevious();
97
+ }
98
+ e.preventDefault();
99
+ e.stopPropagation();
100
+ };
101
+ exports.onLeftPress = onLeftPress;
102
+ var onSpacePress = function onSpacePress(e, tree, key, isSelected) {
103
+ if (isSelected) {
104
+ tree.setSelectedKeys([]);
105
+ } else {
106
+ tree.setSelectedKeys([key]);
107
+ }
108
+ e.preventDefault();
109
+ e.stopPropagation();
110
+ };
111
+ exports.onSpacePress = onSpacePress;
112
+ var onUpPress = function onUpPress(e, key, refArray, flatKeyList) {
113
+ var foundIndex = (0, _findIndex["default"])(flatKeyList).call(flatKeyList, function (item) {
114
+ return item.key === key;
115
+ });
116
+ focusPrevious(foundIndex, refArray, flatKeyList);
117
+ e.preventDefault();
118
+ e.stopPropagation();
119
+ };
120
+ exports.onUpPress = onUpPress;
121
+ var onTabPress = function onTabPress(e, refArray, focusManager, isSection) {
122
+ var isEventTargetAKey = (0, _find["default"])(refArray).call(refArray, function (_item) {
123
+ return _item.thisRef.current === e.target;
124
+ });
125
+ if (isEventTargetAKey && isSection) {
126
+ focusManager.focusNext();
127
+ e.preventDefault();
128
+ e.stopPropagation();
129
+ }
130
+ };
131
+ exports.onTabPress = onTabPress;
132
+ var onRightPress = function onRightPress(e, focusManager, state, key, isExpanded, refArray) {
133
+ if (!isExpanded) {
134
+ state.toggleKey(key);
135
+ return;
136
+ }
137
+ var isEventTargetAKey = (0, _find["default"])(refArray).call(refArray, function (_item) {
138
+ return _item.thisRef.current === e.target;
139
+ });
140
+ if (isExpanded && isEventTargetAKey) {
141
+ focusManager.focusNext();
142
+ }
143
+ e.preventDefault();
144
+ e.stopPropagation();
145
+ };
146
+ exports.onRightPress = onRightPress;
147
+ var onDownPress = function onDownPress(e, key, refArray, flatKeyList) {
148
+ // find the key
149
+ var foundIndex = (0, _findIndex["default"])(flatKeyList).call(flatKeyList, function (item) {
150
+ return item.key === key;
151
+ });
152
+ focusNext(foundIndex, refArray, flatKeyList);
153
+ // check if first or last
154
+ e.preventDefault();
155
+ e.stopPropagation();
156
+ };
157
+ exports.onDownPress = onDownPress;
158
+ var onRightLeftItemPress = function onRightLeftItemPress(e) {
159
+ e.preventDefault();
160
+ e.stopPropagation();
161
+ };
162
+ exports.onRightLeftItemPress = onRightLeftItemPress;
163
+ var onPageUpPress = function onPageUpPress(e, key, flatKeyArray, refArray, pageLength) {
164
+ pageUpOrDown(key, flatKeyArray, refArray, -Math.abs(pageLength));
165
+ e.preventDefault();
166
+ e.stopPropagation();
167
+ };
168
+ exports.onPageUpPress = onPageUpPress;
169
+ var onPageDownPress = function onPageDownPress(e, key, flatKeyArray, refArray, pageLength) {
170
+ pageUpOrDown(key, flatKeyArray, refArray, Math.abs(pageLength));
171
+ e.preventDefault();
172
+ e.stopPropagation();
173
+ };
174
+ exports.onPageDownPress = onPageDownPress;
175
+ var sectionPressHandlers = {
176
+ onEnterPress: onEnterPress,
177
+ onSpacePress: onSpacePress,
178
+ onLeftPress: onLeftPress,
179
+ onRightPress: onRightPress,
180
+ onUpPress: onUpPress,
181
+ onDownPress: onDownPress,
182
+ onTabPress: onTabPress,
183
+ onPageUpPress: onPageUpPress,
184
+ onPageDownPress: onPageDownPress,
185
+ onHomePress: onHomePress,
186
+ onEndPress: onEndPress
187
+ };
188
+ exports.sectionPressHandlers = sectionPressHandlers;
189
+ var itemPressHandlers = {
190
+ onSpacePress: onSpacePress,
191
+ onDownPress: onDownPress,
192
+ onUpPress: onUpPress,
193
+ onRightLeftItemPress: onRightLeftItemPress,
194
+ onTabPress: onTabPress,
195
+ onPageUpPress: onPageUpPress,
196
+ onPageDownPress: onPageDownPress,
197
+ onHomePress: onHomePress,
198
+ onEndPress: onEndPress
199
+ };
200
+ exports.itemPressHandlers = itemPressHandlers;