@pingux/astro 2.32.0-alpha.8 → 2.32.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.
Files changed (45) hide show
  1. package/lib/cjs/components/TreeView/TreeView.js +99 -11
  2. package/lib/cjs/components/TreeView/TreeView.stories.js +23 -10
  3. package/lib/cjs/components/TreeView/TreeView.styles.js +22 -2
  4. package/lib/cjs/components/TreeView/TreeView.test.js +91 -11
  5. package/lib/cjs/components/TreeView/TreeViewItem.js +112 -14
  6. package/lib/cjs/components/TreeView/TreeViewKeyboardDelegate.js +200 -0
  7. package/lib/cjs/components/TreeView/TreeViewKeyboardDelegate.test.js +511 -0
  8. package/lib/cjs/components/TreeView/TreeViewRow.js +20 -5
  9. package/lib/cjs/components/TreeView/TreeViewSection.js +164 -16
  10. package/lib/cjs/components/TreeView/TreeViewWrapper.js +40 -0
  11. package/lib/cjs/hooks/useField/index.d.ts +1 -0
  12. package/lib/cjs/hooks/useField/useField.d.ts +1686 -0
  13. package/lib/cjs/hooks/useField/useField.js +7 -16
  14. package/lib/cjs/hooks/useField/useField.test.d.ts +1 -0
  15. package/lib/cjs/hooks/useField/useField.test.js +6 -6
  16. package/lib/cjs/hooks/useModalState/index.d.ts +1 -0
  17. package/lib/cjs/hooks/useModalState/useModalState.d.ts +21 -0
  18. package/lib/cjs/hooks/useModalState/useModalState.js +0 -9
  19. package/lib/cjs/hooks/useModalState/useModalState.test.d.ts +1 -0
  20. package/lib/cjs/hooks/useMountTransition/index.d.ts +1 -0
  21. package/lib/cjs/hooks/useMountTransition/useMountTransition.d.ts +14 -0
  22. package/lib/cjs/hooks/useMountTransition/useMountTransition.js +0 -9
  23. package/lib/cjs/hooks/useMountTransition/useMountTransition.test.d.ts +1 -0
  24. package/lib/cjs/hooks/useMountTransition/useMountTransition.test.js +2 -2
  25. package/lib/cjs/hooks/useStatusClasses/index.d.ts +1 -0
  26. package/lib/cjs/hooks/useStatusClasses/useStatusClasses.d.ts +18 -0
  27. package/lib/cjs/hooks/useStatusClasses/useStatusClasses.js +0 -9
  28. package/lib/cjs/hooks/useStatusClasses/useStatusClasses.test.d.ts +1 -0
  29. package/lib/components/TreeView/TreeView.js +100 -12
  30. package/lib/components/TreeView/TreeView.stories.js +23 -10
  31. package/lib/components/TreeView/TreeView.styles.js +22 -2
  32. package/lib/components/TreeView/TreeView.test.js +92 -12
  33. package/lib/components/TreeView/TreeViewItem.js +111 -14
  34. package/lib/components/TreeView/TreeViewKeyboardDelegate.js +176 -0
  35. package/lib/components/TreeView/TreeViewKeyboardDelegate.test.js +496 -0
  36. package/lib/components/TreeView/TreeViewRow.js +20 -5
  37. package/lib/components/TreeView/TreeViewSection.js +161 -16
  38. package/lib/components/TreeView/TreeViewWrapper.js +31 -0
  39. package/lib/hooks/useField/useField.js +7 -16
  40. package/lib/hooks/useField/useField.test.js +6 -6
  41. package/lib/hooks/useModalState/useModalState.js +0 -10
  42. package/lib/hooks/useMountTransition/useMountTransition.js +0 -10
  43. package/lib/hooks/useMountTransition/useMountTransition.test.js +2 -2
  44. package/lib/hooks/useStatusClasses/useStatusClasses.js +0 -10
  45. package/package.json +1 -1
@@ -30,7 +30,7 @@ var _TreeViewContext = require("../../context/TreeViewContext");
30
30
  var _hooks = require("../../hooks");
31
31
  var _index = require("../../index");
32
32
  var _react2 = require("@emotion/react");
