@carbon/react 1.68.0-rc.0 → 1.69.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.
Files changed (112) hide show
  1. package/.playwright/INTERNAL_AVT_REPORT_DO_NOT_USE.json +743 -743
  2. package/README.md +3 -3
  3. package/es/components/Accordion/AccordionItem.js +0 -1
  4. package/es/components/Button/Button.js +6 -0
  5. package/es/components/CheckboxGroup/CheckboxGroup.js +1 -2
  6. package/es/components/CheckboxGroup/index.d.ts +10 -0
  7. package/es/components/ComboBox/ComboBox.d.ts +5 -0
  8. package/es/components/ComboBox/ComboBox.js +139 -54
  9. package/es/components/ComboButton/index.js +10 -3
  10. package/es/components/DataTable/TableCell.d.ts +1 -4
  11. package/es/components/DataTable/TableCell.js +3 -2
  12. package/es/components/DatePicker/DatePicker.js +10 -6
  13. package/es/components/Disclosure/index.d.ts +18 -0
  14. package/es/components/Dropdown/Dropdown.js +11 -9
  15. package/es/components/FileUploader/FileUploader.d.ts +8 -92
  16. package/es/components/FileUploader/FileUploader.js +116 -137
  17. package/es/components/FileUploader/FileUploaderDropContainer.js +1 -1
  18. package/es/components/FluidComboBox/FluidComboBox.Skeleton.d.ts +15 -0
  19. package/es/components/FluidComboBox/FluidComboBox.Skeleton.js +1 -2
  20. package/es/components/FluidComboBox/FluidComboBox.d.ts +102 -0
  21. package/es/components/FluidComboBox/FluidComboBox.js +2 -3
  22. package/es/components/FluidComboBox/index.d.ts +13 -0
  23. package/es/components/FluidDatePicker/FluidDatePicker.Skeleton.d.ts +19 -0
  24. package/es/components/FluidDatePicker/FluidDatePicker.Skeleton.js +2 -2
  25. package/es/components/FluidDatePicker/FluidDatePicker.d.ts +39 -0
  26. package/es/components/FluidDatePicker/FluidDatePicker.js +2 -3
  27. package/es/components/FluidDatePicker/index.d.ts +13 -0
  28. package/es/components/FluidDatePickerInput/FluidDatePickerInput.d.ts +10 -0
  29. package/es/components/FluidDatePickerInput/FluidDatePickerInput.js +1 -2
  30. package/es/components/FluidDatePickerInput/index.d.ts +9 -0
  31. package/es/components/IdPrefix/index.d.ts +26 -0
  32. package/es/components/Menu/MenuItem.js +1 -4
  33. package/es/components/MenuButton/index.d.ts +4 -0
  34. package/es/components/MenuButton/index.js +19 -5
  35. package/es/components/MultiSelect/MultiSelect.js +11 -9
  36. package/es/components/OverflowMenu/next/index.d.ts +4 -0
  37. package/es/components/OverflowMenu/next/index.js +19 -9
  38. package/es/components/PaginationNav/PaginationNav.js +1 -1
  39. package/es/components/Popover/index.js +18 -14
  40. package/es/components/Portal/index.d.ts +25 -0
  41. package/es/components/Slider/Slider.js +2 -2
  42. package/es/components/Tabs/usePressable.js +2 -0
  43. package/es/components/Tag/DismissibleTag.js +2 -2
  44. package/es/components/Tag/OperationalTag.d.ts +2 -10
  45. package/es/components/Tag/OperationalTag.js +2 -14
  46. package/es/components/Tag/SelectableTag.d.ts +2 -10
  47. package/es/components/Tag/SelectableTag.js +2 -16
  48. package/es/components/Toggle/Toggle.js +2 -0
  49. package/es/components/ToggleSmall/ToggleSmall.Skeleton.d.ts +49 -0
  50. package/es/components/ToggleSmall/index.d.ts +7 -0
  51. package/es/components/TreeView/TreeNode.js +4 -2
  52. package/es/components/TreeView/TreeView.js +4 -4
  53. package/es/components/UIShell/SideNavMenuItem.d.ts +4 -3
  54. package/es/components/UIShell/SideNavMenuItem.js +1 -4
  55. package/es/index.js +6 -6
  56. package/es/internal/useIdPrefix.d.ts +9 -0
  57. package/lib/components/Accordion/AccordionItem.js +0 -1
  58. package/lib/components/Button/Button.js +6 -0
  59. package/lib/components/CheckboxGroup/CheckboxGroup.js +1 -2
  60. package/lib/components/CheckboxGroup/index.d.ts +10 -0
  61. package/lib/components/ComboBox/ComboBox.d.ts +5 -0
  62. package/lib/components/ComboBox/ComboBox.js +144 -59
  63. package/lib/components/ComboButton/index.js +12 -5
  64. package/lib/components/DataTable/TableCell.d.ts +1 -4
  65. package/lib/components/DataTable/TableCell.js +3 -2
  66. package/lib/components/DatePicker/DatePicker.js +9 -5
  67. package/lib/components/Disclosure/index.d.ts +18 -0
  68. package/lib/components/Dropdown/Dropdown.js +18 -16
  69. package/lib/components/FileUploader/FileUploader.d.ts +8 -92
  70. package/lib/components/FileUploader/FileUploader.js +113 -134
  71. package/lib/components/FileUploader/FileUploaderDropContainer.js +1 -1
  72. package/lib/components/FluidComboBox/FluidComboBox.Skeleton.d.ts +15 -0
  73. package/lib/components/FluidComboBox/FluidComboBox.Skeleton.js +1 -2
  74. package/lib/components/FluidComboBox/FluidComboBox.d.ts +102 -0
  75. package/lib/components/FluidComboBox/FluidComboBox.js +2 -3
  76. package/lib/components/FluidComboBox/index.d.ts +13 -0
  77. package/lib/components/FluidDatePicker/FluidDatePicker.Skeleton.d.ts +19 -0
  78. package/lib/components/FluidDatePicker/FluidDatePicker.Skeleton.js +2 -2
  79. package/lib/components/FluidDatePicker/FluidDatePicker.d.ts +39 -0
  80. package/lib/components/FluidDatePicker/FluidDatePicker.js +3 -4
  81. package/lib/components/FluidDatePicker/index.d.ts +13 -0
  82. package/lib/components/FluidDatePickerInput/FluidDatePickerInput.d.ts +10 -0
  83. package/lib/components/FluidDatePickerInput/FluidDatePickerInput.js +1 -2
  84. package/lib/components/FluidDatePickerInput/index.d.ts +9 -0
  85. package/lib/components/IdPrefix/index.d.ts +26 -0
  86. package/lib/components/Menu/MenuItem.js +1 -4
  87. package/lib/components/MenuButton/index.d.ts +4 -0
  88. package/lib/components/MenuButton/index.js +19 -5
  89. package/lib/components/MultiSelect/MultiSelect.js +18 -16
  90. package/lib/components/OverflowMenu/next/index.d.ts +4 -0
  91. package/lib/components/OverflowMenu/next/index.js +21 -11
  92. package/lib/components/PaginationNav/PaginationNav.js +1 -1
  93. package/lib/components/Popover/index.js +18 -14
  94. package/lib/components/Portal/index.d.ts +25 -0
  95. package/lib/components/Slider/Slider.js +2 -2
  96. package/lib/components/Tabs/usePressable.js +2 -0
  97. package/lib/components/Tag/DismissibleTag.js +2 -2
  98. package/lib/components/Tag/OperationalTag.d.ts +2 -10
  99. package/lib/components/Tag/OperationalTag.js +2 -14
  100. package/lib/components/Tag/SelectableTag.d.ts +2 -10
  101. package/lib/components/Tag/SelectableTag.js +2 -16
  102. package/lib/components/Toggle/Toggle.js +2 -0
  103. package/lib/components/ToggleSmall/ToggleSmall.Skeleton.d.ts +49 -0
  104. package/lib/components/ToggleSmall/index.d.ts +7 -0
  105. package/lib/components/TreeView/TreeNode.js +4 -2
  106. package/lib/components/TreeView/TreeView.js +4 -4
  107. package/lib/components/UIShell/SideNavMenuItem.d.ts +4 -3
  108. package/lib/components/UIShell/SideNavMenuItem.js +1 -4
  109. package/lib/index.js +12 -12
  110. package/lib/internal/useIdPrefix.d.ts +9 -0
  111. package/package.json +7 -7
  112. package/telemetry.yml +809 -809
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Copyright IBM Corp. 2022
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
+ import { DatePickerInputProps } from '../DatePickerInput';
9
+ declare const FluidDatePickerInput: React.ForwardRefExoticComponent<DatePickerInputProps & React.RefAttributes<HTMLDivElement>>;
10
+ export default FluidDatePickerInput;
@@ -30,6 +30,5 @@ const FluidDatePickerInput = /*#__PURE__*/React__default["default"].forwardRef(f
30
30
  ref: ref
31
31
  }, other)));
