@carbon/react 1.78.0-rc.0 → 1.78.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.
@@ -18,7 +18,6 @@ var iconsReact = require('@carbon/icons-react');
18
18
  var useControllableState = require('../../internal/useControllableState.js');
19
19
  var useMergedRefs = require('../../internal/useMergedRefs.js');
20
20
  var usePrefix = require('../../internal/usePrefix.js');
21
- var warning = require('../../internal/warning.js');
22
21
  var Menu = require('./Menu.js');
23
22
  var MenuContext = require('./MenuContext.js');
24
23
  require('../Text/index.js');
@@ -33,7 +32,7 @@ var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
33
32
  var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
34
33
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
35
34
 
36
- var _CaretLeft, _CaretRight;
35
+ var _Checkmark, _CaretLeft, _CaretRight;
37
36
  const MenuItem = /*#__PURE__*/React.forwardRef(function MenuItem(_ref, forwardRef) {
38
37
  let {
39
38
  children,
@@ -144,15 +143,14 @@ const MenuItem = /*#__PURE__*/React.forwardRef(function MenuItem(_ref, forwardRe
144
143
  setRtl(false);
145
144
  }
146
145
  }, [direction]);
147
- const iconsAllowed = context.state.mode === 'basic' || rest.role === 'menuitemcheckbox' || rest.role === 'menuitemradio';
148
146
  React.useEffect(() => {
149
- if (iconsAllowed && IconElement && !context.state.hasIcons) {
147
+ if (IconElement && !context.state.hasIcons) {
150
148
  // @ts-ignore - TODO: Should we be passing payload?
151
149
  context.dispatch({
152
150
  type: 'enableIcons'
153
151
  });
154
152
  }
155
- }, [iconsAllowed, IconElement, context.state.hasIcons, context]);
153
+ }, [IconElement, context.state.hasIcons, context]);
156
154
  React.useEffect(() => {
157
155
  Object.keys(floatingStyles).forEach(style => {
158
156
  if (refs.floating.current && style !== 'position') {
@@ -176,8 +174,10 @@ const MenuItem = /*#__PURE__*/React.forwardRef(function MenuItem(_ref, forwardRe
176
174
  onClick: handleClick,
177
175
  onKeyDown: handleKeyDown
178
176
  }, getReferenceProps()), /*#__PURE__*/React__default["default"].createElement("div", {
177
+ className: `${prefix}--menu-item__selection-icon`
178
+ }, rest['aria-checked'] && (_Checkmark || (_Checkmark = /*#__PURE__*/React__default["default"].createElement(iconsReact.Checkmark, null)))), /*#__PURE__*/React__default["default"].createElement("div", {
179
179
  className: `${prefix}--menu-item__icon`
180
- }, iconsAllowed && IconElement && /*#__PURE__*/React__default["default"].createElement(IconElement, null)), /*#__PURE__*/React__default["default"].createElement(Text.Text, {
180
+ }, IconElement && /*#__PURE__*/React__default["default"].createElement(IconElement, null)), /*#__PURE__*/React__default["default"].createElement(Text.Text, {
181
181
  as: "div",
182
182
  className: `${prefix}--menu-item__label`,
183
183
  title: label
@@ -222,7 +222,7 @@ MenuItem.propTypes = {
222
222
  // @ts-ignore-next-line -- avoid spurious (?) TS2322 error
223
223
  onClick: PropTypes__default["default"].func,
224
224
  /**
225
- * Only applicable if the parent menu is in `basic` mode. Sets the menu item's icon.
225
+ * Sets the menu item's icon.
226
226
  */
227
227
  // @ts-ignore-next-line -- avoid spurious (?) TS2322 error
228
228
  renderIcon: PropTypes__default["default"].oneOfType([PropTypes__default["default"].func, PropTypes__default["default"].object]),
@@ -243,9 +243,6 @@ const MenuItemSelectable = /*#__PURE__*/React.forwardRef(function MenuItemSelect
243
243
  } = _ref2;
244
244
  const prefix = usePrefix.usePrefix();
245
245
  const context = React.useContext(MenuContext.MenuContext);
246
- if (context.state.mode === 'basic') {
247
- process.env.NODE_ENV !== "production" ? warning.warning(false, 'MenuItemSelectable is not supported when the menu is in "basic" mode.') : void 0;
248
- }
249
246
  const [checked, setChecked] = useControllableState.useControllableState({
250
247
  value: selected,
251
248
  onChange,
@@ -255,13 +252,13 @@ const MenuItemSelectable = /*#__PURE__*/React.forwardRef(function MenuItemSelect
255
252
  setChecked(!checked);
256
253
  }
257
254
  React.useEffect(() => {
258
- if (!context.state.hasIcons) {
255
+ if (!context.state.hasSelectableItems) {
259
256
  // @ts-ignore - TODO: Should we be passing payload?
260
257
  context.dispatch({
261
- type: 'enableIcons'
258
+ type: 'enableSelectableItems'
262
259
  });
263
260
  }
264
- }, [context.state.hasIcons, context]);
261
+ }, [context.state.hasSelectableItems, context]);
265
262
  const classNames = cx__default["default"](className, `${prefix}--menu-item-selectable--selected`);
266
263
  return /*#__PURE__*/React__default["default"].createElement(MenuItem, _rollupPluginBabelHelpers["extends"]({}, rest, {
267
264
  ref: forwardRef,
@@ -269,7 +266,6 @@ const MenuItemSelectable = /*#__PURE__*/React.forwardRef(function MenuItemSelect
269
266
  className: classNames,
270
267
  role: "menuitemcheckbox",
271
268
  "aria-checked": checked,
272
- renderIcon: checked ? iconsReact.Checkmark : undefined,
273
269
  onClick: handleClick
274
270
  }));
275
271
  });
@@ -344,9 +340,6 @@ const MenuItemRadioGroup = /*#__PURE__*/React.forwardRef(function MenuItemRadioG
344
340
  } = _ref4;
345
341
  const prefix = usePrefix.usePrefix();
346
342
  const context = React.useContext(MenuContext.MenuContext);
347
- if (context.state.mode === 'basic') {
348
- process.env.NODE_ENV !== "production" ? warning.warning(false, 'MenuItemRadioGroup is not supported when the menu is in "basic" mode.') : void 0;
349
- }
350
343
  const [selection, setSelection] = useControllableState.useControllableState({
351
344
  value: selectedItem,
352
345
  onChange,
@@ -356,13 +349,13 @@ const MenuItemRadioGroup = /*#__PURE__*/React.forwardRef(function MenuItemRadioG
356
349
  setSelection(item);
357
350
  }
358
351
  React.useEffect(() => {
359
- if (!context.state.hasIcons) {
352
+ if (!context.state.hasSelectableItems) {
360
353
  // @ts-ignore - TODO: Should we be passing payload?
361
354
  context.dispatch({
362
- type: 'enableIcons'
355
+ type: 'enableSelectableItems'
363
356
  });
364
357
  }
365
- }, [context.state.hasIcons, context]);
358
+ }, [context.state.hasSelectableItems, context]);
366
359
  const classNames = cx__default["default"](className, `${prefix}--menu-item-radio-group`);
367
360
  return /*#__PURE__*/React__default["default"].createElement("li", {
368
361
  className: classNames,
@@ -376,7 +369,6 @@ const MenuItemRadioGroup = /*#__PURE__*/React.forwardRef(function MenuItemRadioG
376
369
  label: itemToString(item),
377
370
  role: "menuitemradio",
378
371
  "aria-checked": item === selection,
379
- renderIcon: item === selection ? iconsReact.Checkmark : undefined,
380
372
  onClick: e => {
381
373
  handleClick(item);
382
374
  }
@@ -83,6 +83,15 @@ const MenuButton = /*#__PURE__*/React.forwardRef(function MenuButton(_ref, forwa
83
83
  // “break” the floating element out of a clipping ancestor.
84
84
  // https://floating-ui.com/docs/misc#clipping
85
85
  strategy: 'fixed',
86
+ // Submenus are using a fixed position to break out of the parent menu's
87
+ // box avoiding clipping while allowing for vertical scroll. When an
88
+ // element is using transform it establishes a new containing block
89
+ // block for all of its descendants. Therefore, its padding box will be
90
+ // used for fixed-positioned descendants. This would cause the submenu
91
+ // to be clipped by its parent menu.
92
+ // Reference: https://www.w3.org/TR/2019/CR-css-transforms-1-20190214/#current-transformation-matrix-computation
93
+ // Reference: https://github.com/carbon-design-system/carbon/pull/18153#issuecomment-2498548835
94
+ transform: false,
86
95
  // Middleware order matters, arrow should be last
87
96
  middleware: middlewares,
88
97
  whileElementsMounted: react.autoUpdate
@@ -97,7 +106,11 @@ const MenuButton = /*#__PURE__*/React.forwardRef(function MenuButton(_ref, forwa
97
106
  React.useLayoutEffect(() => {
98
107
  Object.keys(floatingStyles).forEach(style => {
99
108
  if (refs.floating.current) {
100
- refs.floating.current.style[style] = floatingStyles[style];
109
+ let value = floatingStyles[style];
110
+ if (['top', 'right', 'bottom', 'left'].includes(style) && Number(value)) {
111
+ value += 'px';
112
+ }
113
+ refs.floating.current.style[style] = value;
101
114
  }
102
115
  });
103
116
  }, [floatingStyles, refs.floating, middlewareData, placement, open]);
@@ -136,7 +149,6 @@ const MenuButton = /*#__PURE__*/React.forwardRef(function MenuButton(_ref, forwa
136
149
  id: id,
137
150
  legacyAutoalign: false,
138
151
  label: label,
139
- mode: "basic",
140
152
  size: size,
141
153
  open: open,
142
154
  onClose: handleClose,
@@ -740,11 +740,9 @@ function Callout(_ref8) {
740
740
  [`${prefix}--actionable-notification--${kind}`]: kind,
741
741
  [`${prefix}--actionable-notification--hide-close-button`]: true
742
742
  });
743
- const ref = React.useRef(null);
744
- useNoInteractiveChildren.useInteractiveChildrenNeedDescription(ref, `interactive child node(s) should have an \`aria-describedby\` property with a value matching the value of \`titleId\``);
745
- return /*#__PURE__*/React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({
746
- ref: ref
747
- }, rest, {
743
+ const childrenContainer = React.useRef(null);
744
+ useNoInteractiveChildren.useInteractiveChildrenNeedDescription(childrenContainer, `interactive child node(s) should have an \`aria-describedby\` property with a value matching the value of \`titleId\``);
745
+ return /*#__PURE__*/React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({}, rest, {
748
746
  className: containerClassName
749
747
  }), /*#__PURE__*/React__default["default"].createElement("div", {
750
748
  className: `${prefix}--actionable-notification__details`
@@ -753,6 +751,7 @@ function Callout(_ref8) {
753
751
  kind: kind,
754
752
  iconDescription: statusIconDescription || `${kind} icon`
755
753
  }), /*#__PURE__*/React__default["default"].createElement("div", {
754
+ ref: childrenContainer,
756
755
  className: `${prefix}--actionable-notification__text-wrapper`
757
756
  }, title && /*#__PURE__*/React__default["default"].createElement(Text.Text, {
758
757
  as: "div",
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.78.0-rc.0",
4
+ "version": "1.78.0",
5
5
  "license": "Apache-2.0",
6
6
  "main": "lib/index.js",
7
7
  "types": "lib/index.d.ts",
@@ -52,9 +52,9 @@
52
52
  "dependencies": {
53
53
  "@babel/runtime": "^7.24.7",
54
54
  "@carbon/feature-flags": "^0.24.0",
55
- "@carbon/icons-react": "^11.57.0-rc.0",
55
+ "@carbon/icons-react": "^11.57.0",
56
56
  "@carbon/layout": "^11.30.0",
57
- "@carbon/styles": "^1.77.0-rc.0",
57
+ "@carbon/styles": "^1.77.0",
58
58
  "@floating-ui/react": "^0.27.4",
59
59
  "@ibm/telemetry-js": "^1.5.0",
60
60
  "classnames": "2.5.1",
@@ -79,7 +79,7 @@
79
79
  "@babel/preset-react": "^7.24.7",
80
80
  "@babel/preset-typescript": "^7.24.7",
81
81
  "@carbon/test-utils": "^10.35.0",
82
- "@carbon/themes": "^11.48.0-rc.0",
82
+ "@carbon/themes": "^11.48.0",
83
83
  "@figma/code-connect": "^1.2.4",
84
84
  "@rollup/plugin-babel": "^6.0.0",
85
85
  "@rollup/plugin-commonjs": "^28.0.0",
@@ -146,5 +146,5 @@
146
146
  "**/*.scss",
147
147
  "**/*.css"
148
148
  ],
149
- "gitHead": "9134345acdba15a2406b4a7df9781bccf0a32ab6"
149
+ "gitHead": "7ffd4731509c6e3d768cfb9029478b27db8f807d"
150
150
  }