33
- var _excluded = ["title", "mainIcon", "lastIcon", "item", "items", "isExpanded", "isSelected", "isDisabled", "iconButtonProps"];
33
+ var _excluded = ["title", "mainIcon", "lastIcon", "item", "items", "isExpanded", "isSelected", "isDisabled", "isParentFocused", "iconButtonProps"];
34
34
  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); }
35
35
  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; }
36
36
  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; }
@@ -46,6 +46,7 @@ var TreeViewRow = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
46
46
  isExpanded = props.isExpanded,
47
47
  isSelected = props.isSelected,
48
48
  isDisabled = props.isDisabled,
49
+ isParentFocused = props.isParentFocused,
49
50
  iconButtonProps = props.iconButtonProps,
50
51
  others = (0, _objectWithoutProperties2["default"])(props, _excluded);
51
52
  var treeRowRef = (0, _react.useRef)();
@@ -84,13 +85,19 @@ var TreeViewRow = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
84
85
  }),
85
86
  classNames = _useStatusClasses.classNames;
86
87
  var mergedProps = (0, _utils.mergeProps)(hoverProps, pressProps, others);
88
+
89
+ // console.log(`ROW: ${key} has parent focus: ${isParentFocused}`)
90
+
87
91
  return (0, _react2.jsx)(_index.Box, (0, _extends2["default"])({
88
92
  ref: treeRowRef,
89
93
  isRow: true,
90
94
  alignItems: "center",
91
95
  gap: "xs",
92
96
  sx: {
93
- flexGrow: 1
97
+ flexGrow: 1,
98
+ '& :focus': {
99
+ border: 'none'
100
+ }
94
101
  },
95
102
  className: classNames,
96
103
  key: "".concat(key, " box")
@@ -103,15 +110,22 @@ var TreeViewRow = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
103
110
  size: 25,
104
111
  title: "".concat(title, " expand or collapse button")
105
112
  },
106
- buttonProps: {
113
+ buttonProps: _objectSpread(_objectSpread({
107
114
  'aria-label': "".concat(title, " expand or collapse button")
108
- }
115
+ }, isParentFocused && {
116
+ tabIndex: 0
117
+ }), !isParentFocused && {
118
+ tabIndex: -1
119
+ })
109
120
  }), (0, _react2.jsx)(_index.Box, {
110
121
  isRow: true,
111
122
  className: classNames,
112
123
  alignItems: "center",
113
124
  gap: "xs",
114
- variant: "treeView.treeRow"
125
+ variant: "treeView.treeRow",
126
+ sx: !items && {
127
+ ml: '36px'
128
+ }
115
129
  }, (0, _react2.jsx)(_index.Icon, {
116
130
  color: "focus",
117
131
  icon: mainIcon,
@@ -132,6 +146,7 @@ TreeViewRow.propTypes = {
132
146
  isSelected: _propTypes["default"].bool,
133
147
  isDisabled: _propTypes["default"].bool,
134
148
  isExpanded: _propTypes["default"].bool,
149
+ isParentFocused: _propTypes["default"].bool,
135
150
  title: _propTypes["default"].string,
136
151
  items: _propTypes["default"].arrayOf(_propTypes["default"].shape({})),
137
152
  iconButtonProps: _propTypes["default"].shape({
@@ -8,25 +8,114 @@ 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.removeRefFromArrayHelper = exports.onKeyDownSection = exports["default"] = exports.addRefToArrayHelper = void 0;
12
12
  var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
13
+ var _some = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/some"));
14
+ var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
15
+ var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
13
16
  var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
14
17
  var _from = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/from"));
15
18
  var _react = _interopRequireWildcard(require("react"));
19
+ var _focus = require("@react-aria/focus");
16
20
  var _listbox = require("@react-aria/listbox");
21
+ var _utils = require("@react-aria/utils");
17
22
  var _propTypes = _interopRequireDefault(require("prop-types"));
18
23
  var _TreeViewContext = require("../../context/TreeViewContext");
24
+ var _hooks = require("../../hooks");
19
25
  var _index2 = require("../../index");
20
26
  var _TreeView = require("./TreeView");
27
+ var _TreeViewKeyboardDelegate = require("./TreeViewKeyboardDelegate");
21
28
  var _TreeViewRow = _interopRequireDefault(require("./TreeViewRow"));
22
29
  var _react2 = require("@emotion/react");
23
30
  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); }
24
31
  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; }
32
+ var onKeyDownSection = function onKeyDownSection(e, state, key, tree, isSelected, isExpanded, focusManager, flatKeyArray, refArray, pageLength, isFocused) {
33
+ switch (e.which) {
34
+ case 9:
35
+ if (isFocused) {
36
+ _TreeViewKeyboardDelegate.sectionPressHandlers.onTabPress(e, refArray, focusManager, true, key);
37
+ }
38
+ break;
39
+ case 13:
40
+ _TreeViewKeyboardDelegate.sectionPressHandlers.onEnterPress(e, state, key);
41
+ break;
42
+ case 32:
43
+ _TreeViewKeyboardDelegate.sectionPressHandlers.onSpacePress(e, tree, key, isSelected);
44
+ break;
45
+ case 33:
46
+ _TreeViewKeyboardDelegate.sectionPressHandlers.onPageUpPress(e, key, flatKeyArray, refArray, pageLength);
47
+ break;
48
+ case 34:
49
+ _TreeViewKeyboardDelegate.sectionPressHandlers.onPageDownPress(e, key, flatKeyArray, refArray, pageLength);
50
+ break;
51
+ case 36:
52
+ _TreeViewKeyboardDelegate.sectionPressHandlers.onHomePress(key, flatKeyArray, refArray);
53
+ e.preventDefault();
54
+ e.stopPropagation();
55
+ break;
56
+ case 35:
57
+ _TreeViewKeyboardDelegate.sectionPressHandlers.onEndPress(key, flatKeyArray, refArray);
58
+ e.preventDefault();
59
+ e.stopPropagation();
60
+ break;
61
+ case 37:
62
+ _TreeViewKeyboardDelegate.sectionPressHandlers.onLeftPress(e, focusManager, state, key, isExpanded, refArray);
63
+ break;
64
+ case 38:
65
+ _TreeViewKeyboardDelegate.sectionPressHandlers.onUpPress(e, key, refArray, flatKeyArray);
66
+ e.preventDefault();
67
+ e.stopPropagation();
68
+ break;
69
+ case 39:
70
+ if (isFocused) {
71
+ _TreeViewKeyboardDelegate.sectionPressHandlers.onRightPress(e, focusManager, state, key, isExpanded, refArray);
72
+ }
73
+ break;
74
+ case 40:
75
+ _TreeViewKeyboardDelegate.sectionPressHandlers.onDownPress(e, key, refArray, flatKeyArray);
76
+ e.preventDefault();
77
+ e.stopPropagation();
78
+ break;
79
+ default:
80
+ /* istanbul ignore next */
81
+ break;
82
+ }
83
+ };
84
+ exports.onKeyDownSection = onKeyDownSection;
85
+ var removeRefFromArrayHelper = function removeRefFromArrayHelper(prevState, keyToRemove) {
86
+ if ((0, _some["default"])(prevState).call(prevState, function (item) {
87
+ return item.key === keyToRemove;
88
+ })) {
89
+ var _context;
90
+ var newArray = (0, _concat["default"])(_context = []).call(_context, (0, _filter["default"])(prevState).call(prevState, function (_item) {
91
+ return _item.key !== keyToRemove;
92
+ }));
93
+ return newArray;
94
+ }
95
+ return prevState;
96
+ };
97
+ exports.removeRefFromArrayHelper = removeRefFromArrayHelper;
98
+ var addRefToArrayHelper = function addRefToArrayHelper(prevState, keyToAdd, refToAdd) {
99
+ if (!(0, _some["default"])(prevState).call(prevState, function (i) {
100
+ return i.key === keyToAdd;
101
+ })) {
102
+ var _context2;
103
+ var thisObj = {
104
+ key: keyToAdd,
105
+ thisRef: refToAdd
106
+ };
107
+ return (0, _concat["default"])(_context2 = []).call(_context2, prevState, [thisObj]);
108
+ }
109
+ return prevState;
110
+ };
111
+ exports.addRefToArrayHelper = addRefToArrayHelper;
25
112
  var TreeViewSection = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
26
- var _context;
113
+ var _context3;
27
114
  var item = props.item,
28
115
  items = props.items,
29
116
  title = props.title,
117
+ focusManager = props.focusManager,
118
+ onKeyDown = props.onKeyDown,
30
119
  level = props.level,
31
120
  position = props.position,
32
121
  setSize = props.setSize;
@@ -37,51 +126,107 @@ var TreeViewSection = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref)
37
126
  return treeSectionRef.current;
38
127
  });