32
32
  });
33
- var FluidDatePickerInput$1 = FluidDatePickerInput;
34
33
 
35
- exports["default"] = FluidDatePickerInput$1;
34
+ exports["default"] = FluidDatePickerInput;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Copyright IBM Corp. 2022
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 FluidDatePickerInput from './FluidDatePickerInput';
8
+ export default FluidDatePickerInput;
9
+ export { FluidDatePickerInput };
@@ -0,0 +1,26 @@
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
+ import PropTypes from 'prop-types';
8
+ import { PropsWithChildren, ReactNode } from 'react';
9
+ type IdPrefixProps = {
10
+ children?: ReactNode;
11
+ /**
12
+ * The value used to prefix the auto-generated id placed on some DOM elements
13
+ */
14
+ prefix?: string;
15
+ };
16
+ declare function IdPrefix({ children, prefix }: PropsWithChildren<IdPrefixProps>): import("react/jsx-runtime").JSX.Element;
17
+ declare namespace IdPrefix {
18
+ var propTypes: {
19
+ children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
20
+ /**
21
+ * The value used to prefix the auto-generated id placed on some DOM elements
22
+ */
23
+ prefix: PropTypes.Requireable<string>;
24
+ };
25
+ }
26
+ export { IdPrefix };
@@ -357,9 +357,6 @@ const MenuItemRadioGroup = /*#__PURE__*/React.forwardRef(function MenuItemRadioG
357
357
  });
358
358
  function handleClick(item, e) {
359
359
  setSelection(item);
360
- if (onChange) {
361
- onChange(e);
362
- }
363
360
  }
364
361
  React.useEffect(() => {
365
362
  if (!context.state.hasIcons) {
@@ -384,7 +381,7 @@ const MenuItemRadioGroup = /*#__PURE__*/React.forwardRef(function MenuItemRadioG
384
381
  "aria-checked": item === selection,
385
382
  renderIcon: item === selection ? iconsReact.Checkmark : undefined,
386
383
  onClick: e => {
387
- handleClick(item, e);
384
+ handleClick(item);
388
385
  }
389
386
  }))));
390
387
  });
