@carbon/react 1.48.0-rc.0 → 1.48.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 +855 -814
- package/es/components/ComboButton/index.js +1 -0
- package/es/components/Menu/Menu.d.ts +59 -0
- package/es/components/Menu/Menu.js +33 -10
- package/es/components/Menu/MenuContext.d.ts +32 -0
- package/es/components/Menu/MenuItem.d.ts +119 -0
- package/es/components/Menu/MenuItem.js +17 -12
- package/es/components/Menu/index.d.ts +9 -0
- package/es/components/MenuButton/index.js +1 -0
- package/es/components/OverflowMenu/next/index.js +1 -0
- package/es/components/Slug/index.js +5 -1
- package/es/components/Tooltip/Tooltip.js +1 -9
- package/es/index.js +2 -2
- package/lib/components/ComboButton/index.js +1 -0
- package/lib/components/Menu/Menu.d.ts +59 -0
- package/lib/components/Menu/Menu.js +33 -10
- package/lib/components/Menu/MenuContext.d.ts +32 -0
- package/lib/components/Menu/MenuItem.d.ts +119 -0
- package/lib/components/Menu/MenuItem.js +17 -12
- package/lib/components/Menu/index.d.ts +9 -0
- package/lib/components/MenuButton/index.js +1 -0
- package/lib/components/OverflowMenu/next/index.js +1 -0
- package/lib/components/Slug/index.js +5 -1
- package/lib/components/Tooltip/Tooltip.js +0 -8
- package/lib/index.js +8 -8
- package/package.json +5 -5
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright IBM Corp. 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
|
+
import React from 'react';
|
|
8
|
+
interface MenuItemProps extends React.LiHTMLAttributes<HTMLLIElement> {
|
|
9
|
+
/**
|
|
10
|
+
* Optionally provide another Menu to create a submenu. props.children can't be used to specify the content of the MenuItem itself. Use props.label instead.
|
|
11
|
+
*/
|
|
12
|
+
children?: React.ReactNode;
|
|
13
|
+
/**
|
|
14
|
+
* Additional CSS class names.
|
|
15
|
+
*/
|
|
16
|
+
className?: string;
|
|
17
|
+
/**
|
|
18
|
+
* Specify whether the MenuItem is disabled or not.
|
|
19
|
+
*/
|
|
20
|
+
disabled?: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Specify the kind of the MenuItem.
|
|
23
|
+
*/
|
|
24
|
+
kind?: 'default' | 'danger';
|
|
25
|
+
/**
|
|
26
|
+
* A required label titling the MenuItem. Will be rendered as its text content.
|
|
27
|
+
*/
|
|
28
|
+
label: string;
|
|
29
|
+
/**
|
|
30
|
+
* Provide an optional function to be called when the MenuItem is clicked.
|
|
31
|
+
*/
|
|
32
|
+
onClick?: (event: React.KeyboardEvent<HTMLLIElement> | React.MouseEvent<HTMLLIElement>) => void;
|
|
33
|
+
/**
|
|
34
|
+
* Only applicable if the parent menu is in `basic` mode. Sets the menu item's icon.
|
|
35
|
+
*/
|
|
36
|
+
renderIcon?: any;
|
|
37
|
+
/**
|
|
38
|
+
* Provide a shortcut for the action of this MenuItem. Note that the component will only render it as a hint but not actually register the shortcut.
|
|
39
|
+
*/
|
|
40
|
+
shortcut?: string;
|
|
41
|
+
}
|
|
42
|
+
declare const MenuItem: React.ForwardRefExoticComponent<MenuItemProps & React.RefAttributes<HTMLLIElement>>;
|
|
43
|
+
interface MenuItemSelectableProps {
|
|
44
|
+
/**
|
|
45
|
+
* Additional CSS class names.
|
|
46
|
+
*/
|
|
47
|
+
className?: string;
|
|
48
|
+
/**
|
|
49
|
+
* Specify whether the option should be selected by default.
|
|
50
|
+
*/
|
|
51
|
+
defaultSelected?: boolean;
|
|
52
|
+
/**
|
|
53
|
+
* A required label titling this option.
|
|
54
|
+
*/
|
|
55
|
+
label: string;
|
|
56
|
+
/**
|
|
57
|
+
* Provide an optional function to be called when the selection state changes.
|
|
58
|
+
*/
|
|
59
|
+
onChange?: React.ChangeEventHandler<HTMLLIElement>;
|
|
60
|
+
/**
|
|
61
|
+
* Pass a bool to props.selected to control the state of this option.
|
|
62
|
+
*/
|
|
63
|
+
selected?: boolean;
|
|
64
|
+
}
|
|
65
|
+
declare const MenuItemSelectable: React.ForwardRefExoticComponent<MenuItemSelectableProps & React.RefAttributes<HTMLLIElement>>;
|
|
66
|
+
interface MenuItemGroupProps {
|
|
67
|
+
/**
|
|
68
|
+
* A collection of MenuItems to be rendered within this group.
|
|
69
|
+
*/
|
|
70
|
+
children?: React.ReactNode;
|
|
71
|
+
/**
|
|
72
|
+
* Additional CSS class names.
|
|
73
|
+
*/
|
|
74
|
+
className?: string;
|
|
75
|
+
/**
|
|
76
|
+
* A required label titling this group.
|
|
77
|
+
*/
|
|
78
|
+
label: string;
|
|
79
|
+
}
|
|
80
|
+
declare const MenuItemGroup: React.ForwardRefExoticComponent<MenuItemGroupProps & React.RefAttributes<HTMLLIElement>>;
|
|
81
|
+
interface MenuItemRadioGroupProps {
|
|
82
|
+
/**
|
|
83
|
+
* Additional CSS class names.
|
|
84
|
+
*/
|
|
85
|
+
className?: string;
|
|
86
|
+
/**
|
|
87
|
+
* Specify the default selected item. Must match the type of props.items.
|
|
88
|
+
*/
|
|
89
|
+
defaultSelectedItem?: any;
|
|
90
|
+
/**
|
|
91
|
+
* Provide a function to convert an item to the string that will be rendered. Defaults to item.toString().
|
|
92
|
+
*/
|
|
93
|
+
itemToString?: (item: any) => string;
|
|
94
|
+
/**
|
|
95
|
+
* Provide the options for this radio group. Can be of any type, as long as you provide an appropriate props.itemToString function.
|
|
96
|
+
*/
|
|
97
|
+
items?: any[];
|
|
98
|
+
/**
|
|
99
|
+
* A required label titling this radio group.
|
|
100
|
+
*/
|
|
101
|
+
label: string;
|
|
102
|
+
/**
|
|
103
|
+
* Provide an optional function to be called when the selection changes.
|
|
104
|
+
*/
|
|
105
|
+
onChange?: React.ChangeEventHandler<HTMLLIElement>;
|
|
106
|
+
/**
|
|
107
|
+
* Provide props.selectedItem to control the state of this radio group. Must match the type of props.items.
|
|
108
|
+
*/
|
|
109
|
+
selectedItem?: any;
|
|
110
|
+
}
|
|
111
|
+
declare const MenuItemRadioGroup: React.ForwardRefExoticComponent<MenuItemRadioGroupProps & React.RefAttributes<HTMLLIElement>>;
|
|
112
|
+
interface MenuItemDividerProps {
|
|
113
|
+
/**
|
|
114
|
+
* Additional CSS class names.
|
|
115
|
+
*/
|
|
116
|
+
className?: string;
|
|
117
|
+
}
|
|
118
|
+
declare const MenuItemDivider: React.ForwardRefExoticComponent<MenuItemDividerProps & React.RefAttributes<HTMLLIElement>>;
|
|
119
|
+
export { MenuItem, MenuItemSelectable, MenuItemGroup, MenuItemRadioGroup, MenuItemDivider, };
|
|
@@ -49,7 +49,7 @@ const MenuItem = /*#__PURE__*/React__default["default"].forwardRef(function Menu
|
|
|
49
49
|
} = _ref;
|
|
50
50
|
const prefix = usePrefix.usePrefix();
|
|
51
51
|
const context = React.useContext(MenuContext.MenuContext);
|
|
52
|
-
const menuItem = React.useRef();
|
|
52
|
+
const menuItem = React.useRef(null);
|
|
53
53
|
const ref = useMergedRefs.useMergedRefs([forwardRef, menuItem]);
|
|
54
54
|
const [boundaries, setBoundaries] = React.useState({
|
|
55
55
|
x: -1,
|
|
@@ -71,6 +71,9 @@ const MenuItem = /*#__PURE__*/React__default["default"].forwardRef(function Menu
|
|
|
71
71
|
});
|
|
72
72
|
}
|
|
73
73
|
function openSubmenu() {
|
|
74
|
+
if (!menuItem.current) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
74
77
|
const {
|
|
75
78
|
x,
|
|
76
79
|
y,
|
|
@@ -115,9 +118,11 @@ const MenuItem = /*#__PURE__*/React__default["default"].forwardRef(function Menu
|
|
|
115
118
|
}, hoverIntentDelay);
|
|
116
119
|
}
|
|
117
120
|
function handleMouseLeave() {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
+
if (hoverIntentTimeout.current) {
|
|
122
|
+
clearTimeout(hoverIntentTimeout.current);
|
|
123
|
+
closeSubmenu();
|
|
124
|
+
menuItem.current?.focus();
|
|
125
|
+
}
|
|
121
126
|
}
|
|
122
127
|
function handleKeyDown(e) {
|
|
123
128
|
if (hasChildren && match.match(e, keys.ArrowRight)) {
|
|
@@ -167,13 +172,13 @@ const MenuItem = /*#__PURE__*/React__default["default"].forwardRef(function Menu
|
|
|
167
172
|
}, rest, {
|
|
168
173
|
ref: ref,
|
|
169
174
|
className: classNames,
|
|
170
|
-
tabIndex:
|
|
171
|
-
"aria-disabled": isDisabled
|
|
172
|
-
"aria-haspopup": hasChildren ||
|
|
173
|
-
"aria-expanded": hasChildren ? submenuOpen :
|
|
175
|
+
tabIndex: -1,
|
|
176
|
+
"aria-disabled": isDisabled,
|
|
177
|
+
"aria-haspopup": hasChildren || undefined,
|
|
178
|
+
"aria-expanded": hasChildren ? submenuOpen : undefined,
|
|
174
179
|
onClick: handleClick,
|
|
175
|
-
onMouseEnter: hasChildren ? handleMouseEnter :
|
|
176
|
-
onMouseLeave: hasChildren ? handleMouseLeave :
|
|
180
|
+
onMouseEnter: hasChildren ? handleMouseEnter : undefined,
|
|
181
|
+
onMouseLeave: hasChildren ? handleMouseLeave : undefined,
|
|
177
182
|
onKeyDown: handleKeyDown
|
|
178
183
|
}), /*#__PURE__*/React__default["default"].createElement("div", {
|
|
179
184
|
className: `${prefix}--menu-item__icon`
|
|
@@ -190,7 +195,7 @@ const MenuItem = /*#__PURE__*/React__default["default"].forwardRef(function Menu
|
|
|
190
195
|
open: submenuOpen,
|
|
191
196
|
onClose: () => {
|
|
192
197
|
closeSubmenu();
|
|
193
|
-
menuItem.current
|
|
198
|
+
menuItem.current?.focus();
|
|
194
199
|
},
|
|
195
200
|
x: boundaries.x,
|
|
196
201
|
y: boundaries.y
|
|
@@ -370,7 +375,7 @@ const MenuItemRadioGroup = /*#__PURE__*/React__default["default"].forwardRef(fun
|
|
|
370
375
|
}, /*#__PURE__*/React__default["default"].createElement("ul", _rollupPluginBabelHelpers["extends"]({}, rest, {
|
|
371
376
|
role: "group",
|
|
372
377
|
"aria-label": label
|
|
373
|
-
}), items
|
|
378
|
+
}), items?.map((item, i) => /*#__PURE__*/React__default["default"].createElement(MenuItem, {
|
|
374
379
|
key: i,
|
|
375
380
|
label: itemToString(item),
|
|
376
381
|
role: "menuitemradio",
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright IBM Corp. 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
|
+
import { Menu } from './Menu';
|
|
8
|
+
import { MenuItem, MenuItemDivider, MenuItemGroup, MenuItemRadioGroup, MenuItemSelectable } from './MenuItem';
|
|
9
|
+
export { Menu, MenuItem, MenuItemDivider, MenuItemGroup, MenuItemRadioGroup, MenuItemSelectable, };
|
|
@@ -17,6 +17,7 @@ var iconsReact = require('@carbon/icons-react');
|
|
|
17
17
|
var Button = require('../Button/Button.js');
|
|
18
18
|
require('../Button/Button.Skeleton.js');
|
|
19
19
|
var Menu = require('../Menu/Menu.js');
|
|
20
|
+
require('../Menu/MenuItem.js');
|
|
20
21
|
var useAttachedMenu = require('../../internal/useAttachedMenu.js');
|
|
21
22
|
var useId = require('../../internal/useId.js');
|
|
22
23
|
var useMergedRefs = require('../../internal/useMergedRefs.js');
|
|
@@ -16,6 +16,7 @@ var cx = require('classnames');
|
|
|
16
16
|
var iconsReact = require('@carbon/icons-react');
|
|
17
17
|
var index = require('../../IconButton/index.js');
|
|
18
18
|
var Menu = require('../../Menu/Menu.js');
|
|
19
|
+
require('../../Menu/MenuItem.js');
|
|
19
20
|
var useId = require('../../../internal/useId.js');
|
|
20
21
|
var usePrefix = require('../../../internal/usePrefix.js');
|
|
21
22
|
var useAttachedMenu = require('../../../internal/useAttachedMenu.js');
|
|
@@ -32,14 +32,17 @@ const SlugContent = /*#__PURE__*/React__default["default"].forwardRef(function S
|
|
|
32
32
|
className
|
|
33
33
|
} = _ref;
|
|
34
34
|
const prefix = usePrefix.usePrefix();
|
|
35
|
+
const hasSlugActions = React__default["default"].Children.toArray(children).some(child => child.type?.displayName === 'SlugActions');
|
|
35
36
|
const slugContentClasses = cx__default["default"](className, {
|
|
36
|
-
[`${prefix}--slug-content`]: true
|
|
37
|
+
[`${prefix}--slug-content`]: true,
|
|
38
|
+
[`${prefix}--slug-content--with-actions`]: hasSlugActions
|
|
37
39
|
});
|
|
38
40
|
return /*#__PURE__*/React__default["default"].createElement(index.ToggletipContent, {
|
|
39
41
|
className: slugContentClasses,
|
|
40
42
|
ref: ref
|
|
41
43
|
}, children);
|
|
42
44
|
});
|
|
45
|
+
SlugContent.displayName = 'SlugContent';
|
|
43
46
|
SlugContent.propTypes = {
|
|
44
47
|
/**
|
|
45
48
|
* Specify the content you want rendered inside the slug ToggleTip
|
|
@@ -64,6 +67,7 @@ const SlugActions = /*#__PURE__*/React__default["default"].forwardRef(function S
|
|
|
64
67
|
ref: ref
|
|
65
68
|
}, children);
|
|
66
69
|
});
|
|
70
|
+
SlugActions.displayName = 'SlugActions';
|
|
67
71
|
SlugActions.propTypes = {
|
|
68
72
|
/**
|
|
69
73
|
* Specify the content you want rendered inside the slug callout toolbar
|
|
@@ -120,14 +120,6 @@ function Tooltip(_ref) {
|
|
|
120
120
|
}
|
|
121
121
|
}, [isPointerIntersecting, leaveDelayMs, setOpen]);
|
|
122
122
|
useNoInteractiveChildren.useNoInteractiveChildren(tooltipRef, 'The Tooltip component must have no interactive content rendered by the' + '`label` or `description` prop');
|
|
123
|
-
React.useEffect(() => {
|
|
124
|
-
if (containerRef !== null && containerRef.current) {
|
|
125
|
-
const interactiveContent = useNoInteractiveChildren.getInteractiveContent(containerRef.current);
|
|
126
|
-
if (!interactiveContent) {
|
|
127
|
-
setOpen(false);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
123
|
React.useEffect(() => {
|
|
132
124
|
if (isDragging) {
|
|
133
125
|
// Register drag stop handlers.
|
package/lib/index.js
CHANGED
|
@@ -64,6 +64,8 @@ var InlineLoading = require('./components/InlineLoading/InlineLoading.js');
|
|
|
64
64
|
var Link = require('./components/Link/Link.js');
|
|
65
65
|
var ListItem = require('./components/ListItem/ListItem.js');
|
|
66
66
|
var Loading = require('./components/Loading/Loading.js');
|
|
67
|
+
var Menu = require('./components/Menu/Menu.js');
|
|
68
|
+
var MenuItem = require('./components/Menu/MenuItem.js');
|
|
67
69
|
var index$8 = require('./components/MenuButton/index.js');
|
|
68
70
|
var Modal = require('./components/Modal/Modal.js');
|
|
69
71
|
var ModalWrapper = require('./components/ModalWrapper/ModalWrapper.js');
|
|
@@ -216,8 +218,6 @@ var TableToolbarContent = require('./components/DataTable/TableToolbarContent.js
|
|
|
216
218
|
var TableToolbarSearch = require('./components/DataTable/TableToolbarSearch.js');
|
|
217
219
|
var TableToolbarMenu = require('./components/DataTable/TableToolbarMenu.js');
|
|
218
220
|
var FilterableMultiSelect = require('./components/MultiSelect/FilterableMultiSelect.js');
|
|
219
|
-
var Menu = require('./components/Menu/Menu.js');
|
|
220
|
-
var MenuItem = require('./components/Menu/MenuItem.js');
|
|
221
221
|
var MultiSelect = require('./components/MultiSelect/MultiSelect.js');
|
|
222
222
|
var Pagination$1 = require('./components/Pagination/Pagination.js');
|
|
223
223
|
var PaginationNav = require('./components/PaginationNav/PaginationNav.js');
|
|
@@ -287,6 +287,12 @@ exports.InlineLoading = InlineLoading["default"];
|
|
|
287
287
|
exports.Link = Link["default"];
|
|
288
288
|
exports.ListItem = ListItem["default"];
|
|
289
289
|
exports.Loading = Loading["default"];
|
|
290
|
+
exports.Menu = Menu.Menu;
|
|
291
|
+
exports.MenuItem = MenuItem.MenuItem;
|
|
292
|
+
exports.MenuItemDivider = MenuItem.MenuItemDivider;
|
|
293
|
+
exports.MenuItemGroup = MenuItem.MenuItemGroup;
|
|
294
|
+
exports.MenuItemRadioGroup = MenuItem.MenuItemRadioGroup;
|
|
295
|
+
exports.MenuItemSelectable = MenuItem.MenuItemSelectable;
|
|
290
296
|
exports.MenuButton = index$8.MenuButton;
|
|
291
297
|
exports.Modal = Modal["default"];
|
|
292
298
|
exports.ModalWrapper = ModalWrapper["default"];
|
|
@@ -475,12 +481,6 @@ exports.TableToolbarContent = TableToolbarContent["default"];
|
|
|
475
481
|
exports.TableToolbarSearch = TableToolbarSearch["default"];
|
|
476
482
|
exports.TableToolbarMenu = TableToolbarMenu["default"];
|
|
477
483
|
exports.FilterableMultiSelect = FilterableMultiSelect["default"];
|
|
478
|
-
exports.Menu = Menu.Menu;
|
|
479
|
-
exports.MenuItem = MenuItem.MenuItem;
|
|
480
|
-
exports.MenuItemDivider = MenuItem.MenuItemDivider;
|
|
481
|
-
exports.MenuItemGroup = MenuItem.MenuItemGroup;
|
|
482
|
-
exports.MenuItemRadioGroup = MenuItem.MenuItemRadioGroup;
|
|
483
|
-
exports.MenuItemSelectable = MenuItem.MenuItemSelectable;
|
|
484
484
|
exports.MultiSelect = MultiSelect["default"];
|
|
485
485
|
exports.Pagination = Pagination$1["default"];
|
|
486
486
|
exports.PaginationNav = PaginationNav["default"];
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@carbon/react",
|
|
3
3
|
"description": "React components for the Carbon Design System",
|
|
4
|
-
"version": "1.48.0
|
|
4
|
+
"version": "1.48.0",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"main": "lib/index.js",
|
|
7
7
|
"module": "es/index.js",
|
|
@@ -49,9 +49,9 @@
|
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"@babel/runtime": "^7.18.3",
|
|
51
51
|
"@carbon/feature-flags": "^0.16.0",
|
|
52
|
-
"@carbon/icons-react": "^11.34.0
|
|
52
|
+
"@carbon/icons-react": "^11.34.0",
|
|
53
53
|
"@carbon/layout": "^11.20.0",
|
|
54
|
-
"@carbon/styles": "^1.48.0
|
|
54
|
+
"@carbon/styles": "^1.48.0",
|
|
55
55
|
"@ibm/telemetry-js": "^1.1.0",
|
|
56
56
|
"classnames": "2.5.1",
|
|
57
57
|
"copy-to-clipboard": "^3.3.1",
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
"@babel/preset-react": "^7.22.3",
|
|
80
80
|
"@babel/preset-typescript": "^7.21.5",
|
|
81
81
|
"@carbon/test-utils": "^10.30.0",
|
|
82
|
-
"@carbon/themes": "^11.29.0
|
|
82
|
+
"@carbon/themes": "^11.29.0",
|
|
83
83
|
"@rollup/plugin-babel": "^6.0.0",
|
|
84
84
|
"@rollup/plugin-commonjs": "^25.0.0",
|
|
85
85
|
"@rollup/plugin-node-resolve": "^15.0.0",
|
|
@@ -139,5 +139,5 @@
|
|
|
139
139
|
"**/*.scss",
|
|
140
140
|
"**/*.css"
|
|
141
141
|
],
|
|
142
|
-
"gitHead": "
|
|
142
|
+
"gitHead": "6d133d4f920b7c01f6ea2221938a339c14a85b42"
|
|
143
143
|
}
|