39
128
  var _useTreeViewContext = (0, _TreeViewContext.useTreeViewContext)(),
40
- state = _useTreeViewContext.state;
129
+ state = _useTreeViewContext.state,
130
+ tree = _useTreeViewContext.tree,
131
+ refArray = _useTreeViewContext.refArray,
132
+ setRefs = _useTreeViewContext.setRefs,
133
+ flatKeyArray = _useTreeViewContext.flatKeyArray,
134
+ pageLength = _useTreeViewContext.pageLength,
135
+ setLastFocusedItem = _useTreeViewContext.setLastFocusedItem,
136
+ lastFocusedItem = _useTreeViewContext.lastFocusedItem;
41
137
  var _useOption = (0, _listbox.useOption)({
42
138
  key: key
43
139
  }, state, treeSectionRef),
44
140
  optionProps = _useOption.optionProps,
45
141
  isDisabled = _useOption.isDisabled,
46
142
  isSelected = _useOption.isSelected;
143
+ var _useFocusRing = (0, _focus.useFocusRing)(),
144
+ focusProps = _useFocusRing.focusProps,
145
+ isFocused = _useFocusRing.isFocused;
146
+ var _useFocusRing2 = (0, _focus.useFocusRing)({
147
+ within: true
148
+ }),
149
+ focusPropsWithin = _useFocusRing2.focusProps,
150
+ isFocusedWithin = _useFocusRing2.isFocused;
47
151
  var isExpanded = state.expandedKeys.has(key);
