@telus-uds/components-base 1.60.0 → 1.62.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 (66) hide show
  1. package/CHANGELOG.md +19 -2
  2. package/component-docs.json +306 -116
  3. package/lib/Autocomplete/Autocomplete.js +483 -0
  4. package/lib/Autocomplete/Loading.js +51 -0
  5. package/lib/Autocomplete/Suggestions.js +85 -0
  6. package/lib/Autocomplete/constants.js +14 -0
  7. package/lib/Autocomplete/dictionary.js +19 -0
  8. package/lib/Autocomplete/index.js +13 -0
  9. package/lib/IconButton/IconButton.js +28 -9
  10. package/lib/Listbox/GroupControl.js +121 -0
  11. package/lib/Listbox/Listbox.js +198 -0
  12. package/lib/Listbox/ListboxGroup.js +142 -0
  13. package/lib/Listbox/ListboxItem.js +97 -0
  14. package/lib/Listbox/ListboxOverlay.js +106 -0
  15. package/lib/Listbox/PressableItem.js +0 -2
  16. package/lib/Listbox/index.js +5 -24
  17. package/lib/SideNav/Item.js +7 -15
  18. package/lib/TextInput/TextInputBase.js +8 -1
  19. package/lib/Tooltip/Tooltip.js +5 -1
  20. package/lib/Tooltip/Tooltip.native.js +5 -1
  21. package/lib/Tooltip/shared.js +5 -0
  22. package/lib/index.js +17 -13
  23. package/lib/utils/useOverlaidPosition.js +6 -4
  24. package/lib-module/Autocomplete/Autocomplete.js +448 -0
  25. package/lib-module/Autocomplete/Loading.js +36 -0
  26. package/lib-module/Autocomplete/Suggestions.js +66 -0
  27. package/lib-module/Autocomplete/constants.js +4 -0
  28. package/lib-module/Autocomplete/dictionary.js +12 -0
  29. package/lib-module/Autocomplete/index.js +2 -0
  30. package/lib-module/IconButton/IconButton.js +30 -10
  31. package/lib-module/Listbox/GroupControl.js +102 -0
  32. package/lib-module/Listbox/Listbox.js +172 -0
  33. package/lib-module/Listbox/ListboxGroup.js +117 -0
  34. package/lib-module/Listbox/ListboxItem.js +71 -0
  35. package/lib-module/Listbox/ListboxOverlay.js +80 -0
  36. package/lib-module/Listbox/PressableItem.js +0 -2
  37. package/lib-module/Listbox/index.js +2 -2
  38. package/lib-module/SideNav/Item.js +7 -15
  39. package/lib-module/TextInput/TextInputBase.js +8 -1
  40. package/lib-module/Tooltip/Tooltip.js +5 -1
  41. package/lib-module/Tooltip/Tooltip.native.js +5 -1
  42. package/lib-module/Tooltip/shared.js +5 -0
  43. package/lib-module/index.js +2 -1
  44. package/lib-module/utils/useOverlaidPosition.js +5 -4
  45. package/package.json +4 -2
  46. package/src/Autocomplete/Autocomplete.jsx +411 -0
  47. package/src/Autocomplete/Loading.jsx +18 -0
  48. package/src/Autocomplete/Suggestions.jsx +54 -0
  49. package/src/Autocomplete/constants.js +4 -0
  50. package/src/Autocomplete/dictionary.js +12 -0
  51. package/src/Autocomplete/index.js +3 -0
  52. package/src/IconButton/IconButton.jsx +62 -35
  53. package/src/Listbox/GroupControl.jsx +93 -0
  54. package/src/Listbox/Listbox.jsx +165 -0
  55. package/src/Listbox/ListboxGroup.jsx +120 -0
  56. package/src/Listbox/ListboxItem.jsx +76 -0
  57. package/src/Listbox/ListboxOverlay.jsx +82 -0
  58. package/src/Listbox/PressableItem.jsx +0 -2
  59. package/src/Listbox/index.js +3 -2
  60. package/src/SideNav/Item.jsx +7 -13
  61. package/src/TextInput/TextInputBase.jsx +4 -1
  62. package/src/Tooltip/Tooltip.jsx +15 -2
  63. package/src/Tooltip/Tooltip.native.jsx +15 -2
  64. package/src/Tooltip/shared.js +4 -0
  65. package/src/index.js +2 -1
  66. package/src/utils/useOverlaidPosition.js +6 -5