@@ -39,6 +39,10 @@ export interface MenuButtonProps extends ComponentProps<'div'> {
39
39
  * Specify the tabIndex of the button.
40
40
  */
41
41
  tabIndex?: number;
42
+ /**
43
+ * Specify a DOM node where the Menu should be rendered in. Defaults to document.body.
44
+ */
45
+ menuTarget?: Element;
42
46
  }
43
47
  declare const MenuButton: React.ForwardRefExoticComponent<Omit<MenuButtonProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
44
48
  export { MenuButton };
@@ -22,6 +22,7 @@ var useAttachedMenu = require('../../internal/useAttachedMenu.js');
22
22
  var useId = require('../../internal/useId.js');
23
23
  var usePrefix = require('../../internal/usePrefix.js');
24
24
  var react = require('@floating-ui/react');
25
+ var index = require('../FeatureFlags/index.js');
25
26
  var mergeRefs = require('../../tools/mergeRefs.js');
26
27
 
27
28
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -42,14 +43,21 @@ const MenuButton = /*#__PURE__*/React.forwardRef(function MenuButton(_ref, forwa
42
43
  size = 'lg',
43
44
  menuAlignment = 'bottom',
44
45
  tabIndex = 0,
46
+ menuTarget,
45
47
  ...rest
46
48
  } = _ref;
49
+ // feature flag utilized to separate out only the dynamic styles from @floating-ui
50
+ // flag is turned on when collision detection (ie. flip, hide) logic is not desired
51
+ const enableOnlyFloatingStyles = index.useFeatureFlag('enable-v12-dynamic-floating-styles');
47
52
  const id = useId.useId('MenuButton');
48
53
  const prefix = usePrefix.usePrefix();
49
54
  const triggerRef = React.useRef(null);
50
- const middlewares = [react.flip({
51
- crossAxis: false
52
- })];
55
+ let middlewares = [];
56
+ if (!enableOnlyFloatingStyles) {
57
+ middlewares = [react.flip({
58
+ crossAxis: false
59
+ })];
60
+ }
53
61
  if (menuAlignment === 'bottom' || menuAlignment === 'top') {
54
62
  middlewares.push(react.size({
55
63
  apply(_ref2) {
@@ -131,7 +139,8 @@ const MenuButton = /*#__PURE__*/React.forwardRef(function MenuButton(_ref, forwa
131
139
  mode: "basic",
132
140
  size: size,
133
141
  open: open,
134
- onClose: handleClose
142
+ onClose: handleClose,
143
+ target: menuTarget
135
144
  }, children));
136
145
  });
137
146
  MenuButton.propTypes = {
@@ -170,7 +179,12 @@ MenuButton.propTypes = {
170
179
  * Specify the tabIndex of the button.
171
180
  */
172
181
  // @ts-ignore-next-line -- avoid spurious (?) TS2322 error
173
- tabIndex: PropTypes__default["default"].number
182
+ tabIndex: PropTypes__default["default"].number,
183
+ /**
184
+ * Specify a DOM node where the Menu should be rendered in. Defaults to document.body.
185
+ */
186
+
187
+ menuTarget: PropTypes__default["default"].instanceOf(typeof Element !== 'undefined' ? Element : Object)
174
188
  };
175
189
 
176
190
  exports.MenuButton = MenuButton;
@@ -16,7 +16,7 @@ var Downshift = require('downshift');
16
16
  var isEqual = require('react-fast-compare');
17
17
  var PropTypes = require('prop-types');
18
18
  var React = require('react');
19
- var index = require('../ListBox/index.js');
19
+ var index$1 = require('../ListBox/index.js');
20
20
  var MultiSelectPropTypes = require('./MultiSelectPropTypes.js');
21
21
  var sorting = require('./tools/sorting.js');
22
22
  var Selection = require('../../internal/Selection.js');
@@ -31,6 +31,7 @@ require('../Checkbox/Checkbox.Skeleton.js');
31
31
  var noopFn = require('../../internal/noopFn.js');
32
32
  var react = require('@floating-ui/react');
33
33
  var floatingUi_dom = require('../../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs.js');
34
+ var index = require('../FeatureFlags/index.js');
34
35
  var match = require('../../internal/keyboard/match.js');
35
36
  var ListBoxPropTypes = require('../ListBox/ListBoxPropTypes.js');
36
37
  var keys = require('../../internal/keyboard/keys.js');
@@ -136,11 +137,12 @@ const MultiSelect = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref
136
137
  const [prevOpenProp, setPrevOpenProp] = React.useState(open);
137
138
  const [topItems, setTopItems] = React.useState([]);
138
139
  const [itemsCleared, setItemsCleared] = React.useState(false);
140
+ const enableFloatingStyles = index.useFeatureFlag('enable-v12-dynamic-floating-styles') || autoAlign;
139
141
  const {
140
142
  refs,
141
143
  floatingStyles,
142
144
  middlewareData
143
- } = react.useFloating(autoAlign ? {
145
+ } = react.useFloating(enableFloatingStyles ? {
144
146
  placement: direction,
145
147
  // The floating element is positioned relative to its nearest
146
148
  // containing block (usually the viewport). It will in many cases also
@@ -148,7 +150,7 @@ const MultiSelect = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref
148
150
  // https://floating-ui.com/docs/misc#clipping
149
151
  strategy: 'fixed',
150
152
  // Middleware order matters, arrow should be last
151
- middleware: [react.flip({
153
+ middleware: [autoAlign && react.flip({
152
154
  crossAxis: false
153
155
  }), react.size({
154
156
  apply(_ref2) {
@@ -160,11 +162,11 @@ const MultiSelect = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref
160
162
  width: `${rects.reference.width}px`
161
163
  });
162
164
  }
163
- }), floatingUi_dom.hide()],
165
+ }), autoAlign && floatingUi_dom.hide()],
164
166
  whileElementsMounted: react.autoUpdate
165
167
  } : {});
166
168
  React.useLayoutEffect(() => {
167
- if (autoAlign) {
169
+ if (enableFloatingStyles) {
168
170
  const updatedFloatingStyles = {
169
171
  ...floatingStyles,
170
172
  visibility: middlewareData.hide?.referenceHidden ? 'hidden' : 'visible'
@@ -175,7 +177,7 @@ const MultiSelect = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref
175
177
  }
176
178
  });
177
179
  }
178
- }, [autoAlign, floatingStyles, refs.floating, middlewareData, open]);
180
+ }, [enableFloatingStyles, floatingStyles, refs.floating, middlewareData, open]);
179
181
  const {
180
182
  selectedItems: controlledSelectedItems,
181
183
  onItemChange,
@@ -290,7 +292,7 @@ const MultiSelect = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref
290
292
  [`${prefix}--multi-select--selected`]: selectedItems && selectedItems.length > 0,
291
293
  [`${prefix}--list-box--up`]: direction === 'top',
292
294
  [`${prefix}--multi-select--readonly`]: readOnly,
293
- [`${prefix}--autoalign`]: autoAlign,
295
+ [`${prefix}--autoalign`]: enableFloatingStyles,
294
296
  [`${prefix}--multi-select--selectall`]: selectAll
295
297
  });
