@carbon/react 1.43.0-rc.0 → 1.44.0-rc.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/.playwright/INTERNAL_AVT_REPORT_DO_NOT_USE.json +1161 -1001
- package/es/components/ComboBox/ComboBox.js +12 -0
- package/es/components/ComboButton/index.js +2 -1
- package/es/components/ComposedModal/ComposedModal.d.ts +3 -3
- package/es/components/ComposedModal/ComposedModal.js +3 -3
- package/es/components/ContextMenu/useContextMenu.js +2 -1
- package/es/components/DataTableSkeleton/DataTableSkeleton.js +1 -1
- package/es/components/Dropdown/Dropdown.js +4 -1
- package/es/components/Link/Link.d.ts +5 -0
- package/es/components/Link/Link.js +9 -2
- package/es/components/Menu/Menu.js +14 -0
- package/es/components/Menu/MenuContext.js +1 -0
- package/es/components/Menu/MenuItem.js +19 -4
- package/es/components/MenuButton/index.js +3 -1
- package/es/components/Slug/index.js +1 -1
- package/es/components/UIShell/SideNav.js +1 -1
- package/es/components/UIShell/Switcher.d.ts +38 -0
- package/es/components/UIShell/Switcher.js +14 -13
- package/es/components/UIShell/SwitcherDivider.d.ts +9 -0
- package/es/components/UIShell/SwitcherDivider.js +4 -5
- package/es/components/UIShell/SwitcherItem.d.ts +49 -0
- package/es/components/UIShell/SwitcherItem.js +13 -17
- package/es/prop-types/tools/getDisplayName.js +34 -0
- package/lib/components/ComboBox/ComboBox.js +12 -0
- package/lib/components/ComboButton/index.js +2 -1
- package/lib/components/ComposedModal/ComposedModal.d.ts +3 -3
- package/lib/components/ComposedModal/ComposedModal.js +3 -3
- package/lib/components/ContextMenu/useContextMenu.js +2 -1
- package/lib/components/DataTableSkeleton/DataTableSkeleton.js +1 -1
- package/lib/components/Dropdown/Dropdown.js +4 -1
- package/lib/components/Link/Link.d.ts +5 -0
- package/lib/components/Link/Link.js +9 -2
- package/lib/components/Menu/Menu.js +14 -0
- package/lib/components/Menu/MenuContext.js +1 -0
- package/lib/components/Menu/MenuItem.js +19 -4
- package/lib/components/MenuButton/index.js +3 -1
- package/lib/components/Slug/index.js +1 -1
- package/lib/components/UIShell/SideNav.js +1 -1
- package/lib/components/UIShell/Switcher.d.ts +38 -0
- package/lib/components/UIShell/Switcher.js +13 -12
- package/lib/components/UIShell/SwitcherDivider.d.ts +9 -0
- package/lib/components/UIShell/SwitcherDivider.js +4 -5
- package/lib/components/UIShell/SwitcherItem.d.ts +49 -0
- package/lib/components/UIShell/SwitcherItem.js +12 -16
- package/lib/prop-types/tools/getDisplayName.js +38 -0
- package/package.json +3 -3
|
@@ -362,6 +362,18 @@ const ComboBox = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
362
362
|
if (match.match(event, keys.End) && event.code !== 'Numpad1') {
|
|
363
363
|
event.target.setSelectionRange(event.target.value.length, event.target.value.length);
|
|
364
364
|
}
|
|
365
|
+
if (event.altKey && event.key == 'ArrowDown') {
|
|
366
|
+
event.preventDownshiftDefault = true;
|
|
367
|
+
if (!isOpen) {
|
|
368
|
+
toggleMenu();
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
if (event.altKey && event.key == 'ArrowUp') {
|
|
372
|
+
event.preventDownshiftDefault = true;
|
|
373
|
+
if (isOpen) {
|
|
374
|
+
toggleMenu();
|
|
375
|
+
}
|
|
376
|
+
}
|
|
365
377
|
}
|
|
366
378
|
});
|
|
367
379
|
const handleFocus = evt => {
|
|
@@ -78,7 +78,7 @@ const ComboButton = /*#__PURE__*/React__default["default"].forwardRef(function C
|
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
80
|
function handleOpen() {
|
|
81
|
-
menuRef.current.style.
|
|
81
|
+
menuRef.current.style.inlineSize = `${width}px`;
|
|
82
82
|
}
|
|
83
83
|
const containerClasses = cx__default["default"](`${prefix}--combo-button__container`, `${prefix}--combo-button__container--${size}`, {
|
|
84
84
|
[`${prefix}--combo-button__container--open`]: open
|
|
@@ -110,6 +110,7 @@ const ComboButton = /*#__PURE__*/React__default["default"].forwardRef(function C
|
|
|
110
110
|
ref: menuRef,
|
|
111
111
|
id: id,
|
|
112
112
|
label: t('carbon.combo-button.additional-actions'),
|
|
113
|
+
mode: "basic",
|
|
113
114
|
size: size,
|
|
114
115
|
open: open,
|
|
115
116
|
onClose: handleClose,
|
|
@@ -4,7 +4,7 @@ export interface ModalBodyProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
4
4
|
children?: ReactNode;
|
|
5
5
|
/**
|
|
6
6
|
* Provide whether the modal content has a form element.
|
|
7
|
-
* If `true` is used here, non-form child content should have `
|
|
7
|
+
* If `true` is used here, non-form child content should have `cds--modal-content__regular-content` class.
|
|
8
8
|
*/
|
|
9
9
|
hasForm?: boolean;
|
|
10
10
|
/**
|
|
@@ -15,11 +15,11 @@ export interface ModalBodyProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
15
15
|
export declare const ModalBody: React.ForwardRefExoticComponent<ModalBodyProps & React.RefAttributes<HTMLDivElement>>;
|
|
16
16
|
export interface ComposedModalProps extends HTMLAttributes<HTMLDivElement> {
|
|
17
17
|
/**
|
|
18
|
-
* Specify the aria-label for
|
|
18
|
+
* Specify the aria-label for cds--modal-container
|
|
19
19
|
*/
|
|
20
20
|
'aria-label'?: string;
|
|
21
21
|
/**
|
|
22
|
-
* Specify the aria-labelledby for
|
|
22
|
+
* Specify the aria-labelledby for cds--modal-container
|
|
23
23
|
*/
|
|
24
24
|
'aria-labelledby'?: string;
|
|
25
25
|
/**
|
|
@@ -66,7 +66,7 @@ ModalBody.propTypes = {
|
|
|
66
66
|
className: PropTypes__default["default"].string,
|
|
67
67
|
/**
|
|
68
68
|
* Provide whether the modal content has a form element.
|
|
69
|
-
* If `true` is used here, non-form child content should have `
|
|
69
|
+
* If `true` is used here, non-form child content should have `cds--modal-content__regular-content` class.
|
|
70
70
|
*/
|
|
71
71
|
hasForm: PropTypes__default["default"].bool,
|
|
72
72
|
/**
|
|
@@ -241,11 +241,11 @@ const ComposedModal = /*#__PURE__*/React__default["default"].forwardRef(function
|
|
|
241
241
|
});
|
|
242
242
|
ComposedModal.propTypes = {
|
|
243
243
|
/**
|
|
244
|
-
* Specify the aria-label for
|
|
244
|
+
* Specify the aria-label for cds--modal-container
|
|
245
245
|
*/
|
|
246
246
|
['aria-label']: PropTypes__default["default"].string,
|
|
247
247
|
/**
|
|
248
|
-
* Specify the aria-labelledby for
|
|
248
|
+
* Specify the aria-labelledby for cds--modal-container
|
|
249
249
|
*/
|
|
250
250
|
['aria-labelledby']: PropTypes__default["default"].string,
|
|
251
251
|
/**
|
|
@@ -73,7 +73,7 @@ const DataTableSkeleton = _ref => {
|
|
|
73
73
|
}, rest), /*#__PURE__*/React__default["default"].createElement("thead", null, /*#__PURE__*/React__default["default"].createElement("tr", null, columnsArray.map(i => /*#__PURE__*/React__default["default"].createElement("th", {
|
|
74
74
|
key: i
|
|
75
75
|
}, headers ? /*#__PURE__*/React__default["default"].createElement("div", {
|
|
76
|
-
className: "
|
|
76
|
+
className: "cds--table-header-label"
|
|
77
77
|
}, headers[i]?.header) : _span2 || (_span2 = /*#__PURE__*/React__default["default"].createElement("span", null)))))), /*#__PURE__*/React__default["default"].createElement("tbody", null, rows)));
|
|
78
78
|
};
|
|
79
79
|
DataTableSkeleton.propTypes = {
|
|
@@ -287,6 +287,9 @@ const Dropdown = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref) =
|
|
|
287
287
|
item,
|
|
288
288
|
index: index$1
|
|
289
289
|
});
|
|
290
|
+
if (item !== null && typeof item === 'object' && Object.prototype.hasOwnProperty.call(item, 'id')) {
|
|
291
|
+
itemProps.id = item['id'];
|
|
292
|
+
}
|
|
290
293
|
const title = isObject && 'text' in item && itemToElement ? item.text : itemToString(item);
|
|
291
294
|
return /*#__PURE__*/React__default["default"].createElement(index["default"].MenuItem, _rollupPluginBabelHelpers["extends"]({
|
|
292
295
|
key: itemProps.id,
|
|
@@ -314,7 +317,7 @@ Dropdown.propTypes = {
|
|
|
314
317
|
*/
|
|
315
318
|
ariaLabel: deprecate["default"](PropTypes__default["default"].string, 'This prop syntax has been deprecated. Please use the new `aria-label`.'),
|
|
316
319
|
/**
|
|
317
|
-
* Provide a custom className to be applied on the
|
|
320
|
+
* Provide a custom className to be applied on the cds--dropdown node
|
|
318
321
|
*/
|
|
319
322
|
className: PropTypes__default["default"].string,
|
|
320
323
|
/**
|
|
@@ -6,6 +6,11 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import React, { AnchorHTMLAttributes, AriaAttributes, ComponentType, HTMLAttributeAnchorTarget } from 'react';
|
|
8
8
|
export interface LinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
|
|
9
|
+
/**
|
|
10
|
+
* Provide a custom element or component to render the top-level node for the
|
|
11
|
+
* component.
|
|
12
|
+
*/
|
|
13
|
+
as?: string | undefined;
|
|
9
14
|
/**
|
|
10
15
|
* @description Indicates the element that represents the
|
|
11
16
|
* current item within a container or set of related
|
|
@@ -23,6 +23,7 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
|
23
23
|
|
|
24
24
|
const Link = /*#__PURE__*/React__default["default"].forwardRef(function Link(_ref, ref) {
|
|
25
25
|
let {
|
|
26
|
+
as: BaseComponent,
|
|
26
27
|
children,
|
|
27
28
|
className: customClassName,
|
|
28
29
|
href,
|
|
@@ -43,7 +44,7 @@ const Link = /*#__PURE__*/React__default["default"].forwardRef(function Link(_re
|
|
|
43
44
|
});
|
|
44
45
|
const rel = target === '_blank' ? 'noopener' : undefined;
|
|
45
46
|
const linkProps = {
|
|
46
|
-
className,
|
|
47
|
+
className: BaseComponent ? undefined : className,
|
|
47
48
|
rel,
|
|
48
49
|
target
|
|
49
50
|
};
|
|
@@ -56,7 +57,8 @@ const Link = /*#__PURE__*/React__default["default"].forwardRef(function Link(_re
|
|
|
56
57
|
linkProps.role = 'link';
|
|
57
58
|
linkProps['aria-disabled'] = true;
|
|
58
59
|
}
|
|
59
|
-
|
|
60
|
+
const BaseComponentAsAny = BaseComponent ?? 'a';
|
|
61
|
+
return /*#__PURE__*/React__default["default"].createElement(BaseComponentAsAny, _rollupPluginBabelHelpers["extends"]({
|
|
60
62
|
ref: ref
|
|
61
63
|
}, linkProps, rest), children, !inline && Icon && /*#__PURE__*/React__default["default"].createElement("div", {
|
|
62
64
|
className: `${prefix}--link__icon`
|
|
@@ -64,6 +66,11 @@ const Link = /*#__PURE__*/React__default["default"].forwardRef(function Link(_re
|
|
|
64
66
|
});
|
|
65
67
|
Link.displayName = 'Link';
|
|
66
68
|
Link.propTypes = {
|
|
69
|
+
/**
|
|
70
|
+
* Provide a custom element or component to render the top-level node for the
|
|
71
|
+
* component.
|
|
72
|
+
*/
|
|
73
|
+
as: PropTypes__default["default"].string,
|
|
67
74
|
/**
|
|
68
75
|
* Provide the content for the Link
|
|
69
76
|
*/
|
|
@@ -16,6 +16,7 @@ var React = require('react');
|
|
|
16
16
|
var ReactDOM = require('react-dom');
|
|
17
17
|
var useMergedRefs = require('../../internal/useMergedRefs.js');
|
|
18
18
|
var usePrefix = require('../../internal/usePrefix.js');
|
|
19
|
+
var warning = require('../../internal/warning.js');
|
|
19
20
|
var MenuContext = require('./MenuContext.js');
|
|
20
21
|
var useLayoutDirection = require('../LayoutDirection/useLayoutDirection.js');
|
|
21
22
|
var match = require('../../internal/keyboard/match.js');
|
|
@@ -34,6 +35,7 @@ const Menu = /*#__PURE__*/React__default["default"].forwardRef(function Menu(_re
|
|
|
34
35
|
children,
|
|
35
36
|
className,
|
|
36
37
|
label,
|
|
38
|
+
mode = 'full',
|
|
37
39
|
onClose,
|
|
38
40
|
onOpen,
|
|
39
41
|
open,
|
|
@@ -47,10 +49,14 @@ const Menu = /*#__PURE__*/React__default["default"].forwardRef(function Menu(_re
|
|
|
47
49
|
const focusReturn = React.useRef(null);
|
|
48
50
|
const context = React.useContext(MenuContext.MenuContext);
|
|
49
51
|
const isRoot = context.state.isRoot;
|
|
52
|
+
if (context.state.mode === 'basic' && !isRoot) {
|
|
53
|
+
process.env.NODE_ENV !== "production" ? warning.warning(false, 'Nested menus are not supported when the menu is in "basic" mode.') : void 0;
|
|
54
|
+
}
|
|
50
55
|
const menuSize = isRoot ? size : context.state.size;
|
|
51
56
|
const [childState, childDispatch] = React.useReducer(MenuContext.menuReducer, {
|
|
52
57
|
...context.state,
|
|
53
58
|
isRoot: false,
|
|
59
|
+
mode,
|
|
54
60
|
size,
|
|
55
61
|
requestCloseRoot: isRoot ? handleClose : context.state.requestCloseRoot
|
|
56
62
|
});
|
|
@@ -255,6 +261,14 @@ Menu.propTypes = {
|
|
|
255
261
|
* A label describing the Menu.
|
|
256
262
|
*/
|
|
257
263
|
label: PropTypes__default["default"].string,
|
|
264
|
+
/**
|
|
265
|
+
* The mode of this menu. Defaults to full.
|
|
266
|
+
* `full` supports nesting and selectable menu items, but no icons.
|
|
267
|
+
* `basic` supports icons but no nesting or selectable menu items.
|
|
268
|
+
*
|
|
269
|
+
* **This prop is not intended for use and will be set by the respective implementation (like useContextMenu, MenuButton, and ComboButton).**
|
|
270
|
+
*/
|
|
271
|
+
mode: PropTypes__default["default"].oneOf(['full', 'basic']),
|
|
258
272
|
/**
|
|
259
273
|
* Provide an optional function to be called when the Menu should be closed.
|
|
260
274
|
*/
|
|
@@ -17,6 +17,7 @@ var iconsReact = require('@carbon/icons-react');
|
|
|
17
17
|
var useControllableState = require('../../internal/useControllableState.js');
|
|
18
18
|
var useMergedRefs = require('../../internal/useMergedRefs.js');
|
|
19
19
|
var usePrefix = require('../../internal/usePrefix.js');
|
|
20
|
+
var warning = require('../../internal/warning.js');
|
|
20
21
|
var Menu = require('./Menu.js');
|
|
21
22
|
var MenuContext = require('./MenuContext.js');
|
|
22
23
|
require('../Text/index.js');
|
|
@@ -153,6 +154,14 @@ const MenuItem = /*#__PURE__*/React__default["default"].forwardRef(function Menu
|
|
|
153
154
|
setRtl(false);
|
|
154
155
|
}
|
|
155
156
|
}, [direction]);
|
|
157
|
+
const iconsAllowed = context.state.mode === 'basic' || rest.role === 'menuitemcheckbox' || rest.role === 'menuitemradio';
|
|
158
|
+
React.useEffect(() => {
|
|
159
|
+
if (iconsAllowed && IconElement && !context.state.hasIcons) {
|
|
160
|
+
context.dispatch({
|
|
161
|
+
type: 'enableIcons'
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
}, [iconsAllowed, IconElement, context.state.hasIcons, context]);
|
|
156
165
|
return /*#__PURE__*/React__default["default"].createElement("li", _rollupPluginBabelHelpers["extends"]({
|
|
157
166
|
role: "menuitem"
|
|
158
167
|
}, rest, {
|
|
@@ -168,7 +177,7 @@ const MenuItem = /*#__PURE__*/React__default["default"].forwardRef(function Menu
|
|
|
168
177
|
onKeyDown: handleKeyDown
|
|
169
178
|
}), /*#__PURE__*/React__default["default"].createElement("div", {
|
|
170
179
|
className: `${prefix}--menu-item__icon`
|
|
171
|
-
}, IconElement && /*#__PURE__*/React__default["default"].createElement(IconElement, null)), /*#__PURE__*/React__default["default"].createElement(Text.Text, {
|
|
180
|
+
}, iconsAllowed && IconElement && /*#__PURE__*/React__default["default"].createElement(IconElement, null)), /*#__PURE__*/React__default["default"].createElement(Text.Text, {
|
|
172
181
|
as: "div",
|
|
173
182
|
className: `${prefix}--menu-item__label`
|
|
174
183
|
}, label), shortcut && !hasChildren && /*#__PURE__*/React__default["default"].createElement("div", {
|
|
@@ -212,7 +221,7 @@ MenuItem.propTypes = {
|
|
|
212
221
|
*/
|
|
213
222
|
onClick: PropTypes__default["default"].func,
|
|
214
223
|
/**
|
|
215
|
-
*
|
|
224
|
+
* Only applicable if the parent menu is in `basic` mode. Sets the menu item's icon.
|
|
216
225
|
*/
|
|
217
226
|
renderIcon: PropTypes__default["default"].oneOfType([PropTypes__default["default"].func, PropTypes__default["default"].object]),
|
|
218
227
|
/**
|
|
@@ -231,6 +240,9 @@ const MenuItemSelectable = /*#__PURE__*/React__default["default"].forwardRef(fun
|
|
|
231
240
|
} = _ref2;
|
|
232
241
|
const prefix = usePrefix.usePrefix();
|
|
233
242
|
const context = React.useContext(MenuContext.MenuContext);
|
|
243
|
+
if (context.state.mode === 'basic') {
|
|
244
|
+
process.env.NODE_ENV !== "production" ? warning.warning(false, 'MenuItemSelectable is not supported when the menu is in "basic" mode.') : void 0;
|
|
245
|
+
}
|
|
234
246
|
const [checked, setChecked] = useControllableState.useControllableState({
|
|
235
247
|
value: selected,
|
|
236
248
|
onChange,
|
|
@@ -256,7 +268,7 @@ const MenuItemSelectable = /*#__PURE__*/React__default["default"].forwardRef(fun
|
|
|
256
268
|
className: classNames,
|
|
257
269
|
role: "menuitemcheckbox",
|
|
258
270
|
"aria-checked": checked,
|
|
259
|
-
renderIcon: checked
|
|
271
|
+
renderIcon: checked ? iconsReact.Checkmark : undefined,
|
|
260
272
|
onClick: handleClick
|
|
261
273
|
}));
|
|
262
274
|
});
|
|
@@ -328,6 +340,9 @@ const MenuItemRadioGroup = /*#__PURE__*/React__default["default"].forwardRef(fun
|
|
|
328
340
|
} = _ref4;
|
|
329
341
|
const prefix = usePrefix.usePrefix();
|
|
330
342
|
const context = React.useContext(MenuContext.MenuContext);
|
|
343
|
+
if (context.state.mode === 'basic') {
|
|
344
|
+
process.env.NODE_ENV !== "production" ? warning.warning(false, 'MenuItemRadioGroup is not supported when the menu is in "basic" mode.') : void 0;
|
|
345
|
+
}
|
|
331
346
|
const [selection, setSelection] = useControllableState.useControllableState({
|
|
332
347
|
value: selectedItem,
|
|
333
348
|
onChange,
|
|
@@ -359,7 +374,7 @@ const MenuItemRadioGroup = /*#__PURE__*/React__default["default"].forwardRef(fun
|
|
|
359
374
|
label: itemToString(item),
|
|
360
375
|
role: "menuitemradio",
|
|
361
376
|
"aria-checked": item === selection,
|
|
362
|
-
renderIcon: item === selection
|
|
377
|
+
renderIcon: item === selection ? iconsReact.Checkmark : undefined,
|
|
363
378
|
onClick: e => {
|
|
364
379
|
handleClick(item, e);
|
|
365
380
|
}
|
|
@@ -67,6 +67,7 @@ const MenuButton = /*#__PURE__*/React__default["default"].forwardRef(function Me
|
|
|
67
67
|
function handleOpen() {
|
|
68
68
|
menuRef.current.style.inlineSize = `${width}px`;
|
|
69
69
|
}
|
|
70
|
+
const containerClasses = cx__default["default"](`${prefix}--menu-button__container`, className);
|
|
70
71
|
const triggerClasses = cx__default["default"](`${prefix}--menu-button__trigger`, {
|
|
71
72
|
[`${prefix}--menu-button__trigger--open`]: open
|
|
72
73
|
});
|
|
@@ -74,7 +75,7 @@ const MenuButton = /*#__PURE__*/React__default["default"].forwardRef(function Me
|
|
|
74
75
|
return /*#__PURE__*/React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({}, rest, {
|
|
75
76
|
ref: ref,
|
|
76
77
|
"aria-owns": open ? id : null,
|
|
77
|
-
className:
|
|
78
|
+
className: containerClasses
|
|
78
79
|
}), /*#__PURE__*/React__default["default"].createElement(Button["default"], {
|
|
79
80
|
className: triggerClasses,
|
|
80
81
|
size: size,
|
|
@@ -90,6 +91,7 @@ const MenuButton = /*#__PURE__*/React__default["default"].forwardRef(function Me
|
|
|
90
91
|
ref: menuRef,
|
|
91
92
|
id: id,
|
|
92
93
|
label: label,
|
|
94
|
+
mode: "basic",
|
|
93
95
|
size: size,
|
|
94
96
|
open: open,
|
|
95
97
|
onClose: handleClose,
|
|
@@ -113,7 +113,7 @@ const Slug = /*#__PURE__*/React__default["default"].forwardRef(function Slug(_re
|
|
|
113
113
|
onRevertClick(evt);
|
|
114
114
|
}
|
|
115
115
|
};
|
|
116
|
-
const ariaLabel = `${aiText} - ${slugLabel}`;
|
|
116
|
+
const ariaLabel = !aiTextLabel ? `${aiText} - ${slugLabel}` : `${aiText} - ${aiTextLabel}`;
|
|
117
117
|
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
118
118
|
className: slugClasses,
|
|
119
119
|
ref: ref,
|
|
@@ -180,7 +180,7 @@ function SideNavRenderFunction(_ref, ref) {
|
|
|
180
180
|
tabIndex: -1,
|
|
181
181
|
ref: navRef,
|
|
182
182
|
className: `${prefix}--side-nav__navigation ${className}`,
|
|
183
|
-
inert: !isRail
|
|
183
|
+
inert: !isRail ? expanded || isLg ? undefined : -1 : undefined
|
|
184
184
|
}, accessibilityLabel, eventHandlers, other), childrenToRender));
|
|
185
185
|
}
|
|
186
186
|
const SideNav = /*#__PURE__*/React__default["default"].forwardRef(SideNavRenderFunction);
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright IBM Corp. 2016, 2023
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the Apache-2.0 license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Copyright IBM Corp. 2016, 2023
|
|
9
|
+
*
|
|
10
|
+
* This source code is licensed under the Apache-2.0 license found in the
|
|
11
|
+
* LICENSE file in the root directory of this source tree.
|
|
12
|
+
*/
|
|
13
|
+
import React, { ReactNode } from 'react';
|
|
14
|
+
interface BaseSwitcherProps {
|
|
15
|
+
/**
|
|
16
|
+
* expects to receive <SwitcherItem />
|
|
17
|
+
*/
|
|
18
|
+
children: ReactNode;
|
|
19
|
+
/**
|
|
20
|
+
* Optionally provide a custom class to apply to the underlying `<ul>` node
|
|
21
|
+
*/
|
|
22
|
+
className?: string;
|
|
23
|
+
/**
|
|
24
|
+
* Specify whether the panel is expanded
|
|
25
|
+
*/
|
|
26
|
+
expanded?: boolean;
|
|
27
|
+
}
|
|
28
|
+
interface SwitcherWithAriaLabel extends BaseSwitcherProps {
|
|
29
|
+
'aria-label': string;
|
|
30
|
+
'aria-labelledby'?: never;
|
|
31
|
+
}
|
|
32
|
+
interface SwitcherWithAriaLabelledBy extends BaseSwitcherProps {
|
|
33
|
+
'aria-label'?: never;
|
|
34
|
+
'aria-labelledby': string;
|
|
35
|
+
}
|
|
36
|
+
type SwitcherProps = SwitcherWithAriaLabel | SwitcherWithAriaLabelledBy;
|
|
37
|
+
declare const Switcher: React.ForwardRefExoticComponent<SwitcherProps & React.RefAttributes<HTMLUListElement>>;
|
|
38
|
+
export default Switcher;
|
|
@@ -12,10 +12,11 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
12
12
|
var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelpers.js');
|
|
13
13
|
var React = require('react');
|
|
14
14
|
var cx = require('classnames');
|
|
15
|
-
var PropTypes = require('prop-types');
|
|
16
|
-
var AriaPropTypes = require('../../prop-types/AriaPropTypes.js');
|
|
17
15
|
var usePrefix = require('../../internal/usePrefix.js');
|
|
18
16
|
var useMergedRefs = require('../../internal/useMergedRefs.js');
|
|
17
|
+
var PropTypes = require('prop-types');
|
|
18
|
+
var AriaPropTypes = require('../../prop-types/AriaPropTypes.js');
|
|
19
|
+
var getDisplayName = require('../../prop-types/tools/getDisplayName.js');
|
|
19
20
|
|
|
20
21
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
21
22
|
|
|
@@ -23,7 +24,7 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
|
23
24
|
var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
|
|
24
25
|
var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
|
|
25
26
|
|
|
26
|
-
const Switcher = /*#__PURE__*/
|
|
27
|
+
const Switcher = /*#__PURE__*/React.forwardRef(function Switcher(props, forwardRef) {
|
|
27
28
|
const switcherRef = React.useRef(null);
|
|
28
29
|
const ref = useMergedRefs.useMergedRefs([switcherRef, forwardRef]);
|
|
29
30
|
const prefix = usePrefix.usePrefix();
|
|
@@ -39,7 +40,7 @@ const Switcher = /*#__PURE__*/React__default["default"].forwardRef(function Swit
|
|
|
39
40
|
'aria-labelledby': ariaLabelledBy
|
|
40
41
|
};
|
|
41
42
|
const className = cx__default["default"](`${prefix}--switcher`, {
|
|
42
|
-
[customClassName]: !!customClassName
|
|
43
|
+
[customClassName || '']: !!customClassName
|
|
43
44
|
});
|
|
44
45
|
const handleSwitcherItemFocus = _ref => {
|
|
45
46
|
let {
|
|
@@ -64,13 +65,14 @@ const Switcher = /*#__PURE__*/React__default["default"].forwardRef(function Swit
|
|
|
64
65
|
return enabledIndices[nextIndex];
|
|
65
66
|
}
|
|
66
67
|
})();
|
|
67
|
-
const switcherItem = switcherRef.current
|
|
68
|
-
switcherItem
|
|
68
|
+
const switcherItem = switcherRef.current?.children[nextValidIndex]?.children[0];
|
|
69
|
+
if (switcherItem) {
|
|
70
|
+
switcherItem.focus();
|
|
71
|
+
}
|
|
69
72
|
};
|
|
70
|
-
const childrenWithProps = React__default["default"].Children.
|
|
71
|
-
//
|
|
72
|
-
|
|
73
|
-
if (child.type?.displayName === 'SwitcherItem') {
|
|
73
|
+
const childrenWithProps = React__default["default"].Children.map(children, (child, index) => {
|
|
74
|
+
// only setup click handlers if onChange event is passed
|
|
75
|
+
if ( /*#__PURE__*/React__default["default"].isValidElement(child) && child.type && getDisplayName["default"](child.type) === 'Switcher') {
|
|
74
76
|
return /*#__PURE__*/React__default["default"].cloneElement(child, {
|
|
75
77
|
handleSwitcherItemFocus,
|
|
76
78
|
index,
|
|
@@ -108,6 +110,5 @@ Switcher.propTypes = {
|
|
|
108
110
|
*/
|
|
109
111
|
expanded: PropTypes__default["default"].bool
|
|
110
112
|
};
|
|
111
|
-
var Switcher$1 = Switcher;
|
|
112
113
|
|
|
113
|
-
exports["default"] = Switcher
|
|
114
|
+
exports["default"] = Switcher;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface SwitcherDividerProps {
|
|
3
|
+
/**
|
|
4
|
+
* Optionally provide a custom class to apply to the underlying `<li>` node
|
|
5
|
+
*/
|
|
6
|
+
className?: string;
|
|
7
|
+
}
|
|
8
|
+
declare const SwitcherDivider: React.FC<SwitcherDividerProps>;
|
|
9
|
+
export default SwitcherDivider;
|
|
@@ -27,11 +27,11 @@ const SwitcherDivider = _ref => {
|
|
|
27
27
|
...other
|
|
28
28
|
} = _ref;
|
|
29
29
|
const prefix = usePrefix.usePrefix();
|
|
30
|
-
const
|
|
31
|
-
[customClassName]: !!customClassName
|
|
30
|
+
const classNames = cx__default["default"](`${prefix}--switcher__item--divider`, {
|
|
31
|
+
[customClassName || '']: !!customClassName
|
|
32
32
|
});
|
|
33
33
|
return /*#__PURE__*/React__default["default"].createElement("hr", _rollupPluginBabelHelpers["extends"]({}, other, {
|
|
34
|
-
className:
|
|
34
|
+
className: classNames
|
|
35
35
|
}));
|
|
36
36
|
};
|
|
37
37
|
SwitcherDivider.propTypes = {
|
|
@@ -40,6 +40,5 @@ SwitcherDivider.propTypes = {
|
|
|
40
40
|
*/
|
|
41
41
|
className: PropTypes__default["default"].string
|
|
42
42
|
};
|
|
43
|
-
var SwitcherDivider$1 = SwitcherDivider;
|
|
44
43
|
|
|
45
|
-
exports["default"] = SwitcherDivider
|
|
44
|
+
exports["default"] = SwitcherDivider;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface BaseSwitcherItemProps {
|
|
3
|
+
/**
|
|
4
|
+
* Specify the text content for the link
|
|
5
|
+
*/
|
|
6
|
+
children: React.ReactNode;
|
|
7
|
+
/**
|
|
8
|
+
* Optionally provide a custom class to apply to the underlying `<li>` node
|
|
9
|
+
*/
|
|
10
|
+
className?: string;
|
|
11
|
+
/**
|
|
12
|
+
* event handlers
|
|
13
|
+
*/
|
|
14
|
+
handleSwitcherItemFocus?: (event: {
|
|
15
|
+
currentIndex: number;
|
|
16
|
+
direction: number;
|
|
17
|
+
}) => void;
|
|
18
|
+
/**
|
|
19
|
+
* Specify the index of the SwitcherItem
|
|
20
|
+
*/
|
|
21
|
+
index?: number;
|
|
22
|
+
/**
|
|
23
|
+
* event handlers
|
|
24
|
+
*/
|
|
25
|
+
onKeyDown?: (event: KeyboardEvent) => void;
|
|
26
|
+
/**
|
|
27
|
+
* Specify the tab index of the Link
|
|
28
|
+
*/
|
|
29
|
+
tabIndex?: number;
|
|
30
|
+
/**
|
|
31
|
+
* Specify whether the panel is expanded
|
|
32
|
+
*/
|
|
33
|
+
expanded?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Specify whether the panel is selected
|
|
36
|
+
*/
|
|
37
|
+
isSelected?: boolean;
|
|
38
|
+
}
|
|
39
|
+
interface SwitcherItemWithAriaLabel extends BaseSwitcherItemProps {
|
|
40
|
+
'aria-label': string;
|
|
41
|
+
'aria-labelledby'?: never;
|
|
42
|
+
}
|
|
43
|
+
interface SwitcherItemWithAriaLabelledBy extends BaseSwitcherItemProps {
|
|
44
|
+
'aria-label'?: never;
|
|
45
|
+
'aria-labelledby': string;
|
|
46
|
+
}
|
|
47
|
+
type SwitcherItemProps = SwitcherItemWithAriaLabel | SwitcherItemWithAriaLabelledBy;
|
|
48
|
+
declare const SwitcherItem: React.ForwardRefExoticComponent<SwitcherItemProps & React.RefAttributes<React.ElementType<any>>>;
|
|
49
|
+
export default SwitcherItem;
|
|
@@ -13,9 +13,9 @@ var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelper
|
|
|
13
13
|
var React = require('react');
|
|
14
14
|
var cx = require('classnames');
|
|
15
15
|
var PropTypes = require('prop-types');
|
|
16
|
-
var AriaPropTypes = require('../../prop-types/AriaPropTypes.js');
|
|
17
16
|
var Link = require('./Link.js');
|
|
18
17
|
var usePrefix = require('../../internal/usePrefix.js');
|
|
18
|
+
var AriaPropTypes = require('../../prop-types/AriaPropTypes.js');
|
|
19
19
|
var match = require('../../internal/keyboard/match.js');
|
|
20
20
|
var keys = require('../../internal/keyboard/keys.js');
|
|
21
21
|
|
|
@@ -25,8 +25,8 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
|
25
25
|
var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
|
|
26
26
|
var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
|
|
27
27
|
|
|
28
|
-
const SwitcherItem = /*#__PURE__*/
|
|
29
|
-
|
|
28
|
+
const SwitcherItem = /*#__PURE__*/React.forwardRef(function SwitcherItem(props, forwardRef) {
|
|
29
|
+
const {
|
|
30
30
|
'aria-label': ariaLabel,
|
|
31
31
|
'aria-labelledby': ariaLabelledBy,
|
|
32
32
|
className: customClassName,
|
|
@@ -38,10 +38,10 @@ const SwitcherItem = /*#__PURE__*/React__default["default"].forwardRef(function
|
|
|
38
38
|
handleSwitcherItemFocus,
|
|
39
39
|
onKeyDown = () => {},
|
|
40
40
|
...rest
|
|
41
|
-
} =
|
|
41
|
+
} = props;
|
|
42
42
|
const prefix = usePrefix.usePrefix();
|
|
43
|
-
const
|
|
44
|
-
[customClassName]: !!customClassName
|
|
43
|
+
const classNames = cx__default["default"](`${prefix}--switcher__item`, {
|
|
44
|
+
[customClassName || '']: !!customClassName
|
|
45
45
|
});
|
|
46
46
|
const accessibilityLabel = {
|
|
47
47
|
'aria-label': ariaLabel,
|
|
@@ -54,36 +54,33 @@ const SwitcherItem = /*#__PURE__*/React__default["default"].forwardRef(function
|
|
|
54
54
|
if (match.match(evt, keys.ArrowDown)) {
|
|
55
55
|
evt.preventDefault();
|
|
56
56
|
handleSwitcherItemFocus?.({
|
|
57
|
-
currentIndex: index,
|
|
57
|
+
currentIndex: index || -1,
|
|
58
58
|
direction: 1
|
|
59
59
|
});
|
|
60
60
|
}
|
|
61
61
|
if (match.match(evt, keys.ArrowUp)) {
|
|
62
62
|
evt.preventDefault();
|
|
63
63
|
handleSwitcherItemFocus?.({
|
|
64
|
-
currentIndex: index,
|
|
64
|
+
currentIndex: index || -1,
|
|
65
65
|
direction: -1
|
|
66
66
|
});
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
return /*#__PURE__*/React__default["default"].createElement("li", {
|
|
70
|
-
className:
|
|
70
|
+
className: classNames
|
|
71
71
|
}, /*#__PURE__*/React__default["default"].createElement(Link["default"], _rollupPluginBabelHelpers["extends"]({
|
|
72
72
|
onKeyDown: evt => {
|
|
73
73
|
setTabFocus(evt);
|
|
74
74
|
onKeyDown(evt);
|
|
75
|
-
}
|
|
75
|
+
},
|
|
76
|
+
ref: forwardRef
|
|
76
77
|
}, rest, {
|
|
77
|
-
ref: ref,
|
|
78
78
|
className: linkClassName,
|
|
79
79
|
tabIndex: tabIndex
|
|
80
80
|
}, accessibilityLabel), children));
|
|
81
81
|
});
|
|
82
82
|
SwitcherItem.displayName = 'SwitcherItem';
|
|
83
83
|
SwitcherItem.propTypes = {
|
|
84
|
-
/**
|
|
85
|
-
* Required props for accessibility label on the underlying menuitem
|
|
86
|
-
*/
|
|
87
84
|
...AriaPropTypes.AriaLabelPropType,
|
|
88
85
|
/**
|
|
89
86
|
* Specify the text content for the link
|
|
@@ -110,6 +107,5 @@ SwitcherItem.propTypes = {
|
|
|
110
107
|
*/
|
|
111
108
|
tabIndex: PropTypes__default["default"].number
|
|
112
109
|
};
|
|
113
|
-
var SwitcherItem$1 = SwitcherItem;
|
|
114
110
|
|
|
115
|
-
exports["default"] = SwitcherItem
|
|
111
|
+
exports["default"] = SwitcherItem;
|