@carbon/react 1.68.0 → 1.69.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 +871 -871
- package/README.md +3 -3
- package/es/components/Accordion/AccordionItem.js +0 -1
- package/es/components/Button/Button.js +6 -0
- package/es/components/Checkbox/Checkbox.js +1 -1
- package/es/components/CheckboxGroup/CheckboxGroup.js +1 -2
- package/es/components/CheckboxGroup/index.d.ts +10 -0
- package/es/components/ComboBox/ComboBox.js +13 -18
- package/es/components/ComboButton/index.js +10 -3
- package/es/components/DataTable/TableCell.d.ts +1 -4
- package/es/components/DataTable/TableCell.js +3 -2
- package/es/components/Disclosure/index.d.ts +18 -0
- package/es/components/Dropdown/Dropdown.js +11 -9
- package/es/components/FileUploader/FileUploader.d.ts +8 -92
- package/es/components/FileUploader/FileUploader.js +116 -137
- package/es/components/Grid/CSSGrid.js +8 -1
- package/es/components/Grid/Grid.js +4 -0
- package/es/components/IdPrefix/index.d.ts +26 -0
- package/es/components/ListBox/next/ListBoxSelection.d.ts +9 -1
- package/es/components/ListBox/next/ListBoxSelection.js +12 -5
- package/es/components/Menu/MenuItem.js +1 -4
- package/es/components/MenuButton/index.d.ts +4 -0
- package/es/components/MenuButton/index.js +19 -5
- package/es/components/MultiSelect/FilterableMultiSelect.d.ts +4 -0
- package/es/components/MultiSelect/FilterableMultiSelect.js +32 -6
- package/es/components/MultiSelect/MultiSelect.js +11 -9
- package/es/components/OverflowMenu/next/index.d.ts +4 -0
- package/es/components/OverflowMenu/next/index.js +19 -9
- package/es/components/PaginationNav/PaginationNav.js +1 -1
- package/es/components/Popover/index.js +18 -14
- package/es/components/Portal/index.d.ts +25 -0
- package/es/components/Slider/Slider.js +2 -2
- package/es/components/Tabs/Tabs.js +46 -20
- package/es/components/Tag/DismissibleTag.js +2 -2
- package/es/components/Tag/OperationalTag.d.ts +2 -10
- package/es/components/Tag/OperationalTag.js +2 -14
- package/es/components/Tag/SelectableTag.d.ts +18 -10
- package/es/components/Tag/SelectableTag.js +22 -28
- package/es/components/Toggle/Toggle.js +2 -0
- package/es/components/ToggleSmall/ToggleSmall.Skeleton.d.ts +49 -0
- package/es/components/ToggleSmall/index.d.ts +7 -0
- package/es/components/TreeView/TreeNode.js +4 -2
- package/es/components/TreeView/TreeView.js +4 -4
- package/es/components/UIShell/SideNavMenuItem.d.ts +4 -3
- package/es/components/UIShell/SideNavMenuItem.js +1 -4
- package/es/index.js +1 -1
- package/es/internal/useIdPrefix.d.ts +9 -0
- package/lib/components/Accordion/AccordionItem.js +0 -1
- package/lib/components/Button/Button.js +6 -0
- package/lib/components/Checkbox/Checkbox.js +1 -1
- package/lib/components/CheckboxGroup/CheckboxGroup.js +1 -2
- package/lib/components/CheckboxGroup/index.d.ts +10 -0
- package/lib/components/ComboBox/ComboBox.js +18 -23
- package/lib/components/ComboButton/index.js +12 -5
- package/lib/components/DataTable/TableCell.d.ts +1 -4
- package/lib/components/DataTable/TableCell.js +3 -2
- package/lib/components/Disclosure/index.d.ts +18 -0
- package/lib/components/Dropdown/Dropdown.js +18 -16
- package/lib/components/FileUploader/FileUploader.d.ts +8 -92
- package/lib/components/FileUploader/FileUploader.js +113 -134
- package/lib/components/Grid/CSSGrid.js +8 -1
- package/lib/components/Grid/Grid.js +4 -0
- package/lib/components/IdPrefix/index.d.ts +26 -0
- package/lib/components/ListBox/next/ListBoxSelection.d.ts +9 -1
- package/lib/components/ListBox/next/ListBoxSelection.js +12 -5
- package/lib/components/Menu/MenuItem.js +1 -4
- package/lib/components/MenuButton/index.d.ts +4 -0
- package/lib/components/MenuButton/index.js +19 -5
- package/lib/components/MultiSelect/FilterableMultiSelect.d.ts +4 -0
- package/lib/components/MultiSelect/FilterableMultiSelect.js +32 -6
- package/lib/components/MultiSelect/MultiSelect.js +18 -16
- package/lib/components/OverflowMenu/next/index.d.ts +4 -0
- package/lib/components/OverflowMenu/next/index.js +21 -11
- package/lib/components/PaginationNav/PaginationNav.js +1 -1
- package/lib/components/Popover/index.js +18 -14
- package/lib/components/Portal/index.d.ts +25 -0
- package/lib/components/Slider/Slider.js +2 -2
- package/lib/components/Tabs/Tabs.js +46 -20
- package/lib/components/Tag/DismissibleTag.js +2 -2
- package/lib/components/Tag/OperationalTag.d.ts +2 -10
- package/lib/components/Tag/OperationalTag.js +2 -14
- package/lib/components/Tag/SelectableTag.d.ts +18 -10
- package/lib/components/Tag/SelectableTag.js +22 -28
- package/lib/components/Toggle/Toggle.js +2 -0
- package/lib/components/ToggleSmall/ToggleSmall.Skeleton.d.ts +49 -0
- package/lib/components/ToggleSmall/index.d.ts +7 -0
- package/lib/components/TreeView/TreeNode.js +4 -2
- package/lib/components/TreeView/TreeView.js +4 -4
- package/lib/components/UIShell/SideNavMenuItem.d.ts +4 -3
- package/lib/components/UIShell/SideNavMenuItem.js +1 -4
- package/lib/index.js +2 -2
- package/lib/internal/useIdPrefix.d.ts +9 -0
- package/package.json +10 -9
- package/telemetry.yml +809 -809
|
@@ -36,6 +36,7 @@ function ListBoxSelection(_ref) {
|
|
|
36
36
|
selectionCount,
|
|
37
37
|
translateWithId: t = defaultTranslateWithId,
|
|
38
38
|
disabled,
|
|
39
|
+
readOnly,
|
|
39
40
|
onClearSelection,
|
|
40
41
|
...rest
|
|
41
42
|
} = _ref;
|
|
@@ -50,7 +51,7 @@ function ListBoxSelection(_ref) {
|
|
|
50
51
|
});
|
|
51
52
|
function onClick(event) {
|
|
52
53
|
event.stopPropagation();
|
|
53
|
-
if (disabled) {
|
|
54
|
+
if (disabled || readOnly) {
|
|
54
55
|
return;
|
|
55
56
|
}
|
|
56
57
|
clearSelection(event);
|
|
@@ -67,21 +68,23 @@ function ListBoxSelection(_ref) {
|
|
|
67
68
|
}, selectionCount), /*#__PURE__*/React__default["default"].createElement("button", {
|
|
68
69
|
"aria-label": description,
|
|
69
70
|
className: `${prefix}--tag__close-icon`,
|
|
70
|
-
disabled: disabled,
|
|
71
|
+
disabled: disabled || readOnly,
|
|
71
72
|
onClick: onClick,
|
|
72
73
|
tabIndex: -1,
|
|
73
74
|
title: description,
|
|
74
|
-
type: "button"
|
|
75
|
+
type: "button",
|
|
76
|
+
"aria-disabled": readOnly ? true : undefined
|
|
75
77
|
}, _Close || (_Close = /*#__PURE__*/React__default["default"].createElement(iconsReact.Close, null))));
|
|
76
78
|
}
|
|
77
79
|
return /*#__PURE__*/React__default["default"].createElement("button", _rollupPluginBabelHelpers["extends"]({}, rest, {
|
|
78
80
|
"aria-label": description,
|
|
79
81
|
className: className,
|
|
80
|
-
disabled: disabled,
|
|
82
|
+
disabled: disabled || readOnly,
|
|
81
83
|
onClick: onClick,
|
|
82
84
|
tabIndex: -1,
|
|
83
85
|
title: description,
|
|
84
|
-
type: "button"
|
|
86
|
+
type: "button",
|
|
87
|
+
"aria-disabled": readOnly ? true : undefined
|
|
85
88
|
}), _Close2 || (_Close2 = /*#__PURE__*/React__default["default"].createElement(iconsReact.Close, null)));
|
|
86
89
|
}
|
|
87
90
|
ListBoxSelection.propTypes = {
|
|
@@ -94,6 +97,10 @@ ListBoxSelection.propTypes = {
|
|
|
94
97
|
* Specify whether or not the clear selection element should be disabled
|
|
95
98
|
*/
|
|
96
99
|
disabled: PropTypes__default["default"].bool,
|
|
100
|
+
/**
|
|
101
|
+
* Whether or not the listbox is readonly
|
|
102
|
+
*/
|
|
103
|
+
readOnly: PropTypes__default["default"].bool,
|
|
97
104
|
/**
|
|
98
105
|
* Specify an optional `onClearSelection` handler that is called when the underlying
|
|
99
106
|
* element is cleared
|
|
@@ -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
|
|
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
|
-
|
|
51
|
-
|
|
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;
|
|
@@ -143,6 +143,10 @@ export interface FilterableMultiSelectProps<ItemType> extends MultiSelectSorting
|
|
|
143
143
|
* what this field is for
|
|
144
144
|
*/
|
|
145
145
|
placeholder?: string;
|
|
146
|
+
/**
|
|
147
|
+
* Whether or not the filterable multiselect is readonly
|
|
148
|
+
*/
|
|
149
|
+
readOnly?: boolean;
|
|
146
150
|
/**
|
|
147
151
|
* Specify feedback (mode) of the selection.
|
|
148
152
|
* `top`: selected item jumps to top
|
|
@@ -102,6 +102,7 @@ const FilterableMultiSelect = /*#__PURE__*/React__default["default"].forwardRef(
|
|
|
102
102
|
onChange,
|
|
103
103
|
onMenuChange,
|
|
104
104
|
placeholder,
|
|
105
|
+
readOnly,
|
|
105
106
|
titleText,
|
|
106
107
|
type,
|
|
107
108
|
selectionFeedback = 'top-after-reopen',
|
|
@@ -244,9 +245,11 @@ const FilterableMultiSelect = /*#__PURE__*/React__default["default"].forwardRef(
|
|
|
244
245
|
}
|
|
245
246
|
};
|
|
246
247
|
function handleMenuChange(forceIsOpen) {
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
248
|
+
if (!readOnly) {
|
|
249
|
+
const nextIsOpen = forceIsOpen ?? !isOpen;
|
|
250
|
+
setIsOpen(nextIsOpen);
|
|
251
|
+
validateHighlightFocus();
|
|
252
|
+
}
|
|
250
253
|
}
|
|
251
254
|
React.useEffect(() => {
|
|
252
255
|
onMenuChange?.(isOpen);
|
|
@@ -435,7 +438,8 @@ const FilterableMultiSelect = /*#__PURE__*/React__default["default"].forwardRef(
|
|
|
435
438
|
[`${prefix}--multi-select--open`]: isOpen,
|
|
436
439
|
[`${prefix}--multi-select--inline`]: inline,
|
|
437
440
|
[`${prefix}--multi-select--selected`]: controlledSelectedItems?.length > 0,
|
|
438
|
-
[`${prefix}--multi-select--filterable--input-focused`]: inputFocused
|
|
441
|
+
[`${prefix}--multi-select--filterable--input-focused`]: inputFocused,
|
|
442
|
+
[`${prefix}--multi-select--readonly`]: readOnly
|
|
439
443
|
});
|
|
440
444
|
const labelProps = getLabelProps();
|
|
441
445
|
const buttonProps = getToggleButtonProps({
|
|
@@ -522,6 +526,24 @@ const FilterableMultiSelect = /*#__PURE__*/React__default["default"].forwardRef(
|
|
|
522
526
|
setIsFocused(evt?.type === 'focus' ? true : false);
|
|
523
527
|
}
|
|
524
528
|
};
|
|
529
|
+
const mergedRef = mergeRefs["default"](textInput, inputProps.ref);
|
|
530
|
+
const readOnlyEventHandlers = readOnly ? {
|
|
531
|
+
onClick: evt => {
|
|
532
|
+
// NOTE: does not prevent click
|
|
533
|
+
evt.preventDefault();
|
|
534
|
+
// focus on the element as per readonly input behavior
|
|
535
|
+
if (mergedRef.current !== undefined) {
|
|
536
|
+
mergedRef.current.focus();
|
|
537
|
+
}
|
|
538
|
+
},
|
|
539
|
+
onKeyDown: evt => {
|
|
540
|
+
const selectAccessKeys = ['ArrowDown', 'ArrowUp', ' ', 'Enter'];
|
|
541
|
+
// This prevents the select from opening for the above keys
|
|
542
|
+
if (selectAccessKeys.includes(evt.key)) {
|
|
543
|
+
evt.preventDefault();
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
} : {};
|
|
525
547
|
const clearSelectionContent = controlledSelectedItems.length > 0 ? /*#__PURE__*/React__default["default"].createElement("span", {
|
|
526
548
|
className: `${prefix}--visually-hidden`
|
|
527
549
|
}, clearSelectionDescription, " ", controlledSelectedItems.length, ",", clearSelectionText) : /*#__PURE__*/React__default["default"].createElement("span", {
|
|
@@ -545,12 +567,13 @@ const FilterableMultiSelect = /*#__PURE__*/React__default["default"].forwardRef(
|
|
|
545
567
|
invalidText: invalidText,
|
|
546
568
|
warn: warn,
|
|
547
569
|
warnText: warnText,
|
|
548
|
-
isOpen: isOpen,
|
|
570
|
+
isOpen: !readOnly && isOpen,
|
|
549
571
|
size: size
|
|
550
572
|
}, /*#__PURE__*/React__default["default"].createElement("div", {
|
|
551
573
|
className: `${prefix}--list-box__field`,
|
|
552
574
|
ref: autoAlign ? refs.setReference : null
|
|
553
575
|
}, controlledSelectedItems.length > 0 && /*#__PURE__*/React__default["default"].createElement(ListBoxSelection["default"], {
|
|
576
|
+
readOnly: readOnly,
|
|
554
577
|
clearSelection: () => {
|
|
555
578
|
clearSelection();
|
|
556
579
|
if (textInput.current) {
|
|
@@ -563,7 +586,9 @@ const FilterableMultiSelect = /*#__PURE__*/React__default["default"].forwardRef(
|
|
|
563
586
|
}), /*#__PURE__*/React__default["default"].createElement("input", _rollupPluginBabelHelpers["extends"]({
|
|
564
587
|
className: inputClasses
|
|
565
588
|
}, inputProps, {
|
|
566
|
-
ref:
|
|
589
|
+
ref: mergedRef
|
|
590
|
+
}, readOnlyEventHandlers, {
|
|
591
|
+
readOnly: readOnly
|
|
567
592
|
})), invalid && /*#__PURE__*/React__default["default"].createElement(iconsReact.WarningFilled, {
|
|
568
593
|
className: `${prefix}--list-box__invalid-icon`
|
|
569
594
|
}), showWarning && /*#__PURE__*/React__default["default"].createElement(iconsReact.WarningAltFilled, {
|
|
@@ -572,6 +597,7 @@ const FilterableMultiSelect = /*#__PURE__*/React__default["default"].forwardRef(
|
|
|
572
597
|
clearSelection: clearInputValue,
|
|
573
598
|
disabled: disabled,
|
|
574
599
|
translateWithId: translateWithId,
|
|
600
|
+
readOnly: readOnly,
|
|
575
601
|
onMouseUp: event => {
|
|
576
602
|
// If we do not stop this event from propagating,
|
|
577
603
|
// it seems like Downshift takes our event and
|
|
@@ -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(
|
|
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 (
|
|
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
|
-
}, [
|
|
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`]:
|
|
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:
|
|
425
|
-
}), [
|
|
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:
|
|
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
|
|
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
|
|
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('../../
|
|
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(
|
|
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
|
-
} : {}
|
|
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 (
|
|
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,
|
|
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`]:
|
|
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: !
|
|
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(
|
|
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
|
-
} : {}
|
|
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 (
|
|
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,
|
|
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`]:
|
|
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 =
|
|
219
|
-
const isAllowedTriggerComponent =
|
|
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 (
|
|
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
|
-
}),
|
|
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,
|
|
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
|
-
})), !
|
|
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 };
|