296
298
 
@@ -421,15 +423,15 @@ const MultiSelect = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref
421
423
 
422
424
  // Memoize the value of getMenuProps to avoid an infinite loop
423
425
  const menuProps = React.useMemo(() => getMenuProps({
424
- ref: autoAlign ? refs.setFloating : null
425
- }), [autoAlign, getMenuProps, refs.setFloating]);
426
+ ref: enableFloatingStyles ? refs.setFloating : null
427
+ }), [enableFloatingStyles, getMenuProps, refs.setFloating]);
426
428
  return /*#__PURE__*/React__default["default"].createElement("div", {
427
429
  className: wrapperClasses
428
430
  }, /*#__PURE__*/React__default["default"].createElement("label", _rollupPluginBabelHelpers["extends"]({
429
431
  className: titleClasses
430
432
  }, getLabelProps()), titleText && titleText, selectedItems.length > 0 && /*#__PURE__*/React__default["default"].createElement("span", {
431
433
  className: `${prefix}--visually-hidden`
432
- }, clearSelectionDescription, " ", selectedItems.length, ' ', itemsSelectedText, ",", clearSelectionText)), /*#__PURE__*/React__default["default"].createElement(index["default"], {
434
+ }, clearSelectionDescription, " ", selectedItems.length, ' ', itemsSelectedText, ",", clearSelectionText)), /*#__PURE__*/React__default["default"].createElement(index$1["default"], {
433
435
  onFocus: isFluid ? handleFocus : undefined,
434
436
  onBlur: isFluid ? handleFocus : undefined,
435
437
  type: type,
@@ -449,8 +451,8 @@ const MultiSelect = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref
449
451
  className: `${prefix}--list-box__invalid-icon ${prefix}--list-box__invalid-icon--warning`
450
452
  }), /*#__PURE__*/React__default["default"].createElement("div", {
451
453
  className: multiSelectFieldWrapperClasses,
452
- ref: autoAlign ? refs.setReference : null
453
- }, selectedItems.length > 0 && /*#__PURE__*/React__default["default"].createElement(index["default"].Selection, {
454
+ ref: enableFloatingStyles ? refs.setReference : null
455
+ }, selectedItems.length > 0 && /*#__PURE__*/React__default["default"].createElement(index$1["default"].Selection, {
454
456
  readOnly: readOnly,
455
457
  clearSelection: !disabled && !readOnly ? clearSelection : noopFn.noopFn,
456
458
  selectionCount: selectedItemsLength
@@ -469,10 +471,10 @@ const MultiSelect = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref
469
471
  }, readOnlyEventHandlers), /*#__PURE__*/React__default["default"].createElement("span", {
470
472
  id: fieldLabelId,
471
473
  className: `${prefix}--list-box__label`
472
- }, label), /*#__PURE__*/React__default["default"].createElement(index["default"].MenuIcon, {
474
+ }, label), /*#__PURE__*/React__default["default"].createElement(index$1["default"].MenuIcon, {
473
475
  isOpen: isOpen,
474
476
  translateWithId: translateWithId
475
- })), normalizedSlug), /*#__PURE__*/React__default["default"].createElement(index["default"].Menu, menuProps, isOpen && sortItems(filteredItems, sortOptions).map((item, index$1) => {
477
+ })), normalizedSlug), /*#__PURE__*/React__default["default"].createElement(index$1["default"].Menu, menuProps, isOpen && sortItems(filteredItems, sortOptions).map((item, index) => {
476
478
  const isChecked = selectedItems.filter(selected => isEqual__default["default"](selected, item)).length > 0;
477
479
  const isIndeterminate = selectedItems.length !== 0 && item['isSelectAll'] && !isChecked;
478
480
  const itemProps = getItemProps({
@@ -482,11 +484,11 @@ const MultiSelect = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref
482
484
  ['aria-selected']: isChecked
483
485
  });
484
486
  const itemText = itemToString(item);
485
- return /*#__PURE__*/React__default["default"].createElement(index["default"].MenuItem, _rollupPluginBabelHelpers["extends"]({
487
+ return /*#__PURE__*/React__default["default"].createElement(index$1["default"].MenuItem, _rollupPluginBabelHelpers["extends"]({
486
488
  key: itemProps.id,
487
489
  isActive: isChecked && !item['isSelectAll'],
488
490
  "aria-label": itemText,
489
- isHighlighted: highlightedIndex === index$1,
491
+ isHighlighted: highlightedIndex === index,
490
492
  title: itemText,
491
493
  disabled: itemProps['aria-disabled']
492
494
  }, itemProps), /*#__PURE__*/React__default["default"].createElement("div", {
@@ -38,6 +38,10 @@ interface OverflowMenuProps {
38
38
  * Specify how the trigger tooltip should be aligned.
39
39
  */
40
40
  tooltipAlignment?: 'top' | 'top-left' | 'top-right' | 'bottom' | 'bottom-left' | 'bottom-right' | 'left' | 'right';
41
+ /**
42
+ * Specify a DOM node where the Menu should be rendered in. Defaults to document.body.
43
+ */
44
+ menuTarget?: Element;
41
45
  }
42
46
  declare const OverflowMenu: React.ForwardRefExoticComponent<OverflowMenuProps & React.RefAttributes<HTMLDivElement>>;
43
47
  export { OverflowMenu };
@@ -15,7 +15,8 @@ var PropTypes = require('prop-types');
15
15
  var cx = require('classnames');
16
16
  var iconsReact = require('@carbon/icons-react');
17
17
  var react = require('@floating-ui/react');
18
- var index = require('../../IconButton/index.js');
18
+ var index = require('../../FeatureFlags/index.js');
19
+ var index$1 = require('../../IconButton/index.js');
19
20
  var Menu = require('../../Menu/Menu.js');
20
21
  require('../../Menu/MenuItem.js');
21
22
  var mergeRefs = require('../../../tools/mergeRefs.js');
@@ -40,14 +41,16 @@ const OverflowMenu = /*#__PURE__*/React__default["default"].forwardRef(function
40
41
  size = defaultSize,
41
42
  menuAlignment = 'bottom-start',
42
43
  tooltipAlignment,
44
+ menuTarget,
43
45
  ...rest
44
46
  } = _ref;
47
+ const enableFloatingStyles = index.useFeatureFlag('enable-v12-dynamic-floating-styles') || autoAlign;
45
48
  const {
46
49
  refs,
47
50
  floatingStyles,
48
51
  placement,
49
52
  middlewareData
50
- } = react.useFloating(autoAlign ? {
53
+ } = react.useFloating(enableFloatingStyles ? {
51
54
  // Computing the position starts with initial positioning
52
55
  // via `placement`.
53
56
  placement: menuAlignment,
@@ -59,14 +62,16 @@ const OverflowMenu = /*#__PURE__*/React__default["default"].forwardRef(function
59
62
  // Middleware are executed as an in-between “middle” step of the
60
63
  // initial `placement` computation and eventual return of data for
61
64
  // rendering. Each middleware is executed in order.
62
- middleware: [react.flip({
65
+ middleware: [autoAlign && react.flip({
63
66
  // An explicit array of placements to try if the initial
64
67
  // `placement` doesn’t fit on the axes in which overflow
65
68
  // is checked.
66
69
  fallbackPlacements: menuAlignment.includes('bottom') ? ['bottom-start', 'bottom-end', 'top-start', 'top-end'] : ['top-start', 'top-end', 'bottom-start', 'bottom-end']
67
70
  })],
68
71
  whileElementsMounted: react.autoUpdate
69
- } : {} // When autoAlign is turned off, floating-ui will not be used
72
+ } : {}
73
+ // When autoAlign is turned off & the `enable-v12-dynamic-floating-styles` feature flag is not
74
+ // enabled, floating-ui will not be used
70
75
  );
71
76
  const id = useId.useId('overflowmenu');
72
77
  const prefix = usePrefix.usePrefix();
@@ -80,21 +85,21 @@ const OverflowMenu = /*#__PURE__*/React__default["default"].forwardRef(function
80
85
  handleClose
81
86
  } = useAttachedMenu.useAttachedMenu(triggerRef);
82
87
  React.useEffect(() => {
83
- if (autoAlign) {
88
+ if (enableFloatingStyles) {
84
89
  Object.keys(floatingStyles).forEach(style => {
85
90
  if (refs.floating.current) {
86
91
  refs.floating.current.style[style] = floatingStyles[style];
87
92
  }
88
93
  });
89
94
  }
90
- }, [floatingStyles, autoAlign, refs.floating, open, placement, middlewareData]);
95
+ }, [floatingStyles, enableFloatingStyles, refs.floating, open, placement, middlewareData]);
91
96
  function handleTriggerClick() {
92
97
  if (triggerRef.current) {
93
98
  hookOnClick();
94
99
  }
95
100
  }
96
101
  const containerClasses = cx__default["default"](className, `${prefix}--overflow-menu__container`, {
97
- [`${prefix}--autoalign`]: autoAlign
102
+ [`${prefix}--autoalign`]: enableFloatingStyles
98
103
  });
99
104
  const menuClasses = cx__default["default"](`${prefix}--overflow-menu__${menuAlignment}`);
100
105
  const triggerClasses = cx__default["default"](`${prefix}--overflow-menu`, {
@@ -105,7 +110,7 @@ const OverflowMenu = /*#__PURE__*/React__default["default"].forwardRef(function
105
110
  className: containerClasses,
106
111
  "aria-owns": open ? id : undefined,
107
112
  ref: forwardRef
108
- }), /*#__PURE__*/React__default["default"].createElement(index.IconButton, {
113
+ }), /*#__PURE__*/React__default["default"].createElement(index$1.IconButton, {
109
114
  "aria-controls": open ? id : undefined,
110
115
  "aria-haspopup": true,
111
116
  "aria-expanded": open,
@@ -125,12 +130,13 @@ const OverflowMenu = /*#__PURE__*/React__default["default"].forwardRef(function
125
130
  className: menuClasses,
126
131
  id: id,
127
132
  size: size,
128
- legacyAutoalign: !autoAlign,
133
+ legacyAutoalign: !enableFloatingStyles,
129
134
  open: open,
130
135
  onClose: handleClose,
131
136
  x: x,
132
137
  y: y,
133
- label: label
138
+ label: label,
139
+ target: menuTarget
134
140
  }, children));
135
141
  });
136
142
  OverflowMenu.propTypes = {
@@ -166,7 +172,11 @@ OverflowMenu.propTypes = {
166
172
  /**
167
173
  * Specify how the trigger tooltip should be aligned.
168
174
  */
169
- tooltipAlignment: PropTypes__default["default"].oneOf(['top', 'top-left', 'top-right', 'bottom', 'bottom-left', 'bottom-right', 'left', 'right'])
175
+ tooltipAlignment: PropTypes__default["default"].oneOf(['top', 'top-left', 'top-right', 'bottom', 'bottom-left', 'bottom-right', 'left', 'right']),
176
+ /**
177
+ * Specify a DOM node where the Menu should be rendered in. Defaults to document.body.
178
+ */
179
+ menuTarget: PropTypes__default["default"].instanceOf(typeof Element !== 'undefined' ? Element : Object)
170
180
  };
171
181
 
172
182
  exports.OverflowMenu = OverflowMenu;
@@ -223,7 +223,7 @@ const PaginationNav = /*#__PURE__*/React__default["default"].forwardRef(function
223
223
  }
224
224
  function pageWouldBeHidden(page) {
225
225
  const startOffset = itemsDisplayedOnPage <= 4 && page > 1 ? 0 : 1;
226
- const wouldBeHiddenInFront = page >= startOffset && page <= cuts.front;
226
+ const wouldBeHiddenInFront = page >= startOffset && page <= cuts.front || page === 0;
227
227
  const wouldBeHiddenInBack = page >= totalItems - cuts.back - 1 && page <= totalItems - 2;
228
228
  return wouldBeHiddenInFront || wouldBeHiddenInBack;
229
229
  }
@@ -21,6 +21,7 @@ var useEvent = require('../../internal/useEvent.js');
21
21
  var createPropAdapter = require('../../tools/createPropAdapter.js');
22
22
  var react = require('@floating-ui/react');
23
23
  var floatingUi_dom = require('../../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs.js');
24
+ var index = require('../FeatureFlags/index.js');
24
25
 
25
26
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
26
27
 
@@ -75,6 +76,7 @@ const Popover = /*#__PURE__*/React__default["default"].forwardRef(function Popov
75
76
  const floating = React.useRef(null);
76
77
  const caretRef = React.useRef(null);
77
78
  const popover = React.useRef(null);
79
+ const enableFloatingStyles = index.useFeatureFlag('enable-v12-dynamic-floating-styles') || autoAlign;
78
80
  let align = createPropAdapter.mapPopoverAlignProp(initialAlign);
79
81
 
80
82
  // If the `Popover` is the last focusable item in the tab order, it should also close when the browser window loses focus (#12922)
@@ -127,7 +129,7 @@ const Popover = /*#__PURE__*/React__default["default"].forwardRef(function Popov
127
129
  floatingStyles,
128
130
  placement,
129
131
  middlewareData
130
- } = react.useFloating(autoAlign ? {
132
+ } = react.useFloating(enableFloatingStyles ? {
131
133
  placement: align,
132
134
  // The floating element is positioned relative to its nearest
133
135
  // containing block (usually the viewport). It will in many cases also
@@ -135,13 +137,15 @@ const Popover = /*#__PURE__*/React__default["default"].forwardRef(function Popov
135
137
  // https://floating-ui.com/docs/misc#clipping
136
138
  strategy: 'fixed',
137
139
  // Middleware order matters, arrow should be last
138
- middleware: [react.offset(!isTabTip ? popoverDimensions?.current?.offset : 0), react.flip({
140
+ middleware: [react.offset(!isTabTip ? popoverDimensions?.current?.offset : 0), autoAlign && react.flip({
139
141
  fallbackAxisSideDirection: 'start'
140
142
  }), react.arrow({
141
143
  element: caretRef
142
- }), floatingUi_dom.hide()],
144
+ }), autoAlign && floatingUi_dom.hide()],
143
145
  whileElementsMounted: react.autoUpdate
144
- } : {} // When autoAlign is turned off, floating-ui will not be used
146
+ } : {}
147
+ // When autoAlign is turned off & the `enable-v12-dynamic-floating-styles` feature flag is not
148
+ // enabled, floating-ui will not be used
145
149
  );
146
150
  const value = React.useMemo(() => {
147
151
  return {
@@ -158,7 +162,7 @@ const Popover = /*#__PURE__*/React__default["default"].forwardRef(function Popov
158
162
  }
159
163
  }
160
164
  React.useEffect(() => {
161
- if (autoAlign) {
165
+ if (enableFloatingStyles) {
162
166
  const updatedFloatingStyles = {
163
167
  ...floatingStyles,
164
168
  visibility: middlewareData.hide?.referenceHidden ? 'hidden' : 'visible'
@@ -190,7 +194,7 @@ const Popover = /*#__PURE__*/React__default["default"].forwardRef(function Popov
190
194
  }
191
195
  }
192
196
  }
193
- }, [floatingStyles, refs.floating, autoAlign, middlewareData, placement, caret]);
197
+ }, [floatingStyles, refs.floating, enableFloatingStyles, middlewareData, placement, caret]);
194
198
  const ref = useMergedRefs.useMergedRefs([forwardRef, popover]);
195
199
  const currentAlignment = autoAlign && placement !== align ? placement : align;
196
200
  const className = cx__default["default"]({
@@ -199,7 +203,7 @@ const Popover = /*#__PURE__*/React__default["default"].forwardRef(function Popov
199
203
  [`${prefix}--popover--drop-shadow`]: dropShadow,
200
204
  [`${prefix}--popover--high-contrast`]: highContrast,
201
205
  [`${prefix}--popover--open`]: open,
202
- [`${prefix}--popover--auto-align ${prefix}--autoalign`]: autoAlign,
206
+ [`${prefix}--popover--auto-align ${prefix}--autoalign`]: enableFloatingStyles,
203
207
  [`${prefix}--popover--${currentAlignment}`]: true,
204
208
  [`${prefix}--popover--tab-tip`]: isTabTip
205
209
  }, customClassName);
@@ -215,8 +219,8 @@ const Popover = /*#__PURE__*/React__default["default"].forwardRef(function Popov
215
219
  * is on, even if they are a trigger element.
216
220
  */
217
221
  const isTriggerElement = item?.type === 'button';
218
- const isTriggerComponent = autoAlign && displayName && ['ToggletipButton'].includes(displayName);
219
- const isAllowedTriggerComponent = autoAlign && !['ToggletipContent', 'PopoverContent'].includes(displayName);
222
+ const isTriggerComponent = enableFloatingStyles && displayName && ['ToggletipButton'].includes(displayName);
223
+ const isAllowedTriggerComponent = enableFloatingStyles && !['ToggletipContent', 'PopoverContent'].includes(displayName);
220
224
  if ( /*#__PURE__*/React__default["default"].isValidElement(item) && (isTriggerElement || isTriggerComponent || isAllowedTriggerComponent)) {
221
225
  const className = item?.props?.className;
222
226
  const ref = (item?.props).ref;
@@ -235,7 +239,7 @@ const Popover = /*#__PURE__*/React__default["default"].forwardRef(function Popov
235
239
  // For a toggletip there is a specific trigger component, ToggletipButton.
236
240
  // In either of these caes we want to set this as the reference node for floating-ui autoAlign
237
241
  // positioning.
238
- if (autoAlign && item?.type?.displayName !== 'PopoverContent' || autoAlign && item?.type?.displayName === 'ToggletipButton') {
242
+ if (enableFloatingStyles && item?.type?.displayName !== 'PopoverContent' || enableFloatingStyles && item?.type?.displayName === 'ToggletipButton') {
239
243
  // Set the reference element for floating-ui
240
244
  refs.setReference(node);
241
245
  }
@@ -258,7 +262,7 @@ const Popover = /*#__PURE__*/React__default["default"].forwardRef(function Popov
258
262
  }, /*#__PURE__*/React__default["default"].createElement(BaseComponentAsAny, _rollupPluginBabelHelpers["extends"]({}, rest, {
259
263
  className: className,
260
264
  ref: ref
261
- }), autoAlign || isTabTip ? mappedChildren : children));
265
+ }), enableFloatingStyles || isTabTip ? mappedChildren : children));
262
266
  });
263
267
 
264
268
  // Note: this displayName is temporarily set so that Storybook ArgTable
@@ -269,7 +273,6 @@ if (process.env.NODE_ENV !== "production") {
269
273
  Popover.propTypes = {
270
274
  /**
271
275
  * Specify how the popover should align with the trigger element
272
-
273
276
  */
274
277
  align: deprecateValuesWithin["default"](PropTypes__default["default"].oneOf(['top', 'top-left',
275
278
  // deprecated use top-start instead
@@ -355,18 +358,19 @@ _ref2, forwardRef) {
355
358
  autoAlign
356
359
  } = React__default["default"].useContext(PopoverContext);
357
360
  const ref = useMergedRefs.useMergedRefs([setFloating, forwardRef]);
361
+ const enableFloatingStyles = index.useFeatureFlag('enable-v12-dynamic-floating-styles') || autoAlign;
358
362
  return /*#__PURE__*/React__default["default"].createElement("span", _rollupPluginBabelHelpers["extends"]({}, rest, {
359
363
  className: `${prefix}--popover`
360
364
  }), /*#__PURE__*/React__default["default"].createElement("span", {
361
365
  className: cx__default["default"](`${prefix}--popover-content`, className),
362
366
  ref: ref
363
- }, children, autoAlign && /*#__PURE__*/React__default["default"].createElement("span", {
367
+ }, children, enableFloatingStyles && /*#__PURE__*/React__default["default"].createElement("span", {
364
368
  className: cx__default["default"]({
365
369
  [`${prefix}--popover-caret`]: true,
366
370
  [`${prefix}--popover--auto-align`]: true
367
371
  }),
368
372
  ref: caretRef
369
- })), !autoAlign && /*#__PURE__*/React__default["default"].createElement("span", {
373
+ })), !enableFloatingStyles && /*#__PURE__*/React__default["default"].createElement("span", {
370
374
  className: cx__default["default"]({
371
375
  [`${prefix}--popover-caret`]: true
372
376
  }),
@@ -0,0 +1,25 @@
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
+ import React, { ReactNode } from 'react';
8
+ interface PortalProps {
9
+ /**
10
+ * Specify the children elements to be rendered inside of the <Portal>
11
+ */
12
+ children: ReactNode;
13
+ /**
14
+ * Provide a ref for a container node to render the portal
15
+ */
16
+ container?: React.RefObject<HTMLElement>;
17
+ }
18
+ /**
19
+ * Helper component for rendering content within a portal. By default, the
20
+ * portal will render into document.body. You can customize this behavior with
21
+ * the `container` prop. Any `children` provided to this component will be
22
+ * rendered inside of the container.
23
+ */
24
+ declare function Portal({ container, children, }: PortalProps): React.ReactPortal | null;
25
+ export { Portal };
@@ -1114,7 +1114,7 @@ class Slider extends React.PureComponent {
1114
1114
  className: lowerThumbClasses,
1115
1115
  role: "slider",
1116
1116
  id: twoHandles ? undefined : id,
1117
- tabIndex: !readOnly ? 0 : -1,
1117
+ tabIndex: readOnly || disabled ? undefined : 0,
1118
1118
  "aria-valuetext": `${formatLabel(value, '')}`,
1119
1119
  "aria-valuemax": twoHandles ? valueUpper : max,
1120
1120
  "aria-valuemin": min,
@@ -1133,7 +1133,7 @@ class Slider extends React.PureComponent {
1133
1133
  }, upperThumbWrapperProps), /*#__PURE__*/React__default["default"].createElement("div", {
1134
1134
  className: upperThumbClasses,
1135
1135
  role: "slider",
1136
- tabIndex: !readOnly ? 0 : -1,
1136
+ tabIndex: readOnly || disabled ? undefined : 0,
1137
1137
  "aria-valuemax": max,
1138
1138
  "aria-valuemin": value,
1139
1139
  "aria-valuenow": valueUpper,
@@ -11,6 +11,8 @@ Object.defineProperty(exports, '__esModule', { value: true });
11
11
 
12
12
  var React = require('react');
13
13
 
14
+ /* istanbul ignore file */
15
+
14
16
  /**
15
17
  * @param {React.RefObject<HTMLElement>} ref
16
18
  *
@@ -89,7 +89,7 @@ const DismissibleTag = _ref => {
89
89
  }, /*#__PURE__*/React__default["default"].createElement(Text.Text, {
90
90
  title: tagTitle ? tagTitle : text,
91
91
  className: `${prefix}--tag__label`
92
- }, text), /*#__PURE__*/React__default["default"].createElement(Tooltip.Tooltip, {
92
+ }, text), normalizedSlug, /*#__PURE__*/React__default["default"].createElement(Tooltip.Tooltip, {
93
93
  label: isEllipsisApplied ? dismissLabel : title,
94
94
  align: "bottom",
95
95
  className: tooltipClasses,
@@ -101,7 +101,7 @@ const DismissibleTag = _ref => {
101
101
  onClick: handleClose,
102
102
  disabled: disabled,
103
103
  "aria-label": title
104
- }, _Close || (_Close = /*#__PURE__*/React__default["default"].createElement(iconsReact.Close, null)))), normalizedSlug));
104
+ }, _Close || (_Close = /*#__PURE__*/React__default["default"].createElement(iconsReact.Close, null))))));
105
105
  };
106
106
  DismissibleTag.propTypes = {
107
107
  /**
@@ -5,7 +5,7 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
  import PropTypes from 'prop-types';
8
- import React, { MouseEventHandler, ReactNode } from 'react';
8
+ import React, { MouseEventHandler } from 'react';
9
9
  import { PolymorphicProps } from '../../types/common';
10
10
  import { SIZES } from './Tag';
11
11
  declare const TYPES: {
@@ -44,10 +44,6 @@ export interface OperationalTagBaseProps {
44
44
  * `md` (default) or `lg` sizes.
45
45
  */
46
46
  size?: keyof typeof SIZES;
47
- /**
48
- * **Experimental:** Provide a `Slug` component to be rendered inside the `OperationalTag` component
49
- */
50
- slug?: ReactNode;
51
47
  /**
52
48
  * Provide text to be rendered inside of a the tag.
53
49
  */
@@ -59,7 +55,7 @@ export interface OperationalTagBaseProps {
59
55
  }
60
56
  export type OperationalTagProps<T extends React.ElementType> = PolymorphicProps<T, OperationalTagBaseProps>;
61
57
  declare const OperationalTag: {
62
- <T extends React.ElementType<any, keyof React.JSX.IntrinsicElements>>({ className, disabled, id, renderIcon, slug, size, text, type, ...other }: OperationalTagProps<T>): import("react/jsx-runtime").JSX.Element;
58
+ <T extends React.ElementType<any, keyof React.JSX.IntrinsicElements>>({ className, disabled, id, renderIcon, size, text, type, ...other }: OperationalTagProps<T>): import("react/jsx-runtime").JSX.Element;
63
59
  propTypes: {
64
60
  /**
65
61
  * Provide a custom className that is applied to the containing <span>
@@ -83,10 +79,6 @@ declare const OperationalTag: {
83
79
  * `md` (default) or `lg` sizes.
84
80
  */
85
81
  size: PropTypes.Requireable<string>;
86
- /**
87
- * **Experimental:** Provide a `Slug` component to be rendered inside the `OperationalTag` component
88
- */
89
- slug: PropTypes.Requireable<PropTypes.ReactNodeLike>;
90
82
  /**
91
83
  * Provide text to be rendered inside of a the tag.
92
84
  */