@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.
@@ -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
- clearTimeout(hoverIntentTimeout.current);
119
- closeSubmenu();
120
- menuItem.current.focus();
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: "-1",
171
- "aria-disabled": isDisabled || null,
172
- "aria-haspopup": hasChildren || null,
173
- "aria-expanded": hasChildren ? submenuOpen : null,
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 : null,
176
- onMouseLeave: hasChildren ? handleMouseLeave : null,
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.focus();
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.map((item, i) => /*#__PURE__*/React__default["default"].createElement(MenuItem, {
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-rc.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-rc.0",
52
+ "@carbon/icons-react": "^11.34.0",
53
53
  "@carbon/layout": "^11.20.0",
54
- "@carbon/styles": "^1.48.0-rc.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-rc.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": "5eb449df62a21a69a467895cb94d758ba8554620"
142
+ "gitHead": "6d133d4f920b7c01f6ea2221938a339c14a85b42"
143
143
  }