152
+ var onKeyDownFunction = function onKeyDownFunction(e) {
153
+ onKeyDownSection(e, state, key, tree, isSelected, isExpanded, focusManager, flatKeyArray, refArray, pageLength, isFocused);
154
+ if (onKeyDown) {
155
+ onKeyDown(e, key);
156
+ }
157
+ };
158
+ var addRefToArray = function addRefToArray(thisKey, thisRef) {
159
+ setRefs(function (prev) {
160
+ return addRefToArrayHelper(prev, thisKey, thisRef);
161
+ });
162
+ };
163
+ var removeRefFromArray = function removeRefFromArray() {
164
+ setRefs(function (prev) {
165
+ return removeRefFromArrayHelper(prev, key);
166
+ });
167
+ };
168
+
169
+ // adds and removes refs on mount and dismount
170
+ (0, _react.useEffect)(function () {
171
+ // this runs on mount
172
+ addRefToArray(key, treeSectionRef);
173
+ return function () {
174
+ // this runs on cleanup
175
+ removeRefFromArray(key, refArray);
176
+ };
177
+ }, []);
178
+ var mergedProps = (0, _utils.mergeProps)(focusPropsWithin, focusProps, optionProps, {
179
+ onFocus: function onFocus() {
180
+ return setLastFocusedItem(key);
181
+ }
182
+ });
183
+ var _useStatusClasses = (0, _hooks.useStatusClasses)('', {
184
+ isFocused: isFocused
185
+ }),
186
+ classNames = _useStatusClasses.classNames;
48
187
  return (0, _react2.jsx)(_index2.Box, (0, _extends2["default"])({
49
188
  ref: treeSectionRef,
50
189
  as: "li",
51
- sx: {
52
- ':not(:last-child)': {
53
- pb: 'sm'
54
- }
55
- },
56
190
  "aria-expanded": isExpanded,
57
- "aria-disabled": isDisabled,
191
+ "aria-disabled": isDisabled
192
+ }, mergedProps, {
193
+ role: "treeitem",
194
+ variant: "treeView.wrapper",
195
+ className: classNames,
196
+ "aria-selected": isSelected,
58
197
  "aria-level": level,
59
198
  "aria-setsize": setSize,
60
- "aria-posinset": position + 1
61
- }, optionProps, {
62
- role: "treeitem",
63
- "aria-selected": isSelected
199
+ "aria-posinset": position + 1,
200
+ onKeyDown: function onKeyDown(e) {
201
+ return onKeyDownFunction(e);
202
+ },
203
+ tabIndex: lastFocusedItem === key ? 0 : -1
64
204
  }), (0, _react2.jsx)(_TreeViewRow["default"], {
65
205
  item: item,
66
206
  title: title,
67
207
  items: items,
68
208
  isExpanded: isExpanded,
69
209
  isSelected: isSelected,
70
- isDisabled: isDisabled
210
+ isDisabled: isDisabled,
211
+ isParentFocused: isFocusedWithin
71
212
  }), isExpanded && (0, _react2.jsx)(_index2.Box, {
72
213
  as: "ul",
73
214
  role: "group",
74
215
  key: "".concat(item.key, " ul"),
75
216
  sx: {
76
- pl: 'md'
217
+ pl: 'md',
218
+ '& :focus': {
219
+ border: 'none'
220
+ }
77
221
  }
78
- }, (0, _map["default"])(_context = (0, _from["default"])(items)).call(_context, function (_item, _index) {
222
+ }, (0, _map["default"])(_context3 = (0, _from["default"])(items)).call(_context3, function (_item, _index) {
79
223
  var _item$value$items;
80
224
  return (0, _TreeView.SectionOrItemRender)(((_item$value$items = _item.value.items) === null || _item$value$items === void 0 ? void 0 : _item$value$items.length) > 0, (0, _react2.jsx)(TreeViewSection, {
81
225
  item: _item,
82
226
  items: _item.children,
83
227
  title: _item.value.title,
84
228
  key: _item.value.title,
229
+ focusManager: focusManager,
85
230
  level: level + 1,
86
231
  position: _index,
87
232
  setSize: items.length
@@ -89,6 +234,7 @@ var TreeViewSection = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref)
89
234
  item: _item,
90
235
  title: _item.value.title,
91
236
  key: _item.value.title,
237
+ focusManager: focusManager,
92
238
  level: level + 1,
93
239
  position: _index,
94
240
  setSize: items.length
@@ -101,6 +247,8 @@ TreeViewSection.propTypes = {
101
247
  key: _propTypes["default"].string
102
248
  }),
103
249
  title: _propTypes["default"].string,
250
+ focusManager: _propTypes["default"].shape({}),
251
+ onKeyDown: _propTypes["default"].func,
104
252
  level: _propTypes["default"].number,
105
253
  position: _propTypes["default"].number,
106
254
  setSize: _propTypes["default"].number
@@ -0,0 +1,40 @@
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["default"] = void 0;
9
+ var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
10
+ var _react = _interopRequireDefault(require("react"));
11
+ var _focus = require("@react-aria/focus");
12
+ var _react2 = require("@emotion/react");
13
+ var TreeViewWrapper = function TreeViewWrapper(props) {
14
+ var children = props.children;
15
+ var items = (0, _map["default"])(children).call(children, function (child) {
16
+ return {
17
+ item: child,
18
+ key: child.key
19
+ };
20
+ });
21
+ return (0, _react2.jsx)(_focus.FocusScope, {
22
+ restoreFocus: false,
23
+ contain: false
24
+ }, (0, _map["default"])(items).call(items, function (_ref) {
25
+ var item = _ref.item,
26
+ key = _ref.key;
27
+ return (0, _react2.jsx)(FocusableItem, {
28
+ key: key
29
+ }, item);
30
+ }));
31
+ };
32
+ var FocusableItem = function FocusableItem(props) {
33
+ var focusManager = (0, _focus.useFocusManager)();
34
+ var childWithFocusHandle = /*#__PURE__*/_react["default"].cloneElement(props.children, {
35
+ focusManager: focusManager
36
+ });
37
+ return childWithFocusHandle;
38
+ };
39
+ var _default = TreeViewWrapper;
40
+ exports["default"] = _default;
@@ -0,0 +1 @@
1
+ export { default } from './useField';