@@ -31,9 +31,17 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
31
31
 
32
32
  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; }
33
33
 
34
+ // function to get the dimentionals of the conditionals
35
+ const getPasswordDimensions = (password, width, height) => {
36
+ return password ? {
37
+ width,
38
+ height
39
+ } : {};
40
+ };
41
+
34
42
  const [selectProps, selectedSystemPropTypes] = (0, _utils.selectSystemProps)([_utils.a11yProps, _utils.viewProps]);
35
43
 
36
- const selectOuterStyle = _ref => {
44
+ const selectOuterStyle = (_ref, password) => {
37
45
  let {
38
46
  backgroundColor,
39
47
  outerBorderWidth,
@@ -44,7 +52,9 @@ const selectOuterStyle = _ref => {
44
52
  borderTopRightRadius,
45
53
  borderBottomLeftRadius,
46
54
  borderBottomRightRadius,
47
- shadow
55
+ shadow,
56
+ width,
57
+ height
48
58
  } = _ref;
49
59
  return [{
50
60
  backgroundColor,
@@ -59,10 +69,13 @@ const selectOuterStyle = _ref => {
59
69
  outerBorderColor,
60
70
  outerBorderGap
61
71
  }),
72
+ ...getPasswordDimensions(password, width, height),
62
73
  ..._Platform.default.select({
63
74
  web: {
64
75
  outline: 'none',
65
- display: 'inline-flex'
76
+ display: 'inline-flex',
77
+ alignItems: 'center',
78
+ justifyContent: 'center'
66
79
  }
67
80
  })
68
81
  }, staticStyles.outer];
@@ -71,7 +84,7 @@ const selectOuterStyle = _ref => {
71
84
  const calculatePadding = (padding, borderWidth) => padding && Math.max(0, padding - borderWidth); // Stable size as border changes
72
85
 
73
86
 
74
- const selectInnerStyle = _ref2 => {
87
+ const selectInnerStyle = (_ref2, password) => {
75
88
  let {
76
89
  borderColor,
77
90
  borderWidth,
@@ -88,7 +101,9 @@ const selectInnerStyle = _ref2 => {
88
101
  paddingLeft,
89
102
  paddingRight,
90
103
  paddingTop,
91
- paddingBottom
104
+ paddingBottom,
105
+ width,
106
+ height
92
107
  } = _ref2;
93
108
  return {
94
109
  // Inner borders animate with the icon and should be treated like a themable feature of the icon
@@ -110,9 +125,13 @@ const selectInnerStyle = _ref2 => {
110
125
  paddingBottom: calculatePadding(paddingBottom, borderBottomWidth),
111
126
  ..._Platform.default.select({
112
127
  web: {
113
- pointerEvents: 'none'
128
+ pointerEvents: 'none',
129
+ display: 'inline-flex',
130
+ alignItems: 'center',
131
+ justifyContent: 'center'
114
132
  }
115
- })
133
+ }),
134
+ ...getPasswordDimensions(password, width, height)
116
135
  };
117
136
  };
118
137
  /**
@@ -158,7 +177,7 @@ const IconButton = /*#__PURE__*/(0, _react.forwardRef)((_ref3, ref) => {
158
177
 
159
178
  const getTokens = (0, _ThemeProvider.useThemeTokensCallback)('IconButton', tokens, variant);
160
179
 
161
- const getOuterStyle = pressableState => selectOuterStyle(getTokens((0, _utils.resolvePressableState)(pressableState)));
180
+ const getOuterStyle = pressableState => selectOuterStyle(getTokens((0, _utils.resolvePressableState)(pressableState), variant.password));
162
181
 
163
182
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Pressable.default, {
164
183
  ref: ref,
@@ -171,7 +190,7 @@ const IconButton = /*#__PURE__*/(0, _react.forwardRef)((_ref3, ref) => {
171
190
  children: pressableState => {
172
191
  const themeTokens = getTokens((0, _utils.resolvePressableState)(pressableState));
173
192
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
174
- style: selectInnerStyle(themeTokens),
193
+ style: selectInnerStyle(themeTokens, variant.password),
175
194
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Icon.default, {
176
195
  icon: IconComponent || themeTokens.icon,
177
196
  title: selectedProps.accessibilityLabel,
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ var _View = _interopRequireDefault(require("react-native-web/dist/cjs/exports/View"));
13
+
14
+ var _StyleSheet = _interopRequireDefault(require("react-native-web/dist/cjs/exports/StyleSheet"));
15
+
16
+ var _Text = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Text"));
17
+
18
+ var _ThemeProvider = require("../ThemeProvider");
19
+
20
+ var _Icon = _interopRequireDefault(require("../Icon"));
21
+
22
+ var _Spacer = _interopRequireDefault(require("../Spacer"));
23
+
24
+ var _ListboxContext = require("./ListboxContext");
25
+
26
+ var _jsxRuntime = require("react/jsx-runtime");
27
+
28
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
+
30
+ const styles = _StyleSheet.default.create({
31
+ controlWrapper: {
32
+ width: '100%',
33
+ flex: 1,
34
+ alignItems: 'center',
35
+ flexDirection: 'row',
36
+ justifyContent: 'space-between',
37
+ boxSizing: 'border-box'
38
+ }
39
+ });
40
+
41
+ const GroupControl = _ref => {
42
+ let {
43
+ expanded,
44
+ pressed,
45
+ hover,
46
+ focus,
47
+ label,
48
+ id
49
+ } = _ref;
50
+ const {
51
+ selectedId,
52
+ setSelectedId
53
+ } = (0, _ListboxContext.useListboxContext)();
54
+ const tokens = (0, _ThemeProvider.useThemeTokens)('Listbox', {}, {}, {
55
+ expanded,
56
+ pressed,
57
+ hover,
58
+ current: selectedId === id && id !== undefined,
59
+ focus
60
+ });
61
+ const {
62
+ groupFontName,
63
+ groupFontWeight,
64
+ groupFontSize,
65
+ groupColor,
66
+ groupBackgroundColor,
67
+ groupBorderColor,
68
+ groupBorderWidth,
69
+ groupBorderRadius,
70
+ groupPaddingLeft,
71
+ groupPaddingRight,
72
+ groupPaddingTop,
73
+ groupPaddingBottom,
74
+ itemTextDecoration,
75
+ itemOutline,
76
+ groupHeight
77
+ } = tokens;
78
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_View.default, {
79
+ onPress: () => setSelectedId(id),
80
+ style: [styles.controlWrapper, {
81
+ fontFamily: `${groupFontName}${groupFontWeight}normal`,
82
+ fontSize: groupFontSize,
83
+ color: groupColor,
84
+ textDecoration: itemTextDecoration,
85
+ backgroundColor: groupBackgroundColor,
86
+ outline: itemOutline,
87
+ height: groupHeight,
88
+ border: `${groupBorderWidth}px solid ${groupBorderColor}`,
89
+ borderRadius: groupBorderRadius,
90
+ paddingLeft: groupPaddingLeft - groupBorderWidth,
91
+ paddingRight: groupPaddingRight - groupBorderWidth,
92
+ paddingTop: groupPaddingTop - groupBorderWidth,
93
+ paddingBottom: groupPaddingBottom - groupBorderWidth
94
+ }],
95
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Text.default, {
96
+ children: label
97
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spacer.default, {
98
+ space: 1,
99
+ direction: "row"
100
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Icon.default, {
101
+ icon: tokens.groupIcon,
102
+ tokens: {
103
+ color: tokens.groupColor
104
+ },
105
+ variant: {
106
+ size: 'micro'
107
+ }
108
+ })]
109
+ });
110
+ };
111
+
112
+ GroupControl.propTypes = {
113
+ id: _propTypes.default.string,
114
+ expanded: _propTypes.default.bool,
115
+ pressed: _propTypes.default.bool,
116
+ hover: _propTypes.default.bool,
117
+ focus: _propTypes.default.bool,
118
+ label: _propTypes.default.string
119
+ };
120
+ var _default = GroupControl;
121
+ exports.default = _default;
@@ -0,0 +1,198 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ var _View = _interopRequireDefault(require("react-native-web/dist/cjs/exports/View"));
13
+
14
+ var _StyleSheet = _interopRequireDefault(require("react-native-web/dist/cjs/exports/StyleSheet"));
15
+
16
+ var _Platform = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Platform"));
17
+
18
+ var _ThemeProvider = require("../ThemeProvider");
19
+
20
+ var _utils = require("../utils");
21
+
22
+ var _ExpandCollapse = _interopRequireDefault(require("../ExpandCollapse"));
23
+
24
+ var _ListboxGroup = _interopRequireDefault(require("./ListboxGroup"));
25
+
26
+ var _ListboxItem = _interopRequireDefault(require("./ListboxItem"));
27
+
28
+ var _ListboxContext = require("./ListboxContext");
29
+
30
+ var _ListboxOverlay = _interopRequireDefault(require("./ListboxOverlay"));
31
+
32
+ var _jsxRuntime = require("react/jsx-runtime");
33
+
34
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
35
+
36
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
37
+
38
+ 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; }
39
+
40
+ const styles = _StyleSheet.default.create({
41
+ list: {
42
+ padding: 0,
43
+ margin: 0
44
+ }
45
+ });
46
+
47
+ const getInitialOpen = (items, selectedId) => items.filter(item => item.items && item.items.some(nestedItem => (nestedItem.id ?? nestedItem.label) === selectedId)).map(item => item.id ?? item.label);
48
+
49
+ const Listbox = _ref => {
50
+ let {
51
+ items = [],
52
+ firstItemRef = null,
53
+ // focus will be moved to this one once within the menu
54
+ parentRef = null,
55
+ // to return focus to after leaving the last menu item
56
+ selectedId: defaultSelectedId,
57
+ LinkRouter,
58
+ itemRouterProps,
59
+ onClose,
60
+ variant,
61
+ tokens
62
+ } = _ref;
63
+ const initialOpen = getInitialOpen(items, defaultSelectedId);
64
+ const [selectedId, setSelectedId] = (0, _react.useState)(defaultSelectedId);
65
+ const {
66
+ minHeight,
67
+ minWidth
68
+ } = (0, _ThemeProvider.useThemeTokens)('Listbox', variant, tokens); // We need to keep track of each item's ref in order to be able to
69
+ // focus on a specific item via keyboard navigation
70
+
71
+ const itemRefs = (0, _react.useRef)([]);
72
+ if (firstItemRef !== null && firstItemRef !== void 0 && firstItemRef.current) itemRefs.current[0] = firstItemRef.current;
73
+ const [focusedIndex, setFocusedIndex] = (0, _react.useState)(0);
74
+ const handleKeydown = (0, _react.useCallback)(event => {
75
+ const nextItemRef = itemRefs.current[focusedIndex + 1];
76
+ const prevItemRef = itemRefs.current[focusedIndex - 1];
77
+
78
+ if (event.key === 'ArrowUp' || event.shiftKey && event.key === 'Tab') {
79
+ var _parentRef$current;
80
+
81
+ // Move the focus to the previous item or to the parent one if on the first
82
+ if (prevItemRef) {
83
+ event.preventDefault();
84
+ prevItemRef.focus();
85
+ } else if (parentRef) (_parentRef$current = parentRef.current) === null || _parentRef$current === void 0 ? void 0 : _parentRef$current.focus();
86
+
87
+ setFocusedIndex(focusedIndex - 1);
88
+ } else if ((event.key === 'ArrowDown' || event.key === 'Tab') && nextItemRef) {
89
+ event.preventDefault();
90
+ setFocusedIndex(focusedIndex + 1);
91
+ nextItemRef.focus();
92
+ } else if (event.key === 'Escape') {
93
+ var _parentRef$current2, _parentRef$current3;
94
+
95
+ // Close the dropdown
96
+ parentRef === null || parentRef === void 0 ? void 0 : (_parentRef$current2 = parentRef.current) === null || _parentRef$current2 === void 0 ? void 0 : _parentRef$current2.click(); // Return focus to the dropdown control after leaving the last item
97
+
98
+ parentRef === null || parentRef === void 0 ? void 0 : (_parentRef$current3 = parentRef.current) === null || _parentRef$current3 === void 0 ? void 0 : _parentRef$current3.focus();
99
+ if (onClose) onClose(event);
100
+ }
101
+ }, [focusedIndex, onClose, parentRef]); // Add listeners for mouse clicks outside and for key presses
102
+
103
+ (0, _react.useEffect)(() => {
104
+ if (_Platform.default.OS === 'web') {
105
+ window.addEventListener('click', onClose);
106
+ window.addEventListener('keydown', handleKeydown);
107
+ window.addEventListener('touchstart', onClose);
108
+ return () => {
109
+ window.removeEventListener('click', onClose);
110
+ window.removeEventListener('keydown', handleKeydown);
111
+ window.removeEventListener('touchstart', onClose);
112
+ };
113
+ }
114
+
115
+ return () => {};
116
+ }, [onClose, handleKeydown]);
117
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_ListboxContext.ListboxContext.Provider, {
118
+ value: {
119
+ selectedId,
120
+ setSelectedId
121
+ },
122
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ExpandCollapse.default, {
123
+ initialOpen: initialOpen,
124
+ maxOpen: 1,
125
+ children: expandProps => /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
126
+ style: [styles.list, {
127
+ minHeight,
128
+ minWidth
129
+ }],
130
+ role: "listbox",
131
+ children: items.map((item, index) => {
132
+ const {
133
+ id,
134
+ label,
135
+ items: nestedItems
136
+ } = item;
137
+ const itemId = id ?? label; // Give the list of refs.
138
+
139
+ const itemRef = ref => {
140
+ itemRefs.current[index] = ref;
141
+ return ref;
142
+ };
143
+
144
+ return nestedItems ? /*#__PURE__*/(0, _react.createElement)(_ListboxGroup.default, { ...item,
145
+ expandProps: expandProps,
146
+ LinkRouter: LinkRouter,
147
+ itemRouterProps: itemRouterProps,
148
+ prevItemRef: itemRefs.current[index - 1] ?? null,
149
+ nextItemRef: itemRefs.current[index + 1] ?? null,
150
+ ref: index === 0 ? firstItemRef : itemRef,
151
+ key: itemId
152
+ }) : /*#__PURE__*/(0, _react.createElement)(_ListboxItem.default, { ...item,
153
+ key: itemId,
154
+ id: itemId,
155
+ LinkRouter: LinkRouter,
156
+ itemRouterProps: itemRouterProps,
157
+ prevItemRef: itemRefs.current[index - 1] ?? null,
158
+ nextItemRef: itemRefs.current[index + 1] ?? null,
159
+ ref: index === 0 ? firstItemRef : itemRef
160
+ });
161
+ })
162
+ })
163
+ })
164
+ });
165
+ };
166
+
167
+ Listbox.propTypes = { ..._utils.withLinkRouter.propTypes,
168
+
169
+ /**
170
+ * Focus will be moved to the item with this ref once within the menu.
171
+ */
172
+ firstItemRef: _propTypes.default.object,
173
+
174
+ /**
175
+ * Focus will be returned to the dropdown control with this ref after leaving
176
+ * the last menu item.
177
+ */
178
+ parentRef: _propTypes.default.object,
179
+
180
+ /**
181
+ * `Listbox` items
182
+ */
183
+ items: _propTypes.default.array,
184
+
185
+ /**
186
+ * To select an item by default
187
+ */
188
+ selectedId: _propTypes.default.string,
189
+
190
+ /**
191
+ * onClose event
192
+ */
193
+ onClose: _propTypes.default.func,
194
+ tokens: (0, _utils.getTokensPropType)('Listbox')
195
+ };
196
+ Listbox.Overlay = _ListboxOverlay.default;
197
+ var _default = Listbox;
198
+ exports.default = _default;
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ var _View = _interopRequireDefault(require("react-native-web/dist/cjs/exports/View"));
13
+
14
+ var _StyleSheet = _interopRequireDefault(require("react-native-web/dist/cjs/exports/StyleSheet"));
15
+
16
+ var _utils = require("../utils");
17
+
18
+ var _ExpandCollapse = _interopRequireDefault(require("../ExpandCollapse"));
19
+
20
+ var _ListboxItem = _interopRequireDefault(require("./ListboxItem"));
21
+
22
+ var _ListboxContext = require("./ListboxContext");
23
+
24
+ var _GroupControl = _interopRequireDefault(require("./GroupControl"));
25
+
26
+ var _jsxRuntime = require("react/jsx-runtime");
27
+
28
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
+
30
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
31
+
32
+ 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; }
33
+
34
+ /* eslint-disable react-native-a11y/has-valid-accessibility-role */
35
+ const styles = _StyleSheet.default.create({
36
+ groupWrapper: {
37
+ margin: 0,
38
+ padding: 0,
39
+ overflow: 'hidden'
40
+ },
41
+ list: {
42
+ margin: 0,
43
+ padding: 0
44
+ }
45
+ });
46
+
47
+ const ListboxGroup = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
48
+ let {
49
+ id,
50
+ label,
51
+ items,
52
+ LinkRouter,
53
+ linkRouterProps,
54
+ expandProps,
55
+ onLastItemBlur,
56
+ nextItemRef,
57
+ prevItemRef
58
+ } = _ref;
59
+ const {
60
+ selectedId
61
+ } = (0, _ListboxContext.useListboxContext)(); // TODO: implement keyboard navigation via refs for grouped items separately here
62
+
63
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
64
+ id: "test",
65
+ style: styles.groupWrapper,
66
+ accessibilityRole: "listitem",
67
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ExpandCollapse.default.Panel, {
68
+ panelId: id ?? label,
69
+ controlTokens: {
70
+ icon: null,
71
+ paddingLeft: 0,
72
+ paddingRight: 0,
73
+ paddingTop: 0,
74
+ paddingBottom: 0,
75
+ backgroundColor: 'transparent',
76
+ borderColor: 'transparent',
77
+ textLine: 'none',
78
+ borderWidth: 0
79
+ } // TODO refactor
80
+ // eslint-disable-next-line react/no-unstable-nested-components
81
+ ,
82
+ control: controlProps => /*#__PURE__*/(0, _jsxRuntime.jsx)(_GroupControl.default, {
83
+ id: id ?? label,
84
+ ...controlProps,
85
+ label: label
86
+ }),
87
+ ...expandProps,
88
+ tokens: {
89
+ contentPaddingLeft: 0,
90
+ contentPaddingRight: 0,
91
+ contentPaddingTop: 0,
92
+ contentPaddingBottom: 0,
93
+ borderColor: 'transparent',
94
+ borderRadius: 0,
95
+ borderWidth: 0,
96
+ marginBottom: 0
97
+ },
98
+ controlRef: ref,
99
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
100
+ style: styles.list,
101
+ children: items.map((item, index) => {
102
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_ListboxItem.default, {
103
+ id: item.id ?? item.label,
104
+ ...item,
105
+ selected: item.id && item.id === selectedId || item.label && item.label === selectedId,
106
+ isChild: true,
107
+ LinkRouter: LinkRouter,
108
+ linkRouterProps: linkRouterProps,
109
+ ...(index === 0 && {
110
+ prevItemRef
111
+ }),
112
+ ...(index === items.length - 1 && {
113
+ nextItemRef
114
+ }),
115
+ ...(index === items.length - 1 && {
116
+ onBlur: onLastItemBlur
117
+ })
118
+ }, item.label);
119
+ })
120
+ })
121
+ })
122
+ });
123
+ });
124
+ ListboxGroup.displayName = 'ListboxGroup';
125
+ ListboxGroup.propTypes = { ..._utils.withLinkRouter.propTypes,
126
+ label: _propTypes.default.string,
127
+ items: _propTypes.default.arrayOf(_propTypes.default.shape({
128
+ href: _propTypes.default.string,
129
+ label: _propTypes.default.string,
130
+ current: _propTypes.default.bool
131
+ })),
132
+ expandProps: _propTypes.default.object,
133
+ nextItemRef: _propTypes.default.object,
134
+ prevItemRef: _propTypes.default.object,
135
+
136
+ /**
137
+ * Use this callback to redirect the focus after it leaves the last item of the group.
138
+ */
139
+ onLastItemBlur: _propTypes.default.func
140
+ };
141
+ var _default = ListboxGroup;
142
+ exports.default = _default;
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ var _View = _interopRequireDefault(require("react-native-web/dist/cjs/exports/View"));
13
+
14
+ var _StyleSheet = _interopRequireDefault(require("react-native-web/dist/cjs/exports/StyleSheet"));
15
+
16
+ var _utils = require("../utils");
17
+
18
+ var _PressableItem = _interopRequireDefault(require("./PressableItem"));
19
+
20
+ var _ThemeProvider = require("../ThemeProvider");
21
+
22
+ var _jsxRuntime = require("react/jsx-runtime");
23
+
24
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
+
26
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
27
+
28
+ 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; }
29
+
30
+ /* eslint-disable react/require-default-props */
31
+ const [selectProps, selectedSystemPropTypes] = (0, _utils.selectSystemProps)([_utils.htmlAttrs]);
32
+
33
+ const styles = _StyleSheet.default.create({
34
+ itemContainer: {
35
+ display: 'flex',
36
+ margin: 0
37
+ },
38
+ childContainer: {
39
+ paddingLeft: 16
40
+ }
41
+ });
42
+
43
+ const ListboxItem = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
44
+ let {
45
+ href,
46
+ label,
47
+ isChild = false,
48
+ onBlur,
49
+ nextItemRef,
50
+ prevItemRef,
51
+ tokens,
52
+ variant = {},
53
+ LinkRouter,
54
+ linkRouterProps,
55
+ id,
56
+ onPress = () => {},
57
+ ...rest
58
+ } = _ref;
59
+ const selectedProps = selectProps({
60
+ href,
61
+ ...rest
62
+ });
63
+ const getTokens = (0, _ThemeProvider.useThemeTokensCallback)('Listbox', tokens, variant, {
64
+ isChild
65
+ });
66
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
67
+ style: [styles.itemContainer, isChild && styles.childContainer],
68
+ role: "option",
69
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_PressableItem.default, {
70
+ href: href,
71
+ isChild: isChild,
72
+ onPress: onPress,
73
+ onBlur: onBlur,
74
+ nextItemRef: nextItemRef,
75
+ prevItemRef: prevItemRef,
76
+ ref: ref,
77
+ tokens: getTokens,
78
+ selectedProps: selectedProps,
79
+ id: id,
80
+ children: label
81
+ })
82
+ });
83
+ });
84
+ ListboxItem.displayName = 'ListboxItem';
85
+ ListboxItem.propTypes = { ...selectedSystemPropTypes,
86
+ ..._utils.withLinkRouter.propTypes,
87
+ href: _propTypes.default.string,
88
+ isChild: _propTypes.default.bool,
89
+ label: _propTypes.default.node.isRequired,
90
+ nextItemRef: _propTypes.default.object,
91
+ prevItemRef: _propTypes.default.object,
92
+ onPress: _propTypes.default.func
93
+ };
94
+
95
+ var _default = (0, _utils.withLinkRouter)(ListboxItem);
96
+
97
+ exports.default = _default;