@carbon/react 1.84.0-rc.0 → 1.85.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.
- package/.playwright/INTERNAL_AVT_REPORT_DO_NOT_USE.json +943 -943
- package/es/components/AILabel/index.js +6 -1
- package/es/components/Checkbox/Checkbox.d.ts +2 -2
- package/es/components/Checkbox/Checkbox.js +8 -8
- package/es/components/CheckboxGroup/CheckboxGroup.d.ts +2 -2
- package/es/components/CheckboxGroup/CheckboxGroup.js +9 -8
- package/es/components/CodeSnippet/CodeSnippet.js +2 -4
- package/es/components/ComboBox/ComboBox.d.ts +1 -1
- package/es/components/ComboBox/ComboBox.js +8 -7
- package/es/components/ComposedModal/ComposedModal.d.ts +1 -1
- package/es/components/ComposedModal/ComposedModal.js +34 -12
- package/es/components/ContainedList/ContainedList.d.ts +1 -1
- package/es/components/ContainedList/ContainedList.js +4 -2
- package/es/components/ContentSwitcher/ContentSwitcher.js +6 -5
- package/es/components/DataTable/DataTable.js +3 -0
- package/es/components/DataTable/TableDecoratorRow.d.ts +2 -2
- package/es/components/DataTable/TableDecoratorRow.js +8 -8
- package/es/components/DataTable/TableExpandRow.d.ts +1 -1
- package/es/components/DataTable/TableExpandRow.js +15 -6
- package/es/components/DataTable/TableHeader.js +10 -10
- package/es/components/DataTable/TableRow.js +12 -4
- package/es/components/DataTable/tools/normalize.js +2 -1
- package/es/components/DatePickerInput/DatePickerInput.js +8 -7
- package/es/components/Dialog/index.d.ts +5 -1
- package/es/components/Dialog/index.js +20 -0
- package/es/components/Dropdown/Dropdown.d.ts +1 -1
- package/es/components/Dropdown/Dropdown.js +8 -10
- package/es/components/FileUploader/FileUploaderButton.js +2 -2
- package/es/components/FileUploader/FileUploaderDropContainer.js +2 -2
- package/es/components/FileUploader/FileUploaderItem.js +2 -2
- package/es/components/Layer/index.d.ts +1 -3
- package/es/components/Layer/index.js +9 -8
- package/es/components/Menu/Menu.js +0 -6
- package/es/components/Modal/Modal.d.ts +2 -2
- package/es/components/Modal/Modal.js +39 -11
- package/es/components/MultiSelect/FilterableMultiSelect.d.ts +1 -1
- package/es/components/MultiSelect/FilterableMultiSelect.js +29 -7
- package/es/components/MultiSelect/MultiSelect.d.ts +1 -1
- package/es/components/MultiSelect/MultiSelect.js +8 -7
- package/es/components/NumberInput/NumberInput.d.ts +1 -1
- package/es/components/NumberInput/NumberInput.js +9 -8
- package/es/components/OverflowMenu/OverflowMenu.js +4 -5
- package/es/components/PageHeader/PageHeader.d.ts +10 -9
- package/es/components/PageHeader/PageHeader.js +94 -34
- package/es/components/PageHeader/index.d.ts +2 -2
- package/es/components/PageHeader/index.js +1 -1
- package/es/components/Popover/index.js +2 -1
- package/es/components/RadioButton/RadioButton.d.ts +2 -2
- package/es/components/RadioButton/RadioButton.js +8 -8
- package/es/components/RadioButtonGroup/RadioButtonGroup.d.ts +2 -2
- package/es/components/RadioButtonGroup/RadioButtonGroup.js +9 -8
- package/es/components/RadioTile/RadioTile.d.ts +1 -1
- package/es/components/RadioTile/RadioTile.js +8 -7
- package/es/components/Search/Search.js +0 -1
- package/es/components/Select/Select.d.ts +2 -2
- package/es/components/Select/Select.js +8 -7
- package/es/components/Slider/Slider.js +6 -0
- package/es/components/Tag/DismissibleTag.d.ts +1 -1
- package/es/components/Tag/DismissibleTag.js +9 -8
- package/es/components/Tag/Tag.d.ts +1 -1
- package/es/components/Tag/Tag.js +9 -8
- package/es/components/TextArea/TextArea.js +12 -11
- package/es/components/TextInput/TextInput.d.ts +1 -1
- package/es/components/TextInput/TextInput.js +20 -9
- package/es/components/Tile/Tile.d.ts +2 -2
- package/es/components/Tile/Tile.js +30 -36
- package/es/components/TileGroup/TileGroup.d.ts +4 -4
- package/es/components/TileGroup/TileGroup.js +45 -53
- package/es/components/TileGroup/index.d.ts +3 -3
- package/es/components/Toggletip/index.js +2 -2
- package/es/components/Tooltip/DefinitionTooltip.js +1 -0
- package/es/components/TreeView/TreeNode.js +3 -3
- package/es/components/TreeView/TreeView.js +3 -3
- package/es/components/UIShell/Content.d.ts +5 -3
- package/es/components/UIShell/HeaderMenuItem.js +2 -1
- package/es/components/UIShell/HeaderPanel.d.ts +2 -2
- package/es/components/UIShell/HeaderPanel.js +9 -5
- package/es/index.js +1 -1
- package/es/internal/Selection.js +8 -3
- package/es/internal/environment.js +1 -12
- package/es/internal/{__mocks__/mockHTMLElement.d.ts → index.d.ts} +2 -4
- package/es/internal/useOverflowItems.d.ts +29 -0
- package/es/internal/useOverflowItems.js +122 -0
- package/es/internal/useResizeObserver.d.ts +1 -1
- package/es/internal/utils.d.ts +14 -0
- package/es/internal/utils.js +18 -0
- package/es/tools/uniqueId.d.ts +1 -6
- package/lib/components/AILabel/index.js +6 -1
- package/lib/components/Checkbox/Checkbox.d.ts +2 -2
- package/lib/components/Checkbox/Checkbox.js +7 -7
- package/lib/components/CheckboxGroup/CheckboxGroup.d.ts +2 -2
- package/lib/components/CheckboxGroup/CheckboxGroup.js +8 -7
- package/lib/components/CodeSnippet/CodeSnippet.js +2 -4
- package/lib/components/ComboBox/ComboBox.d.ts +1 -1
- package/lib/components/ComboBox/ComboBox.js +11 -10
- package/lib/components/ComposedModal/ComposedModal.d.ts +1 -1
- package/lib/components/ComposedModal/ComposedModal.js +35 -13
- package/lib/components/ContainedList/ContainedList.d.ts +1 -1
- package/lib/components/ContainedList/ContainedList.js +4 -2
- package/lib/components/ContentSwitcher/ContentSwitcher.js +5 -4
- package/lib/components/DataTable/DataTable.js +3 -0
- package/lib/components/DataTable/TableDecoratorRow.d.ts +2 -2
- package/lib/components/DataTable/TableDecoratorRow.js +8 -8
- package/lib/components/DataTable/TableExpandRow.d.ts +1 -1
- package/lib/components/DataTable/TableExpandRow.js +14 -5
- package/lib/components/DataTable/TableHeader.js +9 -9
- package/lib/components/DataTable/TableRow.js +11 -3
- package/lib/components/DataTable/tools/normalize.js +2 -1
- package/lib/components/DatePickerInput/DatePickerInput.js +7 -6
- package/lib/components/Dialog/index.d.ts +5 -1
- package/lib/components/Dialog/index.js +20 -0
- package/lib/components/Dropdown/Dropdown.d.ts +1 -1
- package/lib/components/Dropdown/Dropdown.js +12 -14
- package/lib/components/FileUploader/FileUploaderButton.js +2 -2
- package/lib/components/FileUploader/FileUploaderDropContainer.js +2 -2
- package/lib/components/FileUploader/FileUploaderItem.js +2 -2
- package/lib/components/Layer/index.d.ts +1 -3
- package/lib/components/Layer/index.js +9 -8
- package/lib/components/Menu/Menu.js +0 -6
- package/lib/components/Modal/Modal.d.ts +2 -2
- package/lib/components/Modal/Modal.js +47 -19
- package/lib/components/MultiSelect/FilterableMultiSelect.d.ts +1 -1
- package/lib/components/MultiSelect/FilterableMultiSelect.js +33 -11
- package/lib/components/MultiSelect/MultiSelect.d.ts +1 -1
- package/lib/components/MultiSelect/MultiSelect.js +13 -12
- package/lib/components/NumberInput/NumberInput.d.ts +1 -1
- package/lib/components/NumberInput/NumberInput.js +8 -7
- package/lib/components/OverflowMenu/OverflowMenu.js +4 -5
- package/lib/components/PageHeader/PageHeader.d.ts +10 -9
- package/lib/components/PageHeader/PageHeader.js +92 -34
- package/lib/components/PageHeader/index.d.ts +2 -2
- package/lib/components/PageHeader/index.js +0 -2
- package/lib/components/Popover/index.js +2 -1
- package/lib/components/RadioButton/RadioButton.d.ts +2 -2
- package/lib/components/RadioButton/RadioButton.js +7 -7
- package/lib/components/RadioButtonGroup/RadioButtonGroup.d.ts +2 -2
- package/lib/components/RadioButtonGroup/RadioButtonGroup.js +10 -9
- package/lib/components/RadioTile/RadioTile.d.ts +1 -1
- package/lib/components/RadioTile/RadioTile.js +7 -6
- package/lib/components/Search/Search.js +0 -1
- package/lib/components/Select/Select.d.ts +2 -2
- package/lib/components/Select/Select.js +7 -6
- package/lib/components/Slider/Slider.js +6 -0
- package/lib/components/Tag/DismissibleTag.d.ts +1 -1
- package/lib/components/Tag/DismissibleTag.js +8 -7
- package/lib/components/Tag/Tag.d.ts +1 -1
- package/lib/components/Tag/Tag.js +8 -7
- package/lib/components/TextArea/TextArea.js +11 -10
- package/lib/components/TextInput/TextInput.d.ts +1 -1
- package/lib/components/TextInput/TextInput.js +19 -8
- package/lib/components/Tile/Tile.d.ts +2 -2
- package/lib/components/Tile/Tile.js +29 -35
- package/lib/components/TileGroup/TileGroup.d.ts +4 -4
- package/lib/components/TileGroup/TileGroup.js +44 -52
- package/lib/components/TileGroup/index.d.ts +3 -3
- package/lib/components/Toggletip/index.js +2 -2
- package/lib/components/Tooltip/DefinitionTooltip.js +1 -0
- package/lib/components/TreeView/TreeNode.js +3 -3
- package/lib/components/TreeView/TreeView.js +3 -3
- package/lib/components/UIShell/Content.d.ts +5 -3
- package/lib/components/UIShell/HeaderMenuItem.js +2 -1
- package/lib/components/UIShell/HeaderPanel.d.ts +2 -2
- package/lib/components/UIShell/HeaderPanel.js +8 -4
- package/lib/index.js +1 -1
- package/lib/internal/Selection.js +8 -3
- package/lib/internal/environment.js +1 -12
- package/lib/internal/{__mocks__/mockHTMLElement.d.ts → index.d.ts} +2 -4
- package/lib/internal/useOverflowItems.d.ts +29 -0
- package/lib/internal/useOverflowItems.js +126 -0
- package/lib/internal/useResizeObserver.d.ts +1 -1
- package/lib/internal/utils.d.ts +14 -0
- package/lib/internal/utils.js +22 -0
- package/lib/tools/uniqueId.d.ts +1 -6
- package/package.json +14 -23
- package/telemetry.yml +3 -0
- package/es/tools/uniqueId.js +0 -14
- package/lib/tools/uniqueId.js +0 -18
|
@@ -16,6 +16,10 @@ var React = require('react');
|
|
|
16
16
|
var iconsReact = require('@carbon/icons-react');
|
|
17
17
|
var TableCell = require('./TableCell.js');
|
|
18
18
|
var usePrefix = require('../../internal/usePrefix.js');
|
|
19
|
+
var TableSlugRow = require('./TableSlugRow.js');
|
|
20
|
+
var TableDecoratorRow = require('./TableDecoratorRow.js');
|
|
21
|
+
var index = require('../AILabel/index.js');
|
|
22
|
+
var utils = require('../../internal/utils.js');
|
|
19
23
|
|
|
20
24
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
21
25
|
|
|
@@ -40,16 +44,21 @@ const TableExpandRow = /*#__PURE__*/React__default["default"].forwardRef(({
|
|
|
40
44
|
|
|
41
45
|
// We need to put the AILabel and Decorator before the expansion arrow and all other table cells after the arrow.
|
|
42
46
|
let rowHasAILabel;
|
|
43
|
-
const decorator =
|
|
44
|
-
if (child
|
|
45
|
-
if (child.props.slug
|
|
47
|
+
const decorator = React.Children.toArray(children).map(child => {
|
|
48
|
+
if (utils.isComponentElement(child, TableSlugRow["default"])) {
|
|
49
|
+
if (child.props.slug) {
|
|
50
|
+
rowHasAILabel = true;
|
|
51
|
+
}
|
|
52
|
+
return child;
|
|
53
|
+
} else if (utils.isComponentElement(child, TableDecoratorRow["default"])) {
|
|
54
|
+
if (utils.isComponentElement(child.props.decorator, index.AILabel)) {
|
|
46
55
|
rowHasAILabel = true;
|
|
47
56
|
}
|
|
48
57
|
return child;
|
|
49
58
|
}
|
|
50
59
|
});
|
|
51
|
-
const normalizedChildren =
|
|
52
|
-
if (child.type
|
|
60
|
+
const normalizedChildren = React.Children.toArray(children).map(child => {
|
|
61
|
+
if (/*#__PURE__*/React.isValidElement(child) && child.type !== TableSlugRow["default"] && child.type !== TableDecoratorRow["default"]) {
|
|
53
62
|
return child;
|
|
54
63
|
}
|
|
55
64
|
});
|
|
@@ -17,6 +17,8 @@ var iconsReact = require('@carbon/icons-react');
|
|
|
17
17
|
require('./state/sorting.js');
|
|
18
18
|
var useId = require('../../internal/useId.js');
|
|
19
19
|
var usePrefix = require('../../internal/usePrefix.js');
|
|
20
|
+
var index = require('../AILabel/index.js');
|
|
21
|
+
var utils = require('../../internal/utils.js');
|
|
20
22
|
var sortStates = require('./state/sortStates.js');
|
|
21
23
|
|
|
22
24
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
@@ -71,15 +73,13 @@ const TableHeader = /*#__PURE__*/React__default["default"].forwardRef(function T
|
|
|
71
73
|
|
|
72
74
|
// AILabel is always size `mini`
|
|
73
75
|
const AILableRef = React.useRef(null);
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
});
|
|
82
|
-
}
|
|
76
|
+
const candidate = slug ?? decorator;
|
|
77
|
+
const candidateIsAILabel = utils.isComponentElement(candidate, index.AILabel);
|
|
78
|
+
const colHasAILabel = candidateIsAILabel;
|
|
79
|
+
const normalizedDecorator = candidateIsAILabel ? /*#__PURE__*/React.cloneElement(candidate, {
|
|
80
|
+
size: 'mini',
|
|
81
|
+
ref: AILableRef
|
|
82
|
+
}) : null;
|
|
83
83
|
const headerLabelClassNames = cx__default["default"]({
|
|
84
84
|
[`${prefix}--table-header-label`]: true,
|
|
85
85
|
[`${prefix}--table-header-label--slug ${prefix}--table-header-label--ai-label`]: colHasAILabel,
|
|
@@ -14,6 +14,10 @@ var React = require('react');
|
|
|
14
14
|
var PropTypes = require('prop-types');
|
|
15
15
|
var cx = require('classnames');
|
|
16
16
|
var usePrefix = require('../../internal/usePrefix.js');
|
|
17
|
+
var TableSlugRow = require('./TableSlugRow.js');
|
|
18
|
+
var TableDecoratorRow = require('./TableDecoratorRow.js');
|
|
19
|
+
var index = require('../AILabel/index.js');
|
|
20
|
+
var utils = require('../../internal/utils.js');
|
|
17
21
|
|
|
18
22
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
19
23
|
|
|
@@ -25,11 +29,15 @@ const TableRow = /*#__PURE__*/React__default["default"].forwardRef((props, ref)
|
|
|
25
29
|
const prefix = usePrefix.usePrefix();
|
|
26
30
|
let rowHasAILabel;
|
|
27
31
|
if (props?.children) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
32
|
+
// TODO: Why is this loop a `map`? It's not returning anything. Ideally,
|
|
33
|
+
// it seems that it should be a `some`. Maybe I'm missing something?
|
|
34
|
+
React.Children.toArray(props.children).map(child => {
|
|
35
|
+
if (utils.isComponentElement(child, TableSlugRow["default"])) {
|
|
36
|
+
if (child.props.slug) {
|
|
31
37
|
rowHasAILabel = true;
|
|
32
38
|
}
|
|
39
|
+
} else if (utils.isComponentElement(child, TableDecoratorRow["default"]) && utils.isComponentElement(child.props.decorator, index.AILabel)) {
|
|
40
|
+
rowHasAILabel = true;
|
|
33
41
|
}
|
|
34
42
|
});
|
|
35
43
|
}
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
11
11
|
|
|
12
|
+
var index = require('../../AILabel/index.js');
|
|
12
13
|
var cells = require('./cells.js');
|
|
13
14
|
|
|
14
15
|
/**
|
|
@@ -63,7 +64,7 @@ const normalize = (rows, headers, prevState = {}) => {
|
|
|
63
64
|
isEditing: false,
|
|
64
65
|
isValid: true,
|
|
65
66
|
errors: null,
|
|
66
|
-
hasAILabelHeader: !!(slug || decorator?.type
|
|
67
|
+
hasAILabelHeader: !!(slug || decorator?.type === index.AILabel),
|
|
67
68
|
info: {
|
|
68
69
|
header: key
|
|
69
70
|
}
|
|
@@ -19,6 +19,8 @@ var FormContext = require('../FluidForm/FormContext.js');
|
|
|
19
19
|
var useId = require('../../internal/useId.js');
|
|
20
20
|
require('../Text/index.js');
|
|
21
21
|
var deprecate = require('../../prop-types/deprecate.js');
|
|
22
|
+
var index = require('../AILabel/index.js');
|
|
23
|
+
var utils = require('../../internal/utils.js');
|
|
22
24
|
var Text = require('../Text/Text.js');
|
|
23
25
|
|
|
24
26
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
@@ -109,12 +111,11 @@ const DatePickerInput = /*#__PURE__*/React__default["default"].forwardRef(functi
|
|
|
109
111
|
const input = /*#__PURE__*/React__default["default"].createElement("input", inputProps);
|
|
110
112
|
|
|
111
113
|
// AILabel always size `mini`
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
}
|
|
114
|
+
const candidate = slug ?? decorator;
|
|
115
|
+
const candidateIsAILabel = utils.isComponentElement(candidate, index.AILabel);
|
|
116
|
+
const normalizedDecorator = candidateIsAILabel ? /*#__PURE__*/React.cloneElement(candidate, {
|
|
117
|
+
size: 'mini'
|
|
118
|
+
}) : null;
|
|
118
119
|
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
119
120
|
className: containerClasses
|
|
120
121
|
}, labelText && /*#__PURE__*/React__default["default"].createElement(Text.Text, {
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* This source code is licensed under the Apache-2.0 license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
|
-
import React, { type HTMLAttributes } from 'react';
|
|
7
|
+
import React, { type HTMLAttributes, type RefObject } from 'react';
|
|
8
8
|
import { InlineLoadingStatus } from '../InlineLoading/InlineLoading';
|
|
9
9
|
/**
|
|
10
10
|
* ----------
|
|
@@ -20,6 +20,10 @@ interface DialogProps extends HTMLAttributes<HTMLDialogElement> {
|
|
|
20
20
|
* Specify an optional className to be applied to the modal root node
|
|
21
21
|
*/
|
|
22
22
|
className?: string;
|
|
23
|
+
/**
|
|
24
|
+
* Provide a ref to return focus to once the dialog is closed.
|
|
25
|
+
*/
|
|
26
|
+
focusAfterCloseRef?: RefObject<HTMLElement | null>;
|
|
23
27
|
/**
|
|
24
28
|
* Specifies whether the dialog is modal or non-modal. This cannot be changed
|
|
25
29
|
* while open=true
|
|
@@ -45,6 +45,7 @@ const DialogContext = /*#__PURE__*/React.createContext({});
|
|
|
45
45
|
const unstable__Dialog = /*#__PURE__*/React__default["default"].forwardRef(({
|
|
46
46
|
children,
|
|
47
47
|
className,
|
|
48
|
+
focusAfterCloseRef,
|
|
48
49
|
modal,
|
|
49
50
|
onCancel = noopFn.noopFn,
|
|
50
51
|
onClick = noopFn.noopFn,
|
|
@@ -103,6 +104,19 @@ const unstable__Dialog = /*#__PURE__*/React__default["default"].forwardRef(({
|
|
|
103
104
|
}
|
|
104
105
|
}
|
|
105
106
|
}, [modal, open]);
|
|
107
|
+
React.useEffect(() => {
|
|
108
|
+
if (!open && focusAfterCloseRef) {
|
|
109
|
+
// use setTimeout to ensure focus is set after all other default focus behavior
|
|
110
|
+
const moveFocus = setTimeout(() => {
|
|
111
|
+
focusAfterCloseRef.current?.focus();
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
//component did unmount equivalent
|
|
115
|
+
return () => {
|
|
116
|
+
clearTimeout(moveFocus);
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
}, [open, focusAfterCloseRef]);
|
|
106
120
|
const containerClasses = cx__default["default"](`${prefix}--dialog-container`);
|
|
107
121
|
const contextValue = {
|
|
108
122
|
dialogId,
|
|
@@ -148,6 +162,12 @@ unstable__Dialog.propTypes = {
|
|
|
148
162
|
* Specify an optional className to be applied to the modal root node
|
|
149
163
|
*/
|
|
150
164
|
className: PropTypes__default["default"].string,
|
|
165
|
+
/**
|
|
166
|
+
* Provide a ref to return focus to once the dialog is closed.
|
|
167
|
+
*/
|
|
168
|
+
focusAfterCloseRef: PropTypes__default["default"].oneOfType([PropTypes__default["default"].func, PropTypes__default["default"].shape({
|
|
169
|
+
current: PropTypes__default["default"].any
|
|
170
|
+
})]),
|
|
151
171
|
/**
|
|
152
172
|
* Modal specifies whether the Dialog is modal or non-modal. This cannot be
|
|
153
173
|
* changed while open=true
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* This source code is licensed under the Apache-2.0 license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
|
-
import React, {
|
|
7
|
+
import React, { type HTMLAttributes, type ReactNode, type Ref } from 'react';
|
|
8
8
|
import { UseSelectProps } from 'downshift';
|
|
9
9
|
import { type ListBoxMenuIconTranslationKey, type ListBoxSize, type ListBoxType } from '../ListBox';
|
|
10
10
|
import { TranslateWithId } from '../../types/common';
|
|
@@ -15,7 +15,7 @@ var Downshift = require('downshift');
|
|
|
15
15
|
var cx = require('classnames');
|
|
16
16
|
var PropTypes = require('prop-types');
|
|
17
17
|
var iconsReact = require('@carbon/icons-react');
|
|
18
|
-
var index$
|
|
18
|
+
var index$2 = require('../ListBox/index.js');
|
|
19
19
|
var mergeRefs = require('../../tools/mergeRefs.js');
|
|
20
20
|
var deprecate = require('../../prop-types/deprecate.js');
|
|
21
21
|
var usePrefix = require('../../internal/usePrefix.js');
|
|
@@ -24,6 +24,8 @@ var FormContext = require('../FluidForm/FormContext.js');
|
|
|
24
24
|
var useId = require('../../internal/useId.js');
|
|
25
25
|
var react = require('@floating-ui/react');
|
|
26
26
|
var index = require('../FeatureFlags/index.js');
|
|
27
|
+
var index$1 = require('../AILabel/index.js');
|
|
28
|
+
var utils = require('../../internal/utils.js');
|
|
27
29
|
var ListBoxPropTypes = require('../ListBox/ListBoxPropTypes.js');
|
|
28
30
|
|
|
29
31
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
@@ -318,15 +320,11 @@ const Dropdown = /*#__PURE__*/React__default["default"].forwardRef(({
|
|
|
318
320
|
}), [autoAlign, getMenuProps, refs.setFloating, enableFloatingStyles]);
|
|
319
321
|
|
|
320
322
|
// AILabel is always size `mini`
|
|
321
|
-
const
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
});
|
|
327
|
-
}
|
|
328
|
-
return /*#__PURE__*/React__default["default"].isValidElement(element) ? element : null;
|
|
329
|
-
}, [slug, decorator]);
|
|
323
|
+
const candidate = slug ?? decorator;
|
|
324
|
+
const candidateIsAILabel = utils.isComponentElement(candidate, index$1.AILabel);
|
|
325
|
+
const normalizedDecorator = candidateIsAILabel ? /*#__PURE__*/React.cloneElement(candidate, {
|
|
326
|
+
size: 'mini'
|
|
327
|
+
}) : null;
|
|
330
328
|
const allLabelProps = getLabelProps();
|
|
331
329
|
const labelProps = /*#__PURE__*/React.isValidElement(titleText) ? {
|
|
332
330
|
id: allLabelProps.id
|
|
@@ -335,7 +333,7 @@ const Dropdown = /*#__PURE__*/React__default["default"].forwardRef(({
|
|
|
335
333
|
className: wrapperClasses
|
|
336
334
|
}, other), titleText && /*#__PURE__*/React__default["default"].createElement("label", _rollupPluginBabelHelpers["extends"]({
|
|
337
335
|
className: titleClasses
|
|
338
|
-
}, labelProps), titleText), /*#__PURE__*/React__default["default"].createElement(index$
|
|
336
|
+
}, labelProps), titleText), /*#__PURE__*/React__default["default"].createElement(index$2["default"], {
|
|
339
337
|
onFocus: handleFocus,
|
|
340
338
|
onBlur: handleFocus,
|
|
341
339
|
size: size,
|
|
@@ -366,19 +364,19 @@ const Dropdown = /*#__PURE__*/React__default["default"].forwardRef(({
|
|
|
366
364
|
ref: mergedRef
|
|
367
365
|
}), /*#__PURE__*/React__default["default"].createElement("span", {
|
|
368
366
|
className: `${prefix}--list-box__label`
|
|
369
|
-
}, selectedItem ? renderSelectedItem ? renderSelectedItem(selectedItem) : itemToString(selectedItem) : label), /*#__PURE__*/React__default["default"].createElement(index$
|
|
367
|
+
}, selectedItem ? renderSelectedItem ? renderSelectedItem(selectedItem) : itemToString(selectedItem) : label), /*#__PURE__*/React__default["default"].createElement(index$2["default"].MenuIcon, {
|
|
370
368
|
isOpen: isOpen,
|
|
371
369
|
translateWithId: translateWithId
|
|
372
370
|
})), slug ? normalizedDecorator : decorator ? /*#__PURE__*/React__default["default"].createElement("div", {
|
|
373
371
|
className: `${prefix}--list-box__inner-wrapper--decorator`
|
|
374
|
-
}, normalizedDecorator) : '', /*#__PURE__*/React__default["default"].createElement(index$
|
|
372
|
+
}, normalizedDecorator) : '', /*#__PURE__*/React__default["default"].createElement(index$2["default"].Menu, menuProps, isOpen && items.map((item, index) => {
|
|
375
373
|
const isObject = item !== null && typeof item === 'object';
|
|
376
374
|
const itemProps = getItemProps({
|
|
377
375
|
item,
|
|
378
376
|
index
|
|
379
377
|
});
|
|
380
378
|
const title = isObject && 'text' in item && itemToElement ? item.text : itemToString(item);
|
|
381
|
-
return /*#__PURE__*/React__default["default"].createElement(index$
|
|
379
|
+
return /*#__PURE__*/React__default["default"].createElement(index$2["default"].MenuItem, _rollupPluginBabelHelpers["extends"]({
|
|
382
380
|
key: itemProps.id,
|
|
383
381
|
isActive: selectedItem === item,
|
|
384
382
|
isHighlighted: highlightedIndex === index,
|
|
@@ -15,7 +15,7 @@ var PropTypes = require('prop-types');
|
|
|
15
15
|
var React = require('react');
|
|
16
16
|
var keys = require('../../internal/keyboard/keys.js');
|
|
17
17
|
var match = require('../../internal/keyboard/match.js');
|
|
18
|
-
var
|
|
18
|
+
var useId = require('../../internal/useId.js');
|
|
19
19
|
var usePrefix = require('../../internal/usePrefix.js');
|
|
20
20
|
var deprecate = require('../../prop-types/deprecate.js');
|
|
21
21
|
var noopFn = require('../../internal/noopFn.js');
|
|
@@ -49,7 +49,7 @@ function FileUploaderButton({
|
|
|
49
49
|
const [prevOwnerLabelText, setPrevOwnerLabelText] = React.useState(ownerLabelText);
|
|
50
50
|
const {
|
|
51
51
|
current: inputId
|
|
52
|
-
} = React.useRef(id ||
|
|
52
|
+
} = React.useRef(id || useId.useId());
|
|
53
53
|
const inputNode = React.useRef(null);
|
|
54
54
|
const classes = cx__default["default"](`${prefix}--btn`, className, {
|
|
55
55
|
[`${prefix}--btn--${buttonKind}`]: buttonKind,
|
|
@@ -15,7 +15,7 @@ var PropTypes = require('prop-types');
|
|
|
15
15
|
var cx = require('classnames');
|
|
16
16
|
var keys = require('../../internal/keyboard/keys.js');
|
|
17
17
|
var match = require('../../internal/keyboard/match.js');
|
|
18
|
-
var
|
|
18
|
+
var useId = require('../../internal/useId.js');
|
|
19
19
|
var usePrefix = require('../../internal/usePrefix.js');
|
|
20
20
|
var events = require('../../tools/events.js');
|
|
21
21
|
var deprecate = require('../../prop-types/deprecate.js');
|
|
@@ -46,7 +46,7 @@ function FileUploaderDropContainer({
|
|
|
46
46
|
const inputRef = React.useRef(null);
|
|
47
47
|
const {
|
|
48
48
|
current: uid
|
|
49
|
-
} = React.useRef(id ||
|
|
49
|
+
} = React.useRef(id || useId.useId());
|
|
50
50
|
const [isActive, setActive] = React.useState(false);
|
|
51
51
|
const dropareaClasses = cx__default["default"](`${prefix}--file__drop-container`, `${prefix}--file-browse-btn`, {
|
|
52
52
|
[`${prefix}--file__drop-container--drag-over`]: isActive,
|
|
@@ -16,7 +16,7 @@ var React = require('react');
|
|
|
16
16
|
var Filename = require('./Filename.js');
|
|
17
17
|
var keys = require('../../internal/keyboard/keys.js');
|
|
18
18
|
var match = require('../../internal/keyboard/match.js');
|
|
19
|
-
var
|
|
19
|
+
var useId = require('../../internal/useId.js');
|
|
20
20
|
var usePrefix = require('../../internal/usePrefix.js');
|
|
21
21
|
var noopFn = require('../../internal/noopFn.js');
|
|
22
22
|
require('../Text/index.js');
|
|
@@ -48,7 +48,7 @@ function FileUploaderItem({
|
|
|
48
48
|
const prefix = usePrefix.usePrefix();
|
|
49
49
|
const {
|
|
50
50
|
current: id
|
|
51
|
-
} = React.useRef(uuid ||
|
|
51
|
+
} = React.useRef(uuid || useId.useId());
|
|
52
52
|
const classes = cx__default["default"](`${prefix}--file__selected-file`, className, {
|
|
53
53
|
[`${prefix}--file__selected-file--invalid`]: invalid,
|
|
54
54
|
[`${prefix}--file__selected-file--md`]: size === 'md',
|
|
@@ -35,7 +35,5 @@ export interface LayerBaseProps {
|
|
|
35
35
|
withBackground?: boolean;
|
|
36
36
|
}
|
|
37
37
|
export type LayerProps<T extends React.ElementType> = PolymorphicComponentPropWithRef<T, LayerBaseProps>;
|
|
38
|
-
declare const Layer: React.ForwardRefExoticComponent<
|
|
39
|
-
as?: React.ElementType;
|
|
40
|
-
} & React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<any>>;
|
|
38
|
+
declare const Layer: React.ForwardRefExoticComponent<Omit<LayerProps<React.ElementType<any, keyof React.JSX.IntrinsicElements>>, "ref"> & React.RefAttributes<unknown>>;
|
|
41
39
|
export { Layer };
|
|
@@ -35,14 +35,15 @@ function useLayer() {
|
|
|
35
35
|
level
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
|
-
const Layer = /*#__PURE__*/React__default["default"].forwardRef(({
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
38
|
+
const Layer = /*#__PURE__*/React__default["default"].forwardRef((props, ref) => {
|
|
39
|
+
const {
|
|
40
|
+
as,
|
|
41
|
+
className: customClassName,
|
|
42
|
+
children,
|
|
43
|
+
level: overrideLevel,
|
|
44
|
+
withBackground = false,
|
|
45
|
+
...rest
|
|
46
|
+
} = props;
|
|
46
47
|
const contextLevel = React__default["default"].useContext(LayerContext.LayerContext);
|
|
47
48
|
const level = overrideLevel ?? contextLevel;
|
|
48
49
|
const prefix = usePrefix.usePrefix();
|
|
@@ -44,12 +44,6 @@ const Menu = /*#__PURE__*/React.forwardRef(function Menu({
|
|
|
44
44
|
open,
|
|
45
45
|
size = 'sm',
|
|
46
46
|
legacyAutoalign = 'true',
|
|
47
|
-
// TODO: `ssr-friendly` doesn't support ESLint v9.
|
|
48
|
-
// https://github.com/kopiro/eslint-plugin-ssr-friendly/issues/30
|
|
49
|
-
// https://github.com/carbon-design-system/carbon/issues/18991
|
|
50
|
-
/*
|
|
51
|
-
// eslint-disable-next-line ssr-friendly/no-dom-globals-in-react-fc
|
|
52
|
-
*/
|
|
53
47
|
target = environment.canUseDOM && document.body,
|
|
54
48
|
x = 0,
|
|
55
49
|
y = 0,
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* This source code is licensed under the Apache-2.0 license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
|
-
import React, { type HTMLAttributes, type ReactNode, type
|
|
7
|
+
import React, { type HTMLAttributes, type ReactNode, type RefObject } from 'react';
|
|
8
8
|
import { InlineLoadingStatus } from '../InlineLoading/InlineLoading';
|
|
9
9
|
export declare const ModalSizes: readonly ["xs", "sm", "md", "lg"];
|
|
10
10
|
export type ModalSize = (typeof ModalSizes)[number];
|
|
@@ -57,7 +57,7 @@ export interface ModalProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
57
57
|
/**
|
|
58
58
|
* Provide a ref to return focus to once the modal is closed.
|
|
59
59
|
*/
|
|
60
|
-
launcherButtonRef?:
|
|
60
|
+
launcherButtonRef?: RefObject<HTMLButtonElement | null>;
|
|
61
61
|
/**
|
|
62
62
|
* Specify the description for the loading text
|
|
63
63
|
*/
|
|
@@ -19,7 +19,7 @@ var Button = require('../Button/Button.js');
|
|
|
19
19
|
require('../Button/Button.Skeleton.js');
|
|
20
20
|
var ButtonSet = require('../ButtonSet/ButtonSet.js');
|
|
21
21
|
var InlineLoading = require('../InlineLoading/InlineLoading.js');
|
|
22
|
-
var index$
|
|
22
|
+
var index$4 = require('../Layer/index.js');
|
|
23
23
|
var requiredIfGivenPropIsTruthy = require('../../prop-types/requiredIfGivenPropIsTruthy.js');
|
|
24
24
|
var wrapFocus = require('../../internal/wrapFocus.js');
|
|
25
25
|
var useIsomorphicEffect = require('../../internal/useIsomorphicEffect.js');
|
|
@@ -28,13 +28,15 @@ var usePrefix = require('../../internal/usePrefix.js');
|
|
|
28
28
|
var usePreviousValue = require('../../internal/usePreviousValue.js');
|
|
29
29
|
var keys = require('../../internal/keyboard/keys.js');
|
|
30
30
|
var match = require('../../internal/keyboard/match.js');
|
|
31
|
-
var index$
|
|
31
|
+
var index$3 = require('../IconButton/index.js');
|
|
32
32
|
var noopFn = require('../../internal/noopFn.js');
|
|
33
33
|
require('../Text/index.js');
|
|
34
34
|
var index = require('../FeatureFlags/index.js');
|
|
35
35
|
var events = require('../../tools/events.js');
|
|
36
36
|
var deprecate = require('../../prop-types/deprecate.js');
|
|
37
|
-
var index$
|
|
37
|
+
var index$2 = require('../Dialog/index.js');
|
|
38
|
+
var index$1 = require('../AILabel/index.js');
|
|
39
|
+
var utils = require('../../internal/utils.js');
|
|
38
40
|
var warning = require('../../internal/warning.js');
|
|
39
41
|
var debounce = require('../../node_modules/es-toolkit/dist/compat/function/debounce.mjs.js');
|
|
40
42
|
var Text = require('../Text/Text.js');
|
|
@@ -46,6 +48,7 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
|
46
48
|
var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
|
|
47
49
|
|
|
48
50
|
const ModalSizes = ['xs', 'sm', 'md', 'lg'];
|
|
51
|
+
const invalidOutsideClickMessage = '`Modal`: `preventCloseOnClickOutside` should not be `false` when `passiveModal` is `false`. Non-passive `Modal`s should not be dismissible by clicking outside.';
|
|
49
52
|
const Modal = /*#__PURE__*/React__default["default"].forwardRef(function Modal({
|
|
50
53
|
'aria-label': ariaLabelProp,
|
|
51
54
|
children,
|
|
@@ -71,7 +74,7 @@ const Modal = /*#__PURE__*/React__default["default"].forwardRef(function Modal({
|
|
|
71
74
|
size,
|
|
72
75
|
hasScrollingContent = false,
|
|
73
76
|
closeButtonLabel = 'Close',
|
|
74
|
-
preventCloseOnClickOutside =
|
|
77
|
+
preventCloseOnClickOutside = !passiveModal,
|
|
75
78
|
isFullWidth,
|
|
76
79
|
launcherButtonRef,
|
|
77
80
|
loadingStatus = 'inactive',
|
|
@@ -102,6 +105,9 @@ const Modal = /*#__PURE__*/React__default["default"].forwardRef(function Modal({
|
|
|
102
105
|
const focusTrapWithoutSentinels = index.useFeatureFlag('enable-experimental-focus-wrap-without-sentinels');
|
|
103
106
|
const enableDialogElement = index.useFeatureFlag('enable-dialog-element');
|
|
104
107
|
process.env.NODE_ENV !== "production" ? warning.warning(!(focusTrapWithoutSentinels && enableDialogElement), '`<Modal>` detected both `focusTrapWithoutSentinels` and ' + '`enableDialogElement` feature flags are enabled. The native dialog ' + 'element handles focus, so `enableDialogElement` must be off for ' + '`focusTrapWithoutSentinels` to have any effect.') : void 0;
|
|
108
|
+
if (!passiveModal && preventCloseOnClickOutside === false) {
|
|
109
|
+
console.error(invalidOutsideClickMessage);
|
|
110
|
+
}
|
|
105
111
|
function isCloseButton(element) {
|
|
106
112
|
return !onSecondarySubmit && element === secondaryButton.current || element.classList.contains(modalCloseButtonClass);
|
|
107
113
|
}
|
|
@@ -139,7 +145,7 @@ const Modal = /*#__PURE__*/React__default["default"].forwardRef(function Modal({
|
|
|
139
145
|
target: oldActiveNode,
|
|
140
146
|
relatedTarget: currentActiveNode
|
|
141
147
|
}) {
|
|
142
|
-
if (open && oldActiveNode instanceof HTMLElement && currentActiveNode instanceof HTMLElement) {
|
|
148
|
+
if (!enableDialogElement && open && oldActiveNode instanceof HTMLElement && currentActiveNode instanceof HTMLElement) {
|
|
143
149
|
const {
|
|
144
150
|
current: bodyNode
|
|
145
151
|
} = innerModal;
|
|
@@ -158,6 +164,23 @@ const Modal = /*#__PURE__*/React__default["default"].forwardRef(function Modal({
|
|
|
158
164
|
selectorsFloatingMenus
|
|
159
165
|
});
|
|
160
166
|
}
|
|
167
|
+
|
|
168
|
+
// Adjust scroll if needed so that element with focus is not obscured by gradient
|
|
169
|
+
const modalContent = document.querySelector(`.${prefix}--modal-content`);
|
|
170
|
+
if (!modalContent || !modalContent.classList.contains(`${prefix}--modal-scroll-content`) || !currentActiveNode || !modalContent.contains(currentActiveNode)) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
const lastContent = modalContent.children[modalContent.children.length - 1];
|
|
174
|
+
const gradientSpacing = modalContent.scrollHeight - lastContent.offsetTop - lastContent.clientHeight;
|
|
175
|
+
for (let elem of modalContent.children) {
|
|
176
|
+
if (elem.contains(currentActiveNode)) {
|
|
177
|
+
const spaceBelow = modalContent.clientHeight - elem.offsetTop + modalContent.scrollTop - elem.clientHeight;
|
|
178
|
+
if (spaceBelow < gradientSpacing) {
|
|
179
|
+
modalContent.scrollTop = modalContent.scrollTop + (gradientSpacing - spaceBelow);
|
|
180
|
+
}
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
161
184
|
}
|
|
162
185
|
const onSecondaryButtonClick = onSecondarySubmit ? onSecondarySubmit : onRequestClose;
|
|
163
186
|
const modalClasses = cx__default["default"](`${prefix}--modal`, {
|
|
@@ -258,15 +281,14 @@ const Modal = /*#__PURE__*/React__default["default"].forwardRef(function Modal({
|
|
|
258
281
|
}, []);
|
|
259
282
|
|
|
260
283
|
// AILabel always size `sm`
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
}
|
|
284
|
+
const candidate = slug ?? decorator;
|
|
285
|
+
const candidateIsAILabel = utils.isComponentElement(candidate, index$1.AILabel);
|
|
286
|
+
const normalizedDecorator = candidateIsAILabel ? /*#__PURE__*/React.cloneElement(candidate, {
|
|
287
|
+
size: 'sm'
|
|
288
|
+
}) : null;
|
|
267
289
|
const modalButton = /*#__PURE__*/React__default["default"].createElement("div", {
|
|
268
290
|
className: `${prefix}--modal-close-button`
|
|
269
|
-
}, /*#__PURE__*/React__default["default"].createElement(index$
|
|
291
|
+
}, /*#__PURE__*/React__default["default"].createElement(index$3.IconButton, {
|
|
270
292
|
className: modalCloseButtonClass,
|
|
271
293
|
label: closeButtonLabel,
|
|
272
294
|
onClick: onRequestClose,
|
|
@@ -283,8 +305,9 @@ const Modal = /*#__PURE__*/React__default["default"].forwardRef(function Modal({
|
|
|
283
305
|
// alertdialog is the only permitted aria role for a native dialog element
|
|
284
306
|
// https://www.w3.org/TR/html-aria/#docconformance:~:text=Role%3A-,alertdialog,-.%20(dialog%20is
|
|
285
307
|
const isAlertDialog = alert && !passiveModal;
|
|
286
|
-
const modalBody = enableDialogElement ? /*#__PURE__*/React__default["default"].createElement(index$
|
|
308
|
+
const modalBody = enableDialogElement ? /*#__PURE__*/React__default["default"].createElement(index$2.unstable__Dialog, {
|
|
287
309
|
open: open,
|
|
310
|
+
focusAfterCloseRef: launcherButtonRef,
|
|
288
311
|
modal: true,
|
|
289
312
|
ref: innerModal,
|
|
290
313
|
role: isAlertDialog ? 'alertdialog' : '',
|
|
@@ -305,7 +328,7 @@ const Modal = /*#__PURE__*/React__default["default"].forwardRef(function Modal({
|
|
|
305
328
|
className: `${prefix}--modal--inner__decorator`
|
|
306
329
|
}, normalizedDecorator) : '', /*#__PURE__*/React__default["default"].createElement("div", {
|
|
307
330
|
className: `${prefix}--modal-close-button`
|
|
308
|
-
}, /*#__PURE__*/React__default["default"].createElement(index$
|
|
331
|
+
}, /*#__PURE__*/React__default["default"].createElement(index$3.IconButton, {
|
|
309
332
|
className: modalCloseButtonClass,
|
|
310
333
|
label: closeButtonLabel,
|
|
311
334
|
onClick: onRequestClose,
|
|
@@ -317,7 +340,7 @@ const Modal = /*#__PURE__*/React__default["default"].forwardRef(function Modal({
|
|
|
317
340
|
"aria-hidden": "true",
|
|
318
341
|
tabIndex: "-1",
|
|
319
342
|
className: `${modalCloseButtonClass}__icon`
|
|
320
|
-
})))), /*#__PURE__*/React__default["default"].createElement(index$
|
|
343
|
+
})))), /*#__PURE__*/React__default["default"].createElement(index$4.Layer, _rollupPluginBabelHelpers["extends"]({
|
|
321
344
|
ref: contentRef,
|
|
322
345
|
id: modalBodyId,
|
|
323
346
|
className: contentClasses
|
|
@@ -373,7 +396,7 @@ const Modal = /*#__PURE__*/React__default["default"].forwardRef(function Modal({
|
|
|
373
396
|
className: `${prefix}--modal-header__heading`
|
|
374
397
|
}, modalHeading), slug ? normalizedDecorator : decorator ? /*#__PURE__*/React__default["default"].createElement("div", {
|
|
375
398
|
className: `${prefix}--modal--inner__decorator`
|
|
376
|
-
}, normalizedDecorator) : '', !passiveModal && modalButton), /*#__PURE__*/React__default["default"].createElement(index$
|
|
399
|
+
}, normalizedDecorator) : '', !passiveModal && modalButton), /*#__PURE__*/React__default["default"].createElement(index$4.Layer, _rollupPluginBabelHelpers["extends"]({
|
|
377
400
|
ref: contentRef,
|
|
378
401
|
id: modalBodyId,
|
|
379
402
|
className: contentClasses
|
|
@@ -410,11 +433,11 @@ const Modal = /*#__PURE__*/React__default["default"].forwardRef(function Modal({
|
|
|
410
433
|
role: "link",
|
|
411
434
|
className: `${prefix}--visually-hidden`
|
|
412
435
|
}, "Focus sentinel"));
|
|
413
|
-
return /*#__PURE__*/React__default["default"].createElement(index$
|
|
436
|
+
return /*#__PURE__*/React__default["default"].createElement(index$4.Layer, _rollupPluginBabelHelpers["extends"]({}, rest, {
|
|
414
437
|
level: 0,
|
|
415
438
|
onKeyDown: handleKeyDown,
|
|
416
439
|
onClick: events.composeEventHandlers([rest?.onClick, handleOnClick]),
|
|
417
|
-
onBlur:
|
|
440
|
+
onBlur: handleBlur,
|
|
418
441
|
className: modalClasses,
|
|
419
442
|
role: "presentation",
|
|
420
443
|
ref: ref
|
|
@@ -531,7 +554,12 @@ Modal.propTypes = {
|
|
|
531
554
|
/**
|
|
532
555
|
* Prevent closing on click outside of modal
|
|
533
556
|
*/
|
|
534
|
-
preventCloseOnClickOutside:
|
|
557
|
+
preventCloseOnClickOutside: (props, propName) => {
|
|
558
|
+
if (!props.passiveModal && props[propName] === false) {
|
|
559
|
+
return new Error(invalidOutsideClickMessage);
|
|
560
|
+
}
|
|
561
|
+
return null;
|
|
562
|
+
},
|
|
535
563
|
/**
|
|
536
564
|
* Specify whether the Button should be disabled, or not
|
|
537
565
|
*/
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
import { type UseComboboxProps, type UseMultipleSelectionProps } from 'downshift';
|
|
8
|
-
import React, {
|
|
8
|
+
import React, { type FunctionComponent, type ReactElement, type ReactNode } from 'react';
|
|
9
9
|
import { type MultiSelectSortingProps } from './MultiSelectPropTypes';
|
|
10
10
|
import { type ListBoxSize, type ListBoxType } from '../ListBox';
|
|
11
11
|
import { TranslateWithId } from '../../types/common';
|