@carbon/react 1.85.0 → 1.86.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 +797 -797
- package/es/components/AILabel/index.js +1 -1
- package/es/components/Accordion/AccordionItem.d.ts +1 -1
- package/es/components/Accordion/AccordionItem.js +1 -1
- package/es/components/Checkbox/Checkbox.js +1 -1
- package/es/components/CheckboxGroup/CheckboxGroup.js +1 -1
- package/es/components/CodeSnippet/CodeSnippet.d.ts +2 -2
- package/es/components/CodeSnippet/CodeSnippet.js +1 -1
- package/es/components/ComboBox/ComboBox.js +1 -1
- package/es/components/ComposedModal/ComposedModal.js +1 -1
- package/es/components/ContentSwitcher/ContentSwitcher.d.ts +1 -1
- package/es/components/ContentSwitcher/ContentSwitcher.js +1 -1
- package/es/components/DataTable/DataTable.d.ts +230 -170
- package/es/components/DataTable/DataTable.js +508 -519
- package/es/components/DataTable/TableContainer.d.ts +9 -1
- package/es/components/DataTable/TableContainer.js +7 -1
- package/es/components/DataTable/TableExpandHeader.d.ts +1 -1
- package/es/components/DataTable/TableExpandHeader.js +1 -1
- package/es/components/DataTable/TableSelectAll.d.ts +2 -2
- package/es/components/DataTable/TableSelectAll.js +1 -1
- package/es/components/DataTable/TableSelectRow.d.ts +2 -2
- package/es/components/DataTable/TableSelectRow.js +1 -1
- package/es/components/DataTable/TableToolbar.d.ts +1 -1
- package/es/components/DataTable/TableToolbar.js +1 -1
- package/es/components/DataTable/TableToolbarMenu.d.ts +2 -18
- package/es/components/DataTable/TableToolbarMenu.js +0 -1
- package/es/components/DataTable/index.d.ts +1 -1
- package/es/components/DataTable/state/getDerivedStateFromProps.js +5 -1
- package/es/components/DatePicker/DatePicker.js +1 -1
- package/es/components/DatePickerInput/DatePickerInput.js +1 -1
- package/es/components/Dropdown/Dropdown.js +1 -1
- package/es/components/FeatureFlags/index.d.ts +2 -2
- package/es/components/FeatureFlags/index.js +1 -1
- package/es/components/FileUploader/FileUploaderButton.d.ts +1 -1
- package/es/components/FileUploader/FileUploaderButton.js +1 -1
- package/es/components/FileUploader/FileUploaderDropContainer.d.ts +2 -2
- package/es/components/FileUploader/FileUploaderDropContainer.js +1 -1
- package/es/components/FluidTextArea/FluidTextArea.d.ts +1 -1
- package/es/components/FluidTextArea/FluidTextArea.js +1 -1
- package/es/components/InlineCheckbox/InlineCheckbox.js +1 -1
- package/es/components/ListBox/ListBox.js +1 -1
- package/es/components/Loading/Loading.d.ts +1 -1
- package/es/components/Loading/Loading.js +1 -1
- package/es/components/Menu/Menu.js +1 -1
- package/es/components/Modal/Modal.js +1 -1
- package/es/components/MultiSelect/FilterableMultiSelect.js +1 -1
- package/es/components/MultiSelect/MultiSelect.js +1 -1
- package/es/components/Notification/Notification.d.ts +4 -4
- package/es/components/Notification/Notification.js +1 -1
- package/es/components/NumberInput/NumberInput.d.ts +7 -0
- package/es/components/NumberInput/NumberInput.js +80 -25
- package/es/components/OverflowMenu/OverflowMenu.d.ts +2 -6
- package/es/components/OverflowMenu/OverflowMenu.js +1 -1
- package/es/components/Pagination/Pagination.js +22 -5
- package/es/components/RadioButton/RadioButton.js +1 -1
- package/es/components/RadioButtonGroup/RadioButtonGroup.js +1 -1
- package/es/components/RadioTile/RadioTile.js +1 -1
- package/es/components/Search/Search.js +1 -1
- package/es/components/Select/Select.js +1 -1
- package/es/components/Slider/Slider.js +1 -1
- package/es/components/StructuredList/StructuredList.d.ts +5 -5
- package/es/components/StructuredList/StructuredList.js +1 -1
- package/es/components/Tabs/Tabs.d.ts +1 -1
- package/es/components/Tabs/Tabs.js +1 -1
- package/es/components/Tag/DismissibleTag.js +1 -1
- package/es/components/Tag/Tag.js +1 -1
- package/es/components/TextArea/TextArea.js +1 -1
- package/es/components/TextInput/ControlledPasswordInput.js +1 -1
- package/es/components/TextInput/PasswordInput.js +1 -1
- package/es/components/TextInput/TextInput.js +1 -1
- package/es/components/Tile/Tile.js +1 -1
- package/es/components/TileGroup/TileGroup.d.ts +5 -5
- package/es/components/TimePicker/TimePicker.d.ts +8 -0
- package/es/components/TimePicker/TimePicker.js +6 -4
- package/es/components/Tooltip/DefinitionTooltip.d.ts +1 -1
- package/es/components/Tooltip/DefinitionTooltip.js +1 -1
- package/es/components/TreeView/TreeContext.d.ts +19 -0
- package/es/components/TreeView/TreeContext.js +13 -0
- package/es/components/TreeView/TreeNode.d.ts +4 -4
- package/es/components/TreeView/TreeNode.js +56 -108
- package/es/components/TreeView/TreeView.js +42 -79
- package/es/components/UIShell/HeaderMenu.js +1 -1
- package/es/components/UIShell/HeaderMenuItem.d.ts +1 -1
- package/es/components/UIShell/HeaderMenuItem.js +1 -1
- package/es/components/UIShell/HeaderName.d.ts +1 -1
- package/es/components/UIShell/HeaderPanel.js +5 -7
- package/es/components/UIShell/Link.d.ts +2 -2
- package/es/components/UIShell/Link.js +1 -1
- package/es/components/UIShell/Switcher.d.ts +1 -1
- package/es/components/UIShell/Switcher.js +39 -12
- package/es/index.js +1 -1
- package/es/internal/useNoInteractiveChildren.d.ts +25 -0
- package/es/internal/useNoInteractiveChildren.js +39 -32
- package/es/prop-types/deprecate.d.ts +17 -0
- package/es/prop-types/deprecate.js +22 -12
- package/lib/components/AILabel/index.js +2 -2
- package/lib/components/Accordion/AccordionItem.d.ts +1 -1
- package/lib/components/Accordion/AccordionItem.js +1 -1
- package/lib/components/Checkbox/Checkbox.js +1 -1
- package/lib/components/CheckboxGroup/CheckboxGroup.js +1 -1
- package/lib/components/CodeSnippet/CodeSnippet.d.ts +2 -2
- package/lib/components/CodeSnippet/CodeSnippet.js +2 -2
- package/lib/components/ComboBox/ComboBox.js +3 -3
- package/lib/components/ComposedModal/ComposedModal.js +1 -1
- package/lib/components/ContentSwitcher/ContentSwitcher.d.ts +1 -1
- package/lib/components/ContentSwitcher/ContentSwitcher.js +1 -1
- package/lib/components/DataTable/DataTable.d.ts +230 -170
- package/lib/components/DataTable/DataTable.js +507 -518
- package/lib/components/DataTable/TableContainer.d.ts +9 -1
- package/lib/components/DataTable/TableContainer.js +7 -1
- package/lib/components/DataTable/TableExpandHeader.d.ts +1 -1
- package/lib/components/DataTable/TableExpandHeader.js +1 -1
- package/lib/components/DataTable/TableSelectAll.d.ts +2 -2
- package/lib/components/DataTable/TableSelectAll.js +1 -1
- package/lib/components/DataTable/TableSelectRow.d.ts +2 -2
- package/lib/components/DataTable/TableSelectRow.js +1 -1
- package/lib/components/DataTable/TableToolbar.d.ts +1 -1
- package/lib/components/DataTable/TableToolbar.js +1 -1
- package/lib/components/DataTable/TableToolbarMenu.d.ts +2 -18
- package/lib/components/DataTable/TableToolbarMenu.js +0 -1
- package/lib/components/DataTable/index.d.ts +1 -1
- package/lib/components/DataTable/state/getDerivedStateFromProps.js +5 -1
- package/lib/components/DatePicker/DatePicker.js +1 -1
- package/lib/components/DatePickerInput/DatePickerInput.js +1 -1
- package/lib/components/Dropdown/Dropdown.js +3 -3
- package/lib/components/FeatureFlags/index.d.ts +2 -2
- package/lib/components/FeatureFlags/index.js +1 -1
- package/lib/components/FileUploader/FileUploaderButton.d.ts +1 -1
- package/lib/components/FileUploader/FileUploaderButton.js +1 -1
- package/lib/components/FileUploader/FileUploaderDropContainer.d.ts +2 -2
- package/lib/components/FileUploader/FileUploaderDropContainer.js +2 -2
- package/lib/components/FluidTextArea/FluidTextArea.d.ts +1 -1
- package/lib/components/FluidTextArea/FluidTextArea.js +1 -1
- package/lib/components/InlineCheckbox/InlineCheckbox.js +1 -1
- package/lib/components/ListBox/ListBox.js +1 -1
- package/lib/components/Loading/Loading.d.ts +1 -1
- package/lib/components/Loading/Loading.js +1 -1
- package/lib/components/Menu/Menu.js +1 -1
- package/lib/components/Modal/Modal.js +1 -1
- package/lib/components/MultiSelect/FilterableMultiSelect.js +4 -4
- package/lib/components/MultiSelect/MultiSelect.js +2 -2
- package/lib/components/Notification/Notification.d.ts +4 -4
- package/lib/components/Notification/Notification.js +4 -4
- package/lib/components/NumberInput/NumberInput.d.ts +7 -0
- package/lib/components/NumberInput/NumberInput.js +81 -26
- package/lib/components/OverflowMenu/OverflowMenu.d.ts +2 -6
- package/lib/components/OverflowMenu/OverflowMenu.js +2 -2
- package/lib/components/Pagination/Pagination.js +21 -4
- package/lib/components/RadioButton/RadioButton.js +1 -1
- package/lib/components/RadioButtonGroup/RadioButtonGroup.js +1 -1
- package/lib/components/RadioTile/RadioTile.js +2 -2
- package/lib/components/Search/Search.js +1 -1
- package/lib/components/Select/Select.js +2 -2
- package/lib/components/Slider/Slider.js +1 -1
- package/lib/components/StructuredList/StructuredList.d.ts +5 -5
- package/lib/components/StructuredList/StructuredList.js +4 -4
- package/lib/components/Tabs/Tabs.d.ts +1 -1
- package/lib/components/Tabs/Tabs.js +1 -1
- package/lib/components/Tag/DismissibleTag.js +1 -1
- package/lib/components/Tag/Tag.js +4 -4
- package/lib/components/TextArea/TextArea.js +2 -2
- package/lib/components/TextInput/ControlledPasswordInput.js +1 -1
- package/lib/components/TextInput/PasswordInput.js +1 -1
- package/lib/components/TextInput/TextInput.js +2 -2
- package/lib/components/Tile/Tile.js +9 -9
- package/lib/components/TileGroup/TileGroup.d.ts +5 -5
- package/lib/components/TimePicker/TimePicker.d.ts +8 -0
- package/lib/components/TimePicker/TimePicker.js +6 -4
- package/lib/components/Tooltip/DefinitionTooltip.d.ts +1 -1
- package/lib/components/Tooltip/DefinitionTooltip.js +1 -1
- package/lib/components/TreeView/TreeContext.d.ts +19 -0
- package/lib/components/TreeView/TreeContext.js +18 -0
- package/lib/components/TreeView/TreeNode.d.ts +4 -4
- package/lib/components/TreeView/TreeNode.js +55 -107
- package/lib/components/TreeView/TreeView.js +41 -78
- package/lib/components/UIShell/HeaderMenu.js +1 -1
- package/lib/components/UIShell/HeaderMenuItem.d.ts +1 -1
- package/lib/components/UIShell/HeaderMenuItem.js +1 -1
- package/lib/components/UIShell/HeaderName.d.ts +1 -1
- package/lib/components/UIShell/HeaderPanel.js +5 -7
- package/lib/components/UIShell/Link.d.ts +2 -2
- package/lib/components/UIShell/Link.js +1 -1
- package/lib/components/UIShell/Switcher.d.ts +1 -1
- package/lib/components/UIShell/Switcher.js +38 -11
- package/lib/index.js +1 -1
- package/lib/internal/useNoInteractiveChildren.d.ts +25 -0
- package/lib/internal/useNoInteractiveChildren.js +39 -32
- package/lib/prop-types/deprecate.d.ts +17 -0
- package/lib/prop-types/deprecate.js +22 -12
- package/package.json +3 -3
- package/telemetry.yml +15 -14
|
@@ -86,11 +86,11 @@ Tile.propTypes = {
|
|
|
86
86
|
*
|
|
87
87
|
* @deprecated
|
|
88
88
|
*/
|
|
89
|
-
light: deprecate
|
|
89
|
+
light: deprecate.deprecate(PropTypes__default["default"].bool, 'The `light` prop for `Tile` is no longer needed and has been deprecated. It will be removed in the next major release. Use the Layer component instead.'),
|
|
90
90
|
/**
|
|
91
91
|
* **Experimental**: Provide a `Slug` component to be rendered inside the `Tile` component
|
|
92
92
|
*/
|
|
93
|
-
slug: deprecate
|
|
93
|
+
slug: deprecate.deprecate(PropTypes__default["default"].node, 'The `slug` prop for `Tile` has ' + 'been deprecated in favor of the new `decorator` prop. It will be removed in the next major release.')
|
|
94
94
|
};
|
|
95
95
|
const ClickableTile = /*#__PURE__*/React__default["default"].forwardRef(function ClickableTile({
|
|
96
96
|
children,
|
|
@@ -197,7 +197,7 @@ ClickableTile.propTypes = {
|
|
|
197
197
|
* `true` to use the light version. For use on $ui-01 backgrounds only.
|
|
198
198
|
* Don't use this to make tile background color same as container background color.
|
|
199
199
|
*/
|
|
200
|
-
light: deprecate
|
|
200
|
+
light: deprecate.deprecate(PropTypes__default["default"].bool, 'The `light` prop for `ClickableTile` is no longer needed and has been deprecated. It will be removed in the next major release. Use the Layer component instead.'),
|
|
201
201
|
/**
|
|
202
202
|
* Specify the function to run when the ClickableTile is clicked
|
|
203
203
|
*/
|
|
@@ -334,12 +334,12 @@ SelectableTile.propTypes = {
|
|
|
334
334
|
* `true` to use the light version. For use on $ui-01 backgrounds only.
|
|
335
335
|
* Don't use this to make tile background color same as container background color.
|
|
336
336
|
*/
|
|
337
|
-
light: deprecate
|
|
337
|
+
light: deprecate.deprecate(PropTypes__default["default"].bool, 'The `light` prop for `SelectableTile` is no longer needed and has been deprecated. It will be removed in the next major release. Use the Layer component instead.'),
|
|
338
338
|
/**
|
|
339
339
|
* The `name` of the `<input>`.
|
|
340
340
|
* @deprecated
|
|
341
341
|
*/
|
|
342
|
-
name: deprecate
|
|
342
|
+
name: deprecate.deprecate(PropTypes__default["default"].string, 'The `name` property is no longer used. It will be removed in the next major release.'),
|
|
343
343
|
/**
|
|
344
344
|
* The empty handler of the `<input>`.
|
|
345
345
|
*/
|
|
@@ -359,7 +359,7 @@ SelectableTile.propTypes = {
|
|
|
359
359
|
/**
|
|
360
360
|
* **Experimental**: Provide a `Slug` component to be rendered inside the `SelectableTile` component
|
|
361
361
|
*/
|
|
362
|
-
slug: deprecate
|
|
362
|
+
slug: deprecate.deprecate(PropTypes__default["default"].node, 'The `slug` prop for `SelectableTile` has ' + 'been deprecated in favor of the new `decorator` prop. It will be removed in the next major release.'),
|
|
363
363
|
/**
|
|
364
364
|
* Specify the tab index of the wrapper element
|
|
365
365
|
*/
|
|
@@ -372,7 +372,7 @@ SelectableTile.propTypes = {
|
|
|
372
372
|
* The value of the `<input>`.
|
|
373
373
|
* @deprecated
|
|
374
374
|
*/
|
|
375
|
-
value: deprecate
|
|
375
|
+
value: deprecate.deprecate(PropTypes__default["default"].oneOfType([PropTypes__default["default"].string, PropTypes__default["default"].number]), 'The `value` property is no longer used. It will be removed in the next major release.`')
|
|
376
376
|
};
|
|
377
377
|
const ExpandableTile = /*#__PURE__*/React__default["default"].forwardRef(function ExpandableTile({
|
|
378
378
|
tabIndex = 0,
|
|
@@ -584,7 +584,7 @@ ExpandableTile.propTypes = {
|
|
|
584
584
|
* `true` to use the light version. For use on $ui-01 backgrounds only.
|
|
585
585
|
* Don't use this to make tile background color same as container background color.
|
|
586
586
|
*/
|
|
587
|
-
light: deprecate
|
|
587
|
+
light: deprecate.deprecate(PropTypes__default["default"].bool, 'The `light` prop for `ExpandableTile` is no longer needed and has been deprecated. It will be removed in the next major release. Use the Layer component instead.'),
|
|
588
588
|
/**
|
|
589
589
|
* Specify the function to run when the ExpandableTile is clicked
|
|
590
590
|
*/
|
|
@@ -596,7 +596,7 @@ ExpandableTile.propTypes = {
|
|
|
596
596
|
/**
|
|
597
597
|
* **Experimental**: Provide a `Slug` component to be rendered inside the `ExpandableTile` component
|
|
598
598
|
*/
|
|
599
|
-
slug: deprecate
|
|
599
|
+
slug: deprecate.deprecate(PropTypes__default["default"].node, 'The `slug` prop for `ExpandableTile` has ' + 'been deprecated in favor of the new `decorator` prop. It will be removed in the next major release.'),
|
|
600
600
|
/**
|
|
601
601
|
* The `tabindex` attribute.
|
|
602
602
|
*/
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
import PropTypes from 'prop-types';
|
|
8
8
|
import { type HTMLAttributes, type ReactNode } from 'react';
|
|
9
9
|
type ExcludedAttributes = 'onChange';
|
|
10
|
-
export interface TileGroupProps extends Omit<HTMLAttributes<HTMLFieldSetElement>, ExcludedAttributes> {
|
|
10
|
+
export interface TileGroupProps<T = string | number> extends Omit<HTMLAttributes<HTMLFieldSetElement>, ExcludedAttributes> {
|
|
11
11
|
/**
|
|
12
12
|
* Provide a collection of <RadioTile> components to render in the group
|
|
13
13
|
*/
|
|
@@ -19,7 +19,7 @@ export interface TileGroupProps extends Omit<HTMLAttributes<HTMLFieldSetElement>
|
|
|
19
19
|
/**
|
|
20
20
|
* Specify the the value of <RadioTile> to be selected by default
|
|
21
21
|
*/
|
|
22
|
-
defaultSelected?:
|
|
22
|
+
defaultSelected?: T;
|
|
23
23
|
/**
|
|
24
24
|
* Specify whether the group is disabled
|
|
25
25
|
*/
|
|
@@ -35,18 +35,18 @@ export interface TileGroupProps extends Omit<HTMLAttributes<HTMLFieldSetElement>
|
|
|
35
35
|
/**
|
|
36
36
|
* Provide an optional `onChange` hook that is called whenever the value of the group changes
|
|
37
37
|
*/
|
|
38
|
-
onChange?: (selection:
|
|
38
|
+
onChange?: (selection: T, name: string, evt: unknown) => void;
|
|
39
39
|
/**
|
|
40
40
|
* Specify the value that is currently selected in the group
|
|
41
41
|
*/
|
|
42
|
-
valueSelected?:
|
|
42
|
+
valueSelected?: T;
|
|
43
43
|
/**
|
|
44
44
|
* `true` to specify if input selection in group is required.
|
|
45
45
|
*/
|
|
46
46
|
required?: boolean;
|
|
47
47
|
}
|
|
48
48
|
export declare const TileGroup: {
|
|
49
|
-
({ children, className, defaultSelected, disabled, legend, name, onChange, valueSelected, required, }: TileGroupProps): import("react/jsx-runtime").JSX.Element;
|
|
49
|
+
<T extends string | number = string>({ children, className, defaultSelected, disabled, legend, name, onChange, valueSelected, required, }: TileGroupProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
50
50
|
displayName: string;
|
|
51
51
|
propTypes: {
|
|
52
52
|
/**
|
|
@@ -15,6 +15,14 @@ export interface TimePickerProps extends Omit<HTMLAttributes<HTMLInputElement>,
|
|
|
15
15
|
* Specify an optional className to be applied to the container node
|
|
16
16
|
*/
|
|
17
17
|
className?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Specify an optional className to be applied to the `<input>` node
|
|
20
|
+
*/
|
|
21
|
+
inputClassName?: string;
|
|
22
|
+
/**
|
|
23
|
+
* Specify an optional className to be applied to the container that wraps the `<input>` and select option
|
|
24
|
+
*/
|
|
25
|
+
pickerClassName?: string;
|
|
18
26
|
/**
|
|
19
27
|
* Specify whether the `<input>` should be disabled
|
|
20
28
|
*/
|
|
@@ -28,6 +28,8 @@ const TimePicker = frFn((props, ref) => {
|
|
|
28
28
|
const {
|
|
29
29
|
children,
|
|
30
30
|
className,
|
|
31
|
+
inputClassName,
|
|
32
|
+
pickerClassName,
|
|
31
33
|
disabled = false,
|
|
32
34
|
hideLabel,
|
|
33
35
|
id,
|
|
@@ -78,7 +80,7 @@ const TimePicker = frFn((props, ref) => {
|
|
|
78
80
|
onBlur(evt);
|
|
79
81
|
}
|
|
80
82
|
}
|
|
81
|
-
const timePickerInputClasses = cx__default["default"](`${prefix}--time-picker__input-field`, `${prefix}--text-input`, [
|
|
83
|
+
const timePickerInputClasses = cx__default["default"](`${prefix}--time-picker__input-field`, `${prefix}--text-input`, [inputClassName], {
|
|
82
84
|
[`${prefix}--text-input--light`]: light,
|
|
83
85
|
[`${prefix}--time-picker__input-field-error`]: invalid || warning
|
|
84
86
|
});
|
|
@@ -89,8 +91,8 @@ const TimePicker = frFn((props, ref) => {
|
|
|
89
91
|
[`${prefix}--time-picker--warning`]: warning,
|
|
90
92
|
[`${prefix}--time-picker--readonly`]: readOnly,
|
|
91
93
|
[`${prefix}--time-picker--${size}`]: size,
|
|
92
|
-
...(
|
|
93
|
-
[
|
|
94
|
+
...(pickerClassName && {
|
|
95
|
+
[pickerClassName]: true
|
|
94
96
|
})
|
|
95
97
|
});
|
|
96
98
|
const labelClasses = cx__default["default"](`${prefix}--label`, {
|
|
@@ -204,7 +206,7 @@ TimePicker.propTypes = {
|
|
|
204
206
|
/**
|
|
205
207
|
* The `light` prop for `TimePicker` has been deprecated. It will be removed in v12. Use the `Layer` component instead.
|
|
206
208
|
*/
|
|
207
|
-
light: deprecate
|
|
209
|
+
light: deprecate.deprecate(PropTypes__default["default"].bool, 'The `light` prop for `TimePicker` is no longer needed and has been deprecated. It will be removed in the next major release. Use the `Layer` component instead.'),
|
|
208
210
|
/**
|
|
209
211
|
* Specify the maximum length of the time string in `<input>`
|
|
210
212
|
*/
|
|
@@ -145,7 +145,7 @@ DefinitionTooltip.propTypes = {
|
|
|
145
145
|
*
|
|
146
146
|
* Provide the text that will be displayed in the tooltip when it is rendered.
|
|
147
147
|
*/
|
|
148
|
-
tooltipText: deprecate
|
|
148
|
+
tooltipText: deprecate.deprecate(PropTypes__default["default"].node, 'The tooltipText prop has been deprecated. Please use the `definition` prop instead.'),
|
|
149
149
|
/**
|
|
150
150
|
* The CSS class name of the trigger element
|
|
151
151
|
*/
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright IBM Corp. 2016, 2025
|
|
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 { type MouseEvent } from 'react';
|
|
8
|
+
import type { TreeNodeProps } from './TreeNode';
|
|
9
|
+
interface TreeContextProps {
|
|
10
|
+
active?: string | number;
|
|
11
|
+
multiselect?: boolean;
|
|
12
|
+
onActivate?: (nodeId?: string | number) => void;
|
|
13
|
+
onTreeSelect?: (event: MouseEvent, node?: Partial<TreeNodeProps>) => void;
|
|
14
|
+
selected?: Array<string | number>;
|
|
15
|
+
size?: 'xs' | 'sm';
|
|
16
|
+
}
|
|
17
|
+
export declare const TreeContext: import("react").Context<TreeContextProps | null>;
|
|
18
|
+
export declare const DepthContext: import("react").Context<number>;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
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
|
+
|
|
8
|
+
'use strict';
|
|
9
|
+
|
|
10
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
11
|
+
|
|
12
|
+
var React = require('react');
|
|
13
|
+
|
|
14
|
+
const TreeContext = /*#__PURE__*/React.createContext(null);
|
|
15
|
+
const DepthContext = /*#__PURE__*/React.createContext(-1);
|
|
16
|
+
|
|
17
|
+
exports.DepthContext = DepthContext;
|
|
18
|
+
exports.TreeContext = TreeContext;
|
|
@@ -52,11 +52,11 @@ export type TreeNodeProps = {
|
|
|
52
52
|
/**
|
|
53
53
|
* Callback function for when the node is selected
|
|
54
54
|
*/
|
|
55
|
-
onSelect?: (event: React.MouseEvent, node?: TreeNodeProps) => void;
|
|
55
|
+
onSelect?: (event: React.MouseEvent, node?: Omit<TreeNodeProps, 'children'>) => void;
|
|
56
56
|
/**
|
|
57
57
|
* Callback function for when a parent node is expanded or collapsed
|
|
58
58
|
*/
|
|
59
|
-
onToggle?: (event: React.MouseEvent, node?: TreeNodeProps) => void;
|
|
59
|
+
onToggle?: (event: React.MouseEvent | React.KeyboardEvent, node?: Omit<TreeNodeProps, 'children'>) => void;
|
|
60
60
|
/**
|
|
61
61
|
* Callback function for when any node in the tree is selected
|
|
62
62
|
*/
|
|
@@ -137,11 +137,11 @@ declare const TreeNode: React.ForwardRefExoticComponent<{
|
|
|
137
137
|
/**
|
|
138
138
|
* Callback function for when the node is selected
|
|
139
139
|
*/
|
|
140
|
-
onSelect?: (event: React.MouseEvent, node?: TreeNodeProps) => void;
|
|
140
|
+
onSelect?: (event: React.MouseEvent, node?: Omit<TreeNodeProps, "children">) => void;
|
|
141
141
|
/**
|
|
142
142
|
* Callback function for when a parent node is expanded or collapsed
|
|
143
143
|
*/
|
|
144
|
-
onToggle?: (event: React.MouseEvent, node?: TreeNodeProps) => void;
|
|
144
|
+
onToggle?: (event: React.MouseEvent | React.KeyboardEvent, node?: Omit<TreeNodeProps, "children">) => void;
|
|
145
145
|
/**
|
|
146
146
|
* Callback function for when any node in the tree is selected
|
|
147
147
|
*/
|
|
@@ -21,6 +21,7 @@ var usePrefix = require('../../internal/usePrefix.js');
|
|
|
21
21
|
var useId = require('../../internal/useId.js');
|
|
22
22
|
var index = require('../FeatureFlags/index.js');
|
|
23
23
|
var index$1 = require('../IconButton/index.js');
|
|
24
|
+
var TreeContext = require('./TreeContext.js');
|
|
24
25
|
|
|
25
26
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
26
27
|
|
|
@@ -97,29 +98,36 @@ const useEllipsisCheck = (label, detailsWrapperRef) => {
|
|
|
97
98
|
};
|
|
98
99
|
};
|
|
99
100
|
const TreeNode = /*#__PURE__*/React__default["default"].forwardRef(({
|
|
100
|
-
active,
|
|
101
101
|
children,
|
|
102
102
|
className,
|
|
103
|
-
depth: propDepth,
|
|
104
103
|
disabled,
|
|
105
104
|
id: nodeId,
|
|
106
105
|
isExpanded,
|
|
107
106
|
defaultIsExpanded,
|
|
108
107
|
label,
|
|
109
|
-
onNodeFocusEvent,
|
|
110
108
|
onSelect: onNodeSelect,
|
|
111
109
|
onToggle,
|
|
112
|
-
onTreeSelect,
|
|
113
110
|
renderIcon: Icon,
|
|
114
|
-
selected: propSelected,
|
|
115
111
|
value,
|
|
116
112
|
href,
|
|
117
113
|
align = 'bottom',
|
|
118
114
|
autoAlign = false,
|
|
115
|
+
// These props are fallback props if the TreeContext is not available or only TreeNode is used as a standalone component
|
|
116
|
+
active: propActive,
|
|
117
|
+
depth: propDepth,
|
|
118
|
+
selected: propSelected,
|
|
119
|
+
onTreeSelect: propOnTreeSelect,
|
|
120
|
+
onNodeFocusEvent,
|
|
119
121
|
...rest
|
|
120
122
|
}, forwardedRef) => {
|
|
121
|
-
const
|
|
122
|
-
const
|
|
123
|
+
const treeContext = React.useContext(TreeContext.TreeContext);
|
|
124
|
+
const contextDepth = React.useContext(TreeContext.DepthContext);
|
|
125
|
+
|
|
126
|
+
// Prioritize direct props, and fall back to context values.
|
|
127
|
+
const depth = propDepth ?? (contextDepth !== -1 ? contextDepth : 0);
|
|
128
|
+
const active = propActive ?? treeContext?.active;
|
|
129
|
+
const selected = propSelected ?? treeContext?.selected ?? [];
|
|
130
|
+
const onTreeSelect = propOnTreeSelect ?? treeContext?.onTreeSelect;
|
|
123
131
|
const detailsWrapperRef = React.useRef(null);
|
|
124
132
|
const {
|
|
125
133
|
labelTextRef,
|
|
@@ -174,30 +182,8 @@ const TreeNode = /*#__PURE__*/React__default["default"].forwardRef(({
|
|
|
174
182
|
forwardedRef.current = element;
|
|
175
183
|
}
|
|
176
184
|
};
|
|
177
|
-
function enhanceTreeNodes(children) {
|
|
178
|
-
return React__default["default"].Children.map(children, node => {
|
|
179
|
-
if (! /*#__PURE__*/React__default["default"].isValidElement(node)) return node;
|
|
180
|
-
const isTreeNode = node.type === TreeNode;
|
|
181
|
-
if (isTreeNode) {
|
|
182
|
-
return /*#__PURE__*/React__default["default"].cloneElement(node, {
|
|
183
|
-
active,
|
|
184
|
-
depth: depth + 1,
|
|
185
|
-
disabled: disabled || node.props.disabled,
|
|
186
|
-
onTreeSelect,
|
|
187
|
-
onNodeFocusEvent,
|
|
188
|
-
selected,
|
|
189
|
-
tabIndex: node.props.disabled ? null : -1
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
const newChildren = enhanceTreeNodes(node.props.children);
|
|
193
|
-
return /*#__PURE__*/React__default["default"].cloneElement(node, {
|
|
194
|
-
children: newChildren
|
|
195
|
-
});
|
|
196
|
-
});
|
|
197
|
-
}
|
|
198
|
-
const nodesWithProps = enhanceTreeNodes(children);
|
|
199
185
|
const isActive = active === id;
|
|
200
|
-
const isSelected = selected
|
|
186
|
+
const isSelected = selected?.includes(id) ?? false;
|
|
201
187
|
const treeNodeClasses = cx__default["default"](className, `${prefix}--tree-node`, {
|
|
202
188
|
[`${prefix}--tree-node--active`]: isActive,
|
|
203
189
|
[`${prefix}--tree-node--disabled`]: disabled,
|
|
@@ -299,7 +285,7 @@ const TreeNode = /*#__PURE__*/React__default["default"].forwardRef(({
|
|
|
299
285
|
* When focus is on an expanded parent node, move focus to the first
|
|
300
286
|
* child node
|
|
301
287
|
*/
|
|
302
|
-
getFocusableNode(href ? currentNode.current?.parentElement?.lastChild?.firstChild : currentNode.current?.lastChild?.firstChild)
|
|
288
|
+
getFocusableNode(href ? currentNode.current?.parentElement?.lastChild?.firstChild : currentNode.current?.lastChild?.firstChild)?.focus();
|
|
303
289
|
} else {
|
|
304
290
|
if (!enableTreeviewControllable) {
|
|
305
291
|
onToggle?.(event, {
|
|
@@ -334,12 +320,12 @@ const TreeNode = /*#__PURE__*/React__default["default"].forwardRef(({
|
|
|
334
320
|
rest?.onKeyDown?.(event);
|
|
335
321
|
}
|
|
336
322
|
function handleFocusEvent(event) {
|
|
337
|
-
if (event.type === 'blur') {
|
|
338
|
-
rest?.onBlur?.(event);
|
|
339
|
-
}
|
|
340
323
|
if (event.type === 'focus') {
|
|
341
324
|
rest?.onFocus?.(event);
|
|
342
325
|
}
|
|
326
|
+
if (event.type === 'blur') {
|
|
327
|
+
rest?.onBlur?.(event);
|
|
328
|
+
}
|
|
343
329
|
onNodeFocusEvent?.(event);
|
|
344
330
|
}
|
|
345
331
|
React.useEffect(() => {
|
|
@@ -379,6 +365,7 @@ const TreeNode = /*#__PURE__*/React__default["default"].forwardRef(({
|
|
|
379
365
|
setExpanded(isExpanded ?? false);
|
|
380
366
|
}
|
|
381
367
|
}, [children, depth, Icon, isExpanded, enableTreeviewControllable, setExpanded]);
|
|
368
|
+
const tabIndex = disabled ? undefined : rest.tabIndex ?? -1;
|
|
382
369
|
const treeNodeProps = {
|
|
383
370
|
...rest,
|
|
384
371
|
['aria-current']: !href ? isActive || undefined : isActive ? 'page' : undefined,
|
|
@@ -387,95 +374,56 @@ const TreeNode = /*#__PURE__*/React__default["default"].forwardRef(({
|
|
|
387
374
|
['aria-owns']: children ? `${id}-subtree` : undefined,
|
|
388
375
|
className: treeNodeClasses,
|
|
389
376
|
id,
|
|
390
|
-
onBlur: handleFocusEvent,
|
|
391
377
|
onClick: handleClick,
|
|
392
|
-
onFocus: handleFocusEvent,
|
|
393
378
|
onKeyDown: handleKeyDown,
|
|
394
|
-
role: 'treeitem'
|
|
379
|
+
role: 'treeitem',
|
|
380
|
+
tabIndex,
|
|
381
|
+
onFocus: handleFocusEvent,
|
|
382
|
+
onBlur: handleFocusEvent
|
|
395
383
|
};
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
} else {
|
|
410
|
-
return /*#__PURE__*/React__default["default"].createElement("li", _rollupPluginBabelHelpers["extends"]({}, treeNodeProps, {
|
|
411
|
-
ref: setRefs
|
|
412
|
-
}), /*#__PURE__*/React__default["default"].createElement("div", {
|
|
413
|
-
className: `${prefix}--tree-node__label`,
|
|
414
|
-
ref: currentNodeLabel
|
|
415
|
-
}, Icon && /*#__PURE__*/React__default["default"].createElement(Icon, {
|
|
416
|
-
className: `${prefix}--tree-node__icon`
|
|
417
|
-
}), renderLabelText()));
|
|
418
|
-
}
|
|
419
|
-
}
|
|
384
|
+
const nodeContent = /*#__PURE__*/React__default["default"].createElement("div", {
|
|
385
|
+
className: `${prefix}--tree-node__label`,
|
|
386
|
+
ref: currentNodeLabel
|
|
387
|
+
}, children && /*#__PURE__*/React__default["default"].createElement("span", {
|
|
388
|
+
className: `${prefix}--tree-parent-node__toggle`,
|
|
389
|
+
onClick: handleToggleClick
|
|
390
|
+
}, /*#__PURE__*/React__default["default"].createElement(iconsReact.CaretDown, {
|
|
391
|
+
className: toggleClasses
|
|
392
|
+
})), /*#__PURE__*/React__default["default"].createElement("span", {
|
|
393
|
+
className: `${prefix}--tree-node__label__details`
|
|
394
|
+
}, Icon && /*#__PURE__*/React__default["default"].createElement(Icon, {
|
|
395
|
+
className: `${prefix}--tree-node__icon`
|
|
396
|
+
}), renderLabelText()));
|
|
420
397
|
if (href) {
|
|
421
398
|
return /*#__PURE__*/React__default["default"].createElement("li", {
|
|
422
399
|
role: "none",
|
|
423
|
-
className: `${prefix}--tree-node-link-parent`
|
|
400
|
+
className: children ? `${prefix}--tree-node-link-parent` : ''
|
|
424
401
|
}, /*#__PURE__*/React__default["default"].createElement("a", _rollupPluginBabelHelpers["extends"]({}, treeNodeProps, {
|
|
425
402
|
"aria-expanded": !!expanded,
|
|
426
403
|
ref: setRefs,
|
|
427
404
|
href: !disabled ? href : undefined
|
|
428
|
-
}), /*#__PURE__*/React__default["default"].createElement("
|
|
429
|
-
className: `${prefix}--tree-node__label`,
|
|
430
|
-
ref: currentNodeLabel
|
|
431
|
-
}, /*#__PURE__*/React__default["default"].createElement("span", {
|
|
432
|
-
className: `${prefix}--tree-parent-node__toggle`
|
|
433
|
-
// @ts-ignore
|
|
434
|
-
,
|
|
435
|
-
disabled: disabled,
|
|
436
|
-
onClick: handleToggleClick
|
|
437
|
-
}, /*#__PURE__*/React__default["default"].createElement(iconsReact.CaretDown, {
|
|
438
|
-
className: toggleClasses
|
|
439
|
-
})), /*#__PURE__*/React__default["default"].createElement("span", {
|
|
440
|
-
className: `${prefix}--tree-node__label__details`,
|
|
441
|
-
ref: detailsWrapperRef
|
|
442
|
-
}, Icon && /*#__PURE__*/React__default["default"].createElement(Icon, {
|
|
443
|
-
className: `${prefix}--tree-node__icon`
|
|
444
|
-
}), renderLabelText()))), /*#__PURE__*/React__default["default"].createElement("ul", {
|
|
445
|
-
id: `${id}-subtree`,
|
|
446
|
-
role: "group",
|
|
447
|
-
className: cx__default["default"](`${prefix}--tree-node__children`, {
|
|
448
|
-
[`${prefix}--tree-node--hidden`]: !expanded
|
|
449
|
-
})
|
|
450
|
-
}, nodesWithProps));
|
|
451
|
-
} else {
|
|
452
|
-
return /*#__PURE__*/React__default["default"].createElement("li", _rollupPluginBabelHelpers["extends"]({}, treeNodeProps, {
|
|
453
|
-
"aria-expanded": !!expanded,
|
|
454
|
-
ref: setRefs
|
|
455
|
-
}), /*#__PURE__*/React__default["default"].createElement("div", {
|
|
456
|
-
className: `${prefix}--tree-node__label`,
|
|
457
|
-
ref: currentNodeLabel
|
|
458
|
-
}, /*#__PURE__*/React__default["default"].createElement("span", {
|
|
459
|
-
className: `${prefix}--tree-parent-node__toggle`
|
|
460
|
-
// @ts-ignore
|
|
461
|
-
,
|
|
462
|
-
disabled: disabled,
|
|
463
|
-
onClick: handleToggleClick
|
|
464
|
-
}, /*#__PURE__*/React__default["default"].createElement(iconsReact.CaretDown, {
|
|
465
|
-
className: toggleClasses
|
|
466
|
-
})), /*#__PURE__*/React__default["default"].createElement("span", {
|
|
467
|
-
className: `${prefix}--tree-node__label__details`,
|
|
468
|
-
ref: detailsWrapperRef
|
|
469
|
-
}, Icon && /*#__PURE__*/React__default["default"].createElement(Icon, {
|
|
470
|
-
className: `${prefix}--tree-node__icon`
|
|
471
|
-
}), renderLabelText())), /*#__PURE__*/React__default["default"].createElement("ul", {
|
|
405
|
+
}), nodeContent), children && /*#__PURE__*/React__default["default"].createElement("ul", {
|
|
472
406
|
id: `${id}-subtree`,
|
|
473
407
|
role: "group",
|
|
474
408
|
className: cx__default["default"](`${prefix}--tree-node__children`, {
|
|
475
409
|
[`${prefix}--tree-node--hidden`]: !expanded
|
|
476
410
|
})
|
|
477
|
-
},
|
|
411
|
+
}, /*#__PURE__*/React__default["default"].createElement(TreeContext.DepthContext.Provider, {
|
|
412
|
+
value: depth + 1
|
|
413
|
+
}, children)));
|
|
478
414
|
}
|
|
415
|
+
return /*#__PURE__*/React__default["default"].createElement("li", _rollupPluginBabelHelpers["extends"]({}, treeNodeProps, {
|
|
416
|
+
"aria-expanded": children ? !!expanded : undefined,
|
|
417
|
+
ref: setRefs
|
|
418
|
+
}), nodeContent, children && /*#__PURE__*/React__default["default"].createElement("ul", {
|
|
419
|
+
id: `${id}-subtree`,
|
|
420
|
+
role: "group",
|
|
421
|
+
className: cx__default["default"](`${prefix}--tree-node__children`, {
|
|
422
|
+
[`${prefix}--tree-node--hidden`]: !expanded
|
|
423
|
+
})
|
|
424
|
+
}, /*#__PURE__*/React__default["default"].createElement(TreeContext.DepthContext.Provider, {
|
|
425
|
+
value: depth + 1
|
|
426
|
+
}, children)));
|
|
479
427
|
});
|
|
480
428
|
TreeNode.propTypes = {
|
|
481
429
|
/**
|