@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
|
@@ -144,7 +144,6 @@ const Search = /*#__PURE__*/React__default["default"].forwardRef(function Search
|
|
|
144
144
|
"aria-label": placeholder,
|
|
145
145
|
className: searchClasses
|
|
146
146
|
}, /*#__PURE__*/React__default["default"].createElement("div", {
|
|
147
|
-
"aria-label": onExpand ? 'button' : undefined,
|
|
148
147
|
"aria-labelledby": onExpand ? searchId : undefined,
|
|
149
148
|
role: onExpand ? 'button' : undefined,
|
|
150
149
|
className: `${prefix}--search-magnifier`,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright IBM Corp. 2016,
|
|
2
|
+
* Copyright IBM Corp. 2016, 2025
|
|
3
3
|
*
|
|
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, { ChangeEventHandler, ComponentPropsWithRef, ReactNode } from 'react';
|
|
7
|
+
import React, { type ChangeEventHandler, type ComponentPropsWithRef, type ReactNode } from 'react';
|
|
8
8
|
type ExcludedAttributes = 'size';
|
|
9
9
|
export interface SelectProps extends Omit<ComponentPropsWithRef<'select'>, ExcludedAttributes> {
|
|
10
10
|
/**
|
|
@@ -21,6 +21,8 @@ var FormContext = require('../FluidForm/FormContext.js');
|
|
|
21
21
|
var useId = require('../../internal/useId.js');
|
|
22
22
|
var events = require('../../tools/events.js');
|
|
23
23
|
require('../Text/index.js');
|
|
24
|
+
var index = require('../AILabel/index.js');
|
|
25
|
+
var utils = require('../../internal/utils.js');
|
|
24
26
|
var Text = require('../Text/Text.js');
|
|
25
27
|
|
|
26
28
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
@@ -144,12 +146,11 @@ const Select = /*#__PURE__*/React__default["default"].forwardRef(function Select
|
|
|
144
146
|
};
|
|
145
147
|
|
|
146
148
|
// AILabel always size `mini`
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
}
|
|
149
|
+
const candidate = slug ?? decorator;
|
|
150
|
+
const candidateIsAILabel = utils.isComponentElement(candidate, index.AILabel);
|
|
151
|
+
const normalizedDecorator = candidateIsAILabel ? /*#__PURE__*/React.cloneElement(candidate, {
|
|
152
|
+
size: 'mini'
|
|
153
|
+
}) : null;
|
|
153
154
|
const input = (() => {
|
|
154
155
|
return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("select", _rollupPluginBabelHelpers["extends"]({}, other, ariaProps, {
|
|
155
156
|
id: id,
|
|
@@ -768,6 +768,9 @@ class Slider extends React.PureComponent {
|
|
|
768
768
|
valueUpper,
|
|
769
769
|
leftUpper
|
|
770
770
|
});
|
|
771
|
+
if (this.filledTrackRef.current) {
|
|
772
|
+
this.filledTrackRef.current.style.transform = this.state.isRtl ? `translate(${100 - this.state.leftUpper}%, -50%) scaleX(${(this.state.leftUpper - this.state.left) / 100})` : `translate(${this.state.left}%, -50%) scaleX(${(this.state.leftUpper - this.state.left) / 100})`;
|
|
773
|
+
}
|
|
771
774
|
} else {
|
|
772
775
|
const {
|
|
773
776
|
value,
|
|
@@ -781,6 +784,9 @@ class Slider extends React.PureComponent {
|
|
|
781
784
|
value,
|
|
782
785
|
left
|
|
783
786
|
});
|
|
787
|
+
if (this.filledTrackRef.current) {
|
|
788
|
+
this.filledTrackRef.current.style.transform = this.state.isRtl ? `translate(100%, -50%) scaleX(-${this.state.left / 100})` : `translate(0%, -50%) scaleX(${this.state.left / 100})`;
|
|
789
|
+
}
|
|
784
790
|
}
|
|
785
791
|
}
|
|
786
792
|
}
|
|
@@ -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, { ReactNode } from 'react';
|
|
7
|
+
import React, { type ReactNode } from 'react';
|
|
8
8
|
import { PolymorphicProps } from '../../types/common';
|
|
9
9
|
import { SIZES, TYPES } from './Tag';
|
|
10
10
|
export interface DismissibleTagBaseProps {
|
|
@@ -23,6 +23,8 @@ var Tooltip = require('../Tooltip/Tooltip.js');
|
|
|
23
23
|
require('../Text/index.js');
|
|
24
24
|
var isEllipsisActive = require('./isEllipsisActive.js');
|
|
25
25
|
var mergeRefs = require('../../tools/mergeRefs.js');
|
|
26
|
+
var index = require('../AILabel/index.js');
|
|
27
|
+
var utils = require('../../internal/utils.js');
|
|
26
28
|
var Text = require('../Text/Text.js');
|
|
27
29
|
|
|
28
30
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
@@ -64,13 +66,12 @@ const DismissibleTag = /*#__PURE__*/React.forwardRef(({
|
|
|
64
66
|
onClose(event);
|
|
65
67
|
}
|
|
66
68
|
};
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}
|
|
69
|
+
const candidate = slug ?? decorator;
|
|
70
|
+
const candidateIsAILabel = utils.isComponentElement(candidate, index.AILabel);
|
|
71
|
+
const normalizedDecorator = candidateIsAILabel ? /*#__PURE__*/React.cloneElement(candidate, {
|
|
72
|
+
size: 'sm',
|
|
73
|
+
kind: 'inline'
|
|
74
|
+
}) : null;
|
|
74
75
|
const tooltipClasses = cx__default["default"](`${prefix}--icon-tooltip`, `${prefix}--tag-label-tooltip`);
|
|
75
76
|
|
|
76
77
|
// Removing onClick from the spread operator
|
|
@@ -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, { ReactNode } from 'react';
|
|
7
|
+
import React, { type ReactNode } from 'react';
|
|
8
8
|
import { PolymorphicComponentPropWithRef } from '../../internal/PolymorphicProps';
|
|
9
9
|
import { SelectableTagBaseProps } from './SelectableTag';
|
|
10
10
|
import { OperationalTagBaseProps } from './OperationalTag';
|
|
@@ -22,6 +22,8 @@ var DefinitionTooltip = require('../Tooltip/DefinitionTooltip.js');
|
|
|
22
22
|
require('../Tooltip/Tooltip.js');
|
|
23
23
|
var isEllipsisActive = require('./isEllipsisActive.js');
|
|
24
24
|
var useMergedRefs = require('../../internal/useMergedRefs.js');
|
|
25
|
+
var index = require('../AILabel/index.js');
|
|
26
|
+
var utils = require('../../internal/utils.js');
|
|
25
27
|
var Text = require('../Text/Text.js');
|
|
26
28
|
|
|
27
29
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
@@ -104,13 +106,12 @@ const TagBase = /*#__PURE__*/React__default["default"].forwardRef(({
|
|
|
104
106
|
};
|
|
105
107
|
|
|
106
108
|
// AILabel is always size `sm` and `inline`
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
}
|
|
109
|
+
const candidate = slug ?? decorator;
|
|
110
|
+
const candidateIsAILabel = utils.isComponentElement(candidate, index.AILabel);
|
|
111
|
+
const normalizedDecorator = candidateIsAILabel && !isInteractiveTag ? /*#__PURE__*/React.cloneElement(candidate, {
|
|
112
|
+
size: 'sm',
|
|
113
|
+
kind: 'inline'
|
|
114
|
+
}) : null;
|
|
114
115
|
if (filter) {
|
|
115
116
|
const ComponentTag = BaseComponent ?? 'div';
|
|
116
117
|
return /*#__PURE__*/React__default["default"].createElement(ComponentTag, _rollupPluginBabelHelpers["extends"]({
|
|
@@ -24,6 +24,8 @@ var useMergedRefs = require('../../internal/useMergedRefs.js');
|
|
|
24
24
|
var useId = require('../../internal/useId.js');
|
|
25
25
|
var noopFn = require('../../internal/noopFn.js');
|
|
26
26
|
require('../Text/index.js');
|
|
27
|
+
var index = require('../AILabel/index.js');
|
|
28
|
+
var utils = require('../../internal/utils.js');
|
|
27
29
|
var Text = require('../Text/Text.js');
|
|
28
30
|
|
|
29
31
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
@@ -75,7 +77,7 @@ const TextArea = frFn((props, forwardRef) => {
|
|
|
75
77
|
if (counterMode === 'character') {
|
|
76
78
|
return strValue.length;
|
|
77
79
|
} else {
|
|
78
|
-
return strValue.match(/\
|
|
80
|
+
return strValue.match(/\p{L}+/gu)?.length || 0;
|
|
79
81
|
}
|
|
80
82
|
}
|
|
81
83
|
const [textCount, setTextCount] = React.useState(getInitialTextCount());
|
|
@@ -107,8 +109,8 @@ const TextArea = frFn((props, forwardRef) => {
|
|
|
107
109
|
onPaste: evt => {
|
|
108
110
|
if (!disabled) {
|
|
109
111
|
if (counterMode === 'word' && enableCounter && typeof maxCount !== 'undefined' && textareaRef.current !== null) {
|
|
110
|
-
const existingWords = textareaRef.current.value.match(/\
|
|
111
|
-
const pastedWords = evt.clipboardData.getData('Text').match(/\
|
|
112
|
+
const existingWords = textareaRef.current.value.match(/\p{L}+/gu) || [];
|
|
113
|
+
const pastedWords = evt.clipboardData.getData('Text').match(/\p{L}+/gu) || [];
|
|
112
114
|
const totalWords = existingWords.length + pastedWords.length;
|
|
113
115
|
if (totalWords > maxCount) {
|
|
114
116
|
evt.preventDefault();
|
|
@@ -137,7 +139,7 @@ const TextArea = frFn((props, forwardRef) => {
|
|
|
137
139
|
return;
|
|
138
140
|
}
|
|
139
141
|
if (enableCounter && typeof maxCount !== 'undefined' && textareaRef.current !== null) {
|
|
140
|
-
const matchedWords = evt.target?.value?.match(/\
|
|
142
|
+
const matchedWords = evt.target?.value?.match(/\p{L}+/gu);
|
|
141
143
|
if (matchedWords && matchedWords.length <= maxCount) {
|
|
142
144
|
textareaRef.current.removeAttribute('maxLength');
|
|
143
145
|
setTimeout(() => {
|
|
@@ -268,12 +270,11 @@ const TextArea = frFn((props, forwardRef) => {
|
|
|
268
270
|
}));
|
|
269
271
|
|
|
270
272
|
// AILabel is always size `mini`
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
}
|
|
273
|
+
const candidate = slug ?? decorator;
|
|
274
|
+
const candidateIsAILabel = utils.isComponentElement(candidate, index.AILabel);
|
|
275
|
+
const normalizedDecorator = candidateIsAILabel ? /*#__PURE__*/React.cloneElement(candidate, {
|
|
276
|
+
size: 'mini'
|
|
277
|
+
}) : null;
|
|
277
278
|
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
278
279
|
className: formItemClasses
|
|
279
280
|
}, /*#__PURE__*/React__default["default"].createElement("div", {
|
|
@@ -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, { ReactNode } from 'react';
|
|
7
|
+
import React, { type ReactNode } from 'react';
|
|
8
8
|
type ExcludedAttributes = 'defaultValue' | 'id' | 'size' | 'value';
|
|
9
9
|
export interface TextInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, ExcludedAttributes> {
|
|
10
10
|
/**
|
|
@@ -17,9 +17,12 @@ var deprecate = require('../../prop-types/deprecate.js');
|
|
|
17
17
|
var util = require('./util.js');
|
|
18
18
|
require('../FluidForm/FluidForm.js');
|
|
19
19
|
var FormContext = require('../FluidForm/FormContext.js');
|
|
20
|
+
var useMergedRefs = require('../../internal/useMergedRefs.js');
|
|
20
21
|
var usePrefix = require('../../internal/usePrefix.js');
|
|
21
22
|
var getAnnouncement = require('../../internal/getAnnouncement.js');
|
|
22
23
|
require('../Text/index.js');
|
|
24
|
+
var index = require('../AILabel/index.js');
|
|
25
|
+
var utils = require('../../internal/utils.js');
|
|
23
26
|
var Text = require('../Text/Text.js');
|
|
24
27
|
|
|
25
28
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
@@ -58,7 +61,16 @@ const TextInput = /*#__PURE__*/React__default["default"].forwardRef(function Tex
|
|
|
58
61
|
defaultValue,
|
|
59
62
|
value
|
|
60
63
|
} = rest;
|
|
61
|
-
const
|
|
64
|
+
const inputRef = React.useRef(null);
|
|
65
|
+
const mergedRef = useMergedRefs.useMergedRefs([ref, inputRef]);
|
|
66
|
+
function getInitialTextCount() {
|
|
67
|
+
const targetValue = defaultValue || value || inputRef.current?.value || '';
|
|
68
|
+
return targetValue.toString().length;
|
|
69
|
+
}
|
|
70
|
+
const [textCount, setTextCount] = React.useState(getInitialTextCount());
|
|
71
|
+
React.useEffect(() => {
|
|
72
|
+
setTextCount(getInitialTextCount());
|
|
73
|
+
}, [value, defaultValue, enableCounter]);
|
|
62
74
|
const normalizedProps = useNormalizedInputProps.useNormalizedInputProps({
|
|
63
75
|
id,
|
|
64
76
|
readOnly,
|
|
@@ -91,7 +103,7 @@ const TextInput = /*#__PURE__*/React__default["default"].forwardRef(function Tex
|
|
|
91
103
|
},
|
|
92
104
|
placeholder,
|
|
93
105
|
type,
|
|
94
|
-
ref,
|
|
106
|
+
ref: mergedRef,
|
|
95
107
|
className: textInputClasses,
|
|
96
108
|
title: placeholder,
|
|
97
109
|
disabled: normalizedProps.disabled,
|
|
@@ -189,12 +201,11 @@ const TextInput = /*#__PURE__*/React__default["default"].forwardRef(function Tex
|
|
|
189
201
|
const Icon = normalizedProps.icon;
|
|
190
202
|
|
|
191
203
|
// AILabel is always size `mini`
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
}
|
|
204
|
+
const candidate = slug ?? decorator;
|
|
205
|
+
const candidateIsAILabel = utils.isComponentElement(candidate, index.AILabel);
|
|
206
|
+
const normalizedDecorator = candidateIsAILabel ? /*#__PURE__*/React.cloneElement(candidate, {
|
|
207
|
+
size: 'mini'
|
|
208
|
+
}) : null;
|
|
198
209
|
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
199
210
|
className: inputWrapperClasses
|
|
200
211
|
}, !inline ? labelWrapper : /*#__PURE__*/React__default["default"].createElement("div", {
|
|
@@ -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
|
|
7
|
+
import React, { type HTMLAttributes, type KeyboardEvent, type MouseEvent, type ReactNode } from 'react';
|
|
8
8
|
export interface TileProps extends HTMLAttributes<HTMLDivElement> {
|
|
9
9
|
children?: ReactNode;
|
|
10
10
|
className?: string;
|
|
@@ -105,7 +105,7 @@ export interface SelectableTileProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
105
105
|
/**
|
|
106
106
|
* The empty handler of the `<input>`.
|
|
107
107
|
*/
|
|
108
|
-
onChange?(event:
|
|
108
|
+
onChange?(event: MouseEvent<HTMLDivElement> | KeyboardEvent<HTMLDivElement>, selected?: boolean, id?: string): void;
|
|
109
109
|
/**
|
|
110
110
|
* Specify the function to run when the SelectableTile is clicked
|
|
111
111
|
*/
|
|
@@ -26,6 +26,8 @@ var useMergedRefs = require('../../internal/useMergedRefs.js');
|
|
|
26
26
|
var index = require('../FeatureFlags/index.js');
|
|
27
27
|
var useId = require('../../internal/useId.js');
|
|
28
28
|
require('../Text/index.js');
|
|
29
|
+
var index$1 = require('../AILabel/index.js');
|
|
30
|
+
var utils = require('../../internal/utils.js');
|
|
29
31
|
var Text = require('../Text/Text.js');
|
|
30
32
|
|
|
31
33
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
@@ -234,7 +236,11 @@ const SelectableTile = /*#__PURE__*/React__default["default"].forwardRef(functio
|
|
|
234
236
|
const clickHandler = onClick;
|
|
235
237
|
const keyDownHandler = onKeyDown;
|
|
236
238
|
const [isSelected, setIsSelected] = React.useState(selected);
|
|
237
|
-
|
|
239
|
+
|
|
240
|
+
// Use useEffect to sync with prop changes instead of render-time logic
|
|
241
|
+
React.useEffect(() => {
|
|
242
|
+
setIsSelected(selected);
|
|
243
|
+
}, [selected]);
|
|
238
244
|
const classes = cx__default["default"](`${prefix}--tile`, `${prefix}--tile--selectable`, {
|
|
239
245
|
[`${prefix}--tile--is-selected`]: isSelected,
|
|
240
246
|
[`${prefix}--tile--light`]: light,
|
|
@@ -244,50 +250,40 @@ const SelectableTile = /*#__PURE__*/React__default["default"].forwardRef(functio
|
|
|
244
250
|
[`${prefix}--tile--decorator`]: decorator,
|
|
245
251
|
[`${prefix}--tile--decorator-rounded`]: decorator && hasRoundedCorners
|
|
246
252
|
}, className);
|
|
253
|
+
|
|
254
|
+
// Single function to handle selection changes
|
|
255
|
+
const handleSelectionChange = React.useCallback((evt, newSelected) => {
|
|
256
|
+
setIsSelected(newSelected);
|
|
257
|
+
onChange(evt, newSelected, id);
|
|
258
|
+
}, [onChange, id]);
|
|
247
259
|
function handleClick(evt) {
|
|
248
260
|
evt.preventDefault();
|
|
249
261
|
evt?.persist?.();
|
|
250
|
-
if (normalizedDecorator && decoratorRef.current && decoratorRef.current.contains(evt.target)) {
|
|
262
|
+
if (normalizedDecorator && decoratorRef.current && evt.target instanceof Node && decoratorRef.current.contains(evt.target)) {
|
|
251
263
|
return;
|
|
252
264
|
}
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
onChange(evt, newSelected, id);
|
|
256
|
-
return newSelected;
|
|
257
|
-
});
|
|
265
|
+
const newSelected = !isSelected;
|
|
266
|
+
handleSelectionChange(evt, newSelected);
|
|
258
267
|
clickHandler(evt);
|
|
259
268
|
}
|
|
260
269
|
function handleKeyDown(evt) {
|
|
261
270
|
evt?.persist?.();
|
|
262
271
|
if (match.matches(evt, [keys.Enter, keys.Space])) {
|
|
263
272
|
evt.preventDefault();
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
onChange(evt, newSelected, id);
|
|
267
|
-
return newSelected;
|
|
268
|
-
});
|
|
273
|
+
const newSelected = !isSelected;
|
|
274
|
+
handleSelectionChange(evt, newSelected);
|
|
269
275
|
}
|
|
270
276
|
keyDownHandler(evt);
|
|
271
277
|
}
|
|
272
|
-
function handleChange(event) {
|
|
273
|
-
const newSelected = event.target.checked;
|
|
274
|
-
setIsSelected(newSelected);
|
|
275
|
-
onChange(event, newSelected, id);
|
|
276
|
-
}
|
|
277
|
-
if (selected !== prevSelected) {
|
|
278
|
-
setIsSelected(selected);
|
|
279
|
-
setPrevSelected(selected);
|
|
280
|
-
}
|
|
281
278
|
|
|
282
279
|
// AILabel is always size `xs`
|
|
283
280
|
const decoratorRef = React.useRef(null);
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
}
|
|
281
|
+
const candidate = slug ?? decorator;
|
|
282
|
+
const candidateIsAILabel = utils.isComponentElement(candidate, index$1.AILabel);
|
|
283
|
+
const normalizedDecorator = candidateIsAILabel ? /*#__PURE__*/React.cloneElement(candidate, {
|
|
284
|
+
size: 'xs',
|
|
285
|
+
ref: decoratorRef
|
|
286
|
+
}) : null;
|
|
291
287
|
return (
|
|
292
288
|
/*#__PURE__*/
|
|
293
289
|
// eslint-disable-next-line jsx-a11y/interactive-supports-focus
|
|
@@ -302,7 +298,6 @@ const SelectableTile = /*#__PURE__*/React__default["default"].forwardRef(functio
|
|
|
302
298
|
tabIndex: !disabled ? tabIndex : undefined,
|
|
303
299
|
ref: ref,
|
|
304
300
|
id: id,
|
|
305
|
-
onChange: !disabled ? handleChange : undefined,
|
|
306
301
|
title: title
|
|
307
302
|
}, rest), /*#__PURE__*/React__default["default"].createElement("span", {
|
|
308
303
|
className: `${prefix}--tile__checkmark ${prefix}--tile__checkmark--persistent`
|
|
@@ -515,12 +510,11 @@ const ExpandableTile = /*#__PURE__*/React__default["default"].forwardRef(functio
|
|
|
515
510
|
const belowTheFoldId = useId.useId('expandable-tile-interactive');
|
|
516
511
|
|
|
517
512
|
// AILabel is always size `xs`
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
}
|
|
513
|
+
const candidate = slug ?? decorator;
|
|
514
|
+
const candidateIsAILabel = utils.isComponentElement(candidate, index$1.AILabel);
|
|
515
|
+
const normalizedDecorator = candidateIsAILabel ? /*#__PURE__*/React.cloneElement(candidate, {
|
|
516
|
+
size: 'xs'
|
|
517
|
+
}) : null;
|
|
524
518
|
return interactive ? /*#__PURE__*/React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({
|
|
525
519
|
ref: ref,
|
|
526
520
|
className: interactiveClassNames
|
|
@@ -45,8 +45,9 @@ export interface TileGroupProps extends Omit<HTMLAttributes<HTMLFieldSetElement>
|
|
|
45
45
|
*/
|
|
46
46
|
required?: boolean;
|
|
47
47
|
}
|
|
48
|
-
declare const TileGroup: {
|
|
49
|
-
(
|
|
48
|
+
export declare const TileGroup: {
|
|
49
|
+
({ children, className, defaultSelected, disabled, legend, name, onChange, valueSelected, required, }: TileGroupProps): import("react/jsx-runtime").JSX.Element;
|
|
50
|
+
displayName: string;
|
|
50
51
|
propTypes: {
|
|
51
52
|
/**
|
|
52
53
|
* Provide a collection of <RadioTile> components to render in the group
|
|
@@ -86,6 +87,5 @@ declare const TileGroup: {
|
|
|
86
87
|
*/
|
|
87
88
|
valueSelected: PropTypes.Requireable<NonNullable<string | number | null | undefined>>;
|
|
88
89
|
};
|
|
89
|
-
displayName: string;
|
|
90
90
|
};
|
|
91
|
-
export
|
|
91
|
+
export {};
|
|
@@ -21,35 +21,37 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
|
|
|
21
21
|
var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
|
|
22
22
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
23
23
|
|
|
24
|
-
const TileGroup =
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
} = props;
|
|
24
|
+
const TileGroup = ({
|
|
25
|
+
children,
|
|
26
|
+
className,
|
|
27
|
+
defaultSelected,
|
|
28
|
+
disabled,
|
|
29
|
+
legend,
|
|
30
|
+
name,
|
|
31
|
+
onChange = noopFn.noopFn,
|
|
32
|
+
valueSelected,
|
|
33
|
+
required
|
|
34
|
+
}) => {
|
|
36
35
|
const prefix = usePrefix.usePrefix();
|
|
37
36
|
const [selected, setSelected] = React.useState(valueSelected ?? defaultSelected);
|
|
38
|
-
|
|
37
|
+
React.useEffect(() => {
|
|
38
|
+
if (typeof valueSelected !== 'undefined' && valueSelected !== selected) {
|
|
39
|
+
setSelected(valueSelected);
|
|
40
|
+
}
|
|
41
|
+
}, [valueSelected, selected]);
|
|
42
|
+
const handleChange = (value, name, evt) => {
|
|
43
|
+
if (value !== selected) {
|
|
44
|
+
setSelected(value);
|
|
45
|
+
onChange(value, name ?? '', evt);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
const getRadioTilesWithWrappers = elements => {
|
|
49
|
+
const traverseAndModifyChildren = elements => {
|
|
50
|
+
return React.Children.map(elements, child => {
|
|
51
|
+
if (! /*#__PURE__*/React.isValidElement(child)) return child;
|
|
39
52
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
* only update if selected prop changes
|
|
43
|
-
*/
|
|
44
|
-
if (valueSelected !== prevValueSelected) {
|
|
45
|
-
setSelected(valueSelected);
|
|
46
|
-
setPrevValueSelected(valueSelected);
|
|
47
|
-
}
|
|
48
|
-
const getRadioTilesWithWrappers = children => {
|
|
49
|
-
const traverseAndModifyChildren = children => {
|
|
50
|
-
return React__default["default"].Children.map(children, child => {
|
|
51
|
-
// If RadioTile found, return it with necessary props
|
|
52
|
-
if (child?.type === RadioTile["default"]) {
|
|
53
|
+
// If a `RadioTile` is found, return it with necessary props,
|
|
54
|
+
if (/*#__PURE__*/React.isValidElement(child) && child.type === RadioTile["default"]) {
|
|
53
55
|
const {
|
|
54
56
|
value,
|
|
55
57
|
...otherProps
|
|
@@ -62,38 +64,29 @@ const TileGroup = props => {
|
|
|
62
64
|
onChange: handleChange,
|
|
63
65
|
checked: value === selected
|
|
64
66
|
}));
|
|
65
|
-
} else if (child?.props?.children) {
|
|
66
|
-
// If the child is not RadioTile and has children, recheck the children
|
|
67
|
-
return /*#__PURE__*/React__default["default"].cloneElement(child, {
|
|
68
|
-
...child.props,
|
|
69
|
-
children: traverseAndModifyChildren(child.props.children)
|
|
70
|
-
});
|
|
71
|
-
} else {
|
|
72
|
-
// If the child is neither a RadioTile nor has children, return it as is
|
|
73
|
-
return child;
|
|
74
67
|
}
|
|
68
|
+
|
|
69
|
+
// If the child is not RadioTile and has children, recheck the children
|
|
70
|
+
const children = child.props.children;
|
|
71
|
+
const hasChildren = React.Children.count(children) > 0;
|
|
72
|
+
if (hasChildren) {
|
|
73
|
+
return /*#__PURE__*/React.cloneElement(child, undefined, traverseAndModifyChildren(children));
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// If the child is neither a RadioTile nor has children, return it as is
|
|
77
|
+
return child;
|
|
75
78
|
});
|
|
76
79
|
};
|
|
77
|
-
return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, traverseAndModifyChildren(
|
|
78
|
-
};
|
|
79
|
-
const handleChange = (newSelection, value, evt) => {
|
|
80
|
-
if (newSelection !== selected) {
|
|
81
|
-
setSelected(newSelection);
|
|
82
|
-
onChange(newSelection, name, evt);
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
|
-
const renderLegend = legend => {
|
|
86
|
-
if (legend) {
|
|
87
|
-
return /*#__PURE__*/React__default["default"].createElement("legend", {
|
|
88
|
-
className: `${prefix}--label`
|
|
89
|
-
}, legend);
|
|
90
|
-
}
|
|
80
|
+
return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, traverseAndModifyChildren(elements));
|
|
91
81
|
};
|
|
92
82
|
return /*#__PURE__*/React__default["default"].createElement("fieldset", {
|
|
93
83
|
className: className ?? `${prefix}--tile-group`,
|
|
94
84
|
disabled: disabled
|
|
95
|
-
},
|
|
85
|
+
}, legend && /*#__PURE__*/React__default["default"].createElement("legend", {
|
|
86
|
+
className: `${prefix}--label`
|
|
87
|
+
}, legend), /*#__PURE__*/React__default["default"].createElement("div", null, getRadioTilesWithWrappers(children)));
|
|
96
88
|
};
|
|
89
|
+
TileGroup.displayName = 'TileGroup';
|
|
97
90
|
TileGroup.propTypes = {
|
|
98
91
|
/**
|
|
99
92
|
* Provide a collection of <RadioTile> components to render in the group
|
|
@@ -133,6 +126,5 @@ TileGroup.propTypes = {
|
|
|
133
126
|
*/
|
|
134
127
|
valueSelected: PropTypes__default["default"].oneOfType([PropTypes__default["default"].string, PropTypes__default["default"].number])
|
|
135
128
|
};
|
|
136
|
-
TileGroup.displayName = 'TileGroup';
|
|
137
129
|
|
|
138
|
-
exports
|
|
130
|
+
exports.TileGroup = TileGroup;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright IBM Corp. 2016,
|
|
2
|
+
* Copyright IBM Corp. 2016, 2025
|
|
3
3
|
*
|
|
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
|
|
7
|
+
import { TileGroup } from './TileGroup';
|
|
8
8
|
export default TileGroup;
|
|
9
|
-
export
|
|
9
|
+
export * from './TileGroup';
|
|
@@ -98,6 +98,7 @@ function Toggletip({
|
|
|
98
98
|
buttonProps: {
|
|
99
99
|
'aria-expanded': open,
|
|
100
100
|
'aria-controls': id,
|
|
101
|
+
'aria-describedby': open ? id : undefined,
|
|
101
102
|
onClick: actions.toggle
|
|
102
103
|
},
|
|
103
104
|
contentProps: {
|
|
@@ -269,8 +270,7 @@ const ToggletipContent = /*#__PURE__*/React__default["default"].forwardRef(funct
|
|
|
269
270
|
return /*#__PURE__*/React__default["default"].createElement(index.PopoverContent, _rollupPluginBabelHelpers["extends"]({
|
|
270
271
|
className: customClassName
|
|
271
272
|
}, toggletip?.contentProps, {
|
|
272
|
-
ref: ref
|
|
273
|
-
"aria-live": "polite"
|
|
273
|
+
ref: ref
|
|
274
274
|
}), /*#__PURE__*/React__default["default"].createElement("div", {
|
|
275
275
|
className: `${prefix}--toggletip-content`
|
|
276
276
|
}, children));
|
|
@@ -67,6 +67,7 @@ const DefinitionTooltip = ({
|
|
|
67
67
|
}, /*#__PURE__*/React__default["default"].createElement("button", _rollupPluginBabelHelpers["extends"]({}, rest, {
|
|
68
68
|
className: cx__default["default"](`${prefix}--definition-term`, triggerClassName),
|
|
69
69
|
"aria-controls": tooltipId,
|
|
70
|
+
"aria-describedby": tooltipId,
|
|
70
71
|
"aria-expanded": isOpen,
|
|
71
72
|
onBlur: () => {
|
|
72
73
|
setOpen(false);
|
|
@@ -18,7 +18,7 @@ var keys = require('../../internal/keyboard/keys.js');
|
|
|
18
18
|
var match = require('../../internal/keyboard/match.js');
|
|
19
19
|
var useControllableState = require('../../internal/useControllableState.js');
|
|
20
20
|
var usePrefix = require('../../internal/usePrefix.js');
|
|
21
|
-
var
|
|
21
|
+
var useId = require('../../internal/useId.js');
|
|
22
22
|
var index = require('../FeatureFlags/index.js');
|
|
23
23
|
|
|
24
24
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
@@ -53,7 +53,7 @@ const TreeNode = /*#__PURE__*/React__default["default"].forwardRef(({
|
|
|
53
53
|
const enableTreeviewControllable = index.useFeatureFlag('enable-treeview-controllable');
|
|
54
54
|
const {
|
|
55
55
|
current: id
|
|
56
|
-
} = React.useRef(nodeId ||
|
|
56
|
+
} = React.useRef(nodeId || useId.useId());
|
|
57
57
|
const controllableExpandedState = useControllableState.useControllableState({
|
|
58
58
|
value: isExpanded,
|
|
59
59
|
onChange: newValue => {
|
|
@@ -82,7 +82,7 @@ const TreeNode = /*#__PURE__*/React__default["default"].forwardRef(({
|
|
|
82
82
|
function enhanceTreeNodes(children) {
|
|
83
83
|
return React__default["default"].Children.map(children, node => {
|
|
84
84
|
if (! /*#__PURE__*/React__default["default"].isValidElement(node)) return node;
|
|
85
|
-
const isTreeNode = node.type
|
|
85
|
+
const isTreeNode = node.type === TreeNode;
|
|
86
86
|
if (isTreeNode) {
|
|
87
87
|
return /*#__PURE__*/React__default["default"].cloneElement(node, {
|
|
88
88
|
active,
|