@carbon/react 1.63.2 → 1.64.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/.playwright/INTERNAL_AVT_REPORT_DO_NOT_USE.json +1523 -1160
  2. package/es/components/{Slug → AILabel}/index.js +47 -35
  3. package/es/components/{AiSkeleton/AiSkeletonIcon.d.ts → AISkeleton/AISkeletonIcon.d.ts} +4 -4
  4. package/es/components/{AiSkeleton/AiSkeletonIcon.js → AISkeleton/AISkeletonIcon.js} +5 -5
  5. package/es/components/{AiSkeleton/AiSkeletonPlaceholder.d.ts → AISkeleton/AISkeletonPlaceholder.d.ts} +4 -4
  6. package/es/components/{AiSkeleton/AiSkeletonPlaceholder.js → AISkeleton/AISkeletonPlaceholder.js} +5 -5
  7. package/es/components/{AiSkeleton/AiSkeletonText.d.ts → AISkeleton/AISkeletonText.d.ts} +4 -4
  8. package/es/components/{AiSkeleton/AiSkeletonText.js → AISkeleton/AISkeletonText.js} +3 -3
  9. package/es/components/AISkeleton/index.d.ts +10 -0
  10. package/es/components/CheckboxGroup/CheckboxGroup.js +1 -1
  11. package/es/components/ComboBox/ComboBox.js +4 -4
  12. package/es/components/ComposedModal/ComposedModal.js +1 -1
  13. package/es/components/DataTable/DataTable.js +1 -1
  14. package/es/components/DatePickerInput/DatePickerInput.js +1 -1
  15. package/es/components/Dropdown/Dropdown.js +12 -6
  16. package/es/components/FluidMultiSelect/FluidMultiSelect.js +4 -2
  17. package/es/components/Menu/MenuItem.js +45 -63
  18. package/es/components/Modal/Modal.js +1 -1
  19. package/es/components/MultiSelect/FilterableMultiSelect.js +44 -23
  20. package/es/components/MultiSelect/MultiSelect.js +6 -4
  21. package/es/components/NumberInput/NumberInput.js +2 -2
  22. package/es/components/OverflowMenu/OverflowMenu.js +2 -1
  23. package/es/components/OverflowMenu/next/index.js +2 -1
  24. package/es/components/RadioButtonGroup/RadioButtonGroup.js +1 -1
  25. package/es/components/RadioTile/RadioTile.js +1 -1
  26. package/es/components/Select/Select.js +1 -1
  27. package/es/components/Tabs/Tabs.js +3 -3
  28. package/es/components/Tag/DismissibleTag.js +1 -1
  29. package/es/components/Tag/OperationalTag.js +1 -1
  30. package/es/components/Tag/SelectableTag.js +3 -1
  31. package/es/components/Tag/Tag.js +1 -1
  32. package/es/components/TextArea/TextArea.js +1 -1
  33. package/es/components/TextInput/PasswordInput.js +5 -0
  34. package/es/components/TextInput/TextInput.js +1 -1
  35. package/es/components/Tile/Tile.js +2 -2
  36. package/es/components/TreeView/TreeNode.d.ts +150 -0
  37. package/es/components/TreeView/TreeNode.js +22 -15
  38. package/es/components/TreeView/TreeView.d.ts +59 -0
  39. package/es/components/TreeView/TreeView.js +37 -23
  40. package/es/components/TreeView/index.d.ts +11 -0
  41. package/es/components/UIShell/SwitcherItem.d.ts +4 -0
  42. package/es/components/UIShell/SwitcherItem.js +7 -1
  43. package/es/index.d.ts +4 -2
  44. package/es/index.js +6 -6
  45. package/es/node_modules/@floating-ui/core/dist/floating-ui.core.mjs.js +143 -0
  46. package/es/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs.js +39 -0
  47. package/lib/components/{Slug → AILabel}/index.js +49 -37
  48. package/lib/components/{AiSkeleton/AiSkeletonIcon.d.ts → AISkeleton/AISkeletonIcon.d.ts} +4 -4
  49. package/lib/components/{AiSkeleton/AiSkeletonIcon.js → AISkeleton/AISkeletonIcon.js} +5 -5
  50. package/lib/components/{AiSkeleton/AiSkeletonPlaceholder.d.ts → AISkeleton/AISkeletonPlaceholder.d.ts} +4 -4
  51. package/lib/components/{AiSkeleton/AiSkeletonPlaceholder.js → AISkeleton/AISkeletonPlaceholder.js} +5 -5
  52. package/lib/components/{AiSkeleton/AiSkeletonText.d.ts → AISkeleton/AISkeletonText.d.ts} +4 -4
  53. package/lib/components/{AiSkeleton/AiSkeletonText.js → AISkeleton/AISkeletonText.js} +3 -3
  54. package/lib/components/AISkeleton/index.d.ts +10 -0
  55. package/lib/components/CheckboxGroup/CheckboxGroup.js +1 -1
  56. package/lib/components/ComboBox/ComboBox.js +4 -4
  57. package/lib/components/ComposedModal/ComposedModal.js +1 -1
  58. package/lib/components/DataTable/DataTable.js +2 -2
  59. package/lib/components/DatePickerInput/DatePickerInput.js +1 -1
  60. package/lib/components/Dropdown/Dropdown.js +12 -6
  61. package/lib/components/FluidMultiSelect/FluidMultiSelect.js +4 -2
  62. package/lib/components/Menu/MenuItem.js +44 -62
  63. package/lib/components/Modal/Modal.js +1 -1
  64. package/lib/components/MultiSelect/FilterableMultiSelect.js +43 -22
  65. package/lib/components/MultiSelect/MultiSelect.js +6 -4
  66. package/lib/components/NumberInput/NumberInput.js +2 -2
  67. package/lib/components/OverflowMenu/OverflowMenu.js +2 -1
  68. package/lib/components/OverflowMenu/next/index.js +2 -1
  69. package/lib/components/RadioButtonGroup/RadioButtonGroup.js +1 -1
  70. package/lib/components/RadioTile/RadioTile.js +1 -1
  71. package/lib/components/Select/Select.js +1 -1
  72. package/lib/components/Tabs/Tabs.js +2 -2
  73. package/lib/components/Tag/DismissibleTag.js +1 -1
  74. package/lib/components/Tag/OperationalTag.js +1 -1
  75. package/lib/components/Tag/SelectableTag.js +3 -1
  76. package/lib/components/Tag/Tag.js +1 -1
  77. package/lib/components/TextArea/TextArea.js +1 -1
  78. package/lib/components/TextInput/PasswordInput.js +5 -0
  79. package/lib/components/TextInput/TextInput.js +1 -1
  80. package/lib/components/Tile/Tile.js +2 -2
  81. package/lib/components/TreeView/TreeNode.d.ts +150 -0
  82. package/lib/components/TreeView/TreeNode.js +24 -17
  83. package/lib/components/TreeView/TreeView.d.ts +59 -0
  84. package/lib/components/TreeView/TreeView.js +39 -25
  85. package/lib/components/TreeView/index.d.ts +11 -0
  86. package/lib/components/UIShell/SwitcherItem.d.ts +4 -0
  87. package/lib/components/UIShell/SwitcherItem.js +7 -1
  88. package/lib/index.d.ts +4 -2
  89. package/lib/index.js +20 -14
  90. package/lib/node_modules/@floating-ui/core/dist/floating-ui.core.mjs.js +148 -0
  91. package/lib/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs.js +47 -0
  92. package/package.json +4 -4
  93. package/scss/components/ai-label/_ai-label.scss +9 -0
  94. package/scss/components/ai-label/_index.scss +9 -0
  95. package/es/components/AiSkeleton/index.d.ts +0 -10
  96. package/es/components/DataTable/tools/instanceId.js +0 -20
  97. package/lib/components/AiSkeleton/index.d.ts +0 -10
  98. package/lib/components/DataTable/tools/instanceId.js +0 -24
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Copyright IBM Corp. 2016, 2023
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import React, { ComponentType, FunctionComponent } from 'react';
8
+ export type TreeNodeProps = {
9
+ /**
10
+ * **Note:** this is controlled by the parent TreeView component, do not set manually.
11
+ * The ID of the active node in the tree
12
+ */
13
+ active?: string | number;
14
+ /**
15
+ * Specify the children of the TreeNode
16
+ */
17
+ children?: React.ReactNode;
18
+ /**
19
+ * Specify an optional className to be applied to the TreeNode
20
+ */
21
+ className?: string;
22
+ /**
23
+ * **[Experimental]** The default expansion state of the node.
24
+ * *This is only supported with the `enable-treeview-controllable` feature flag!*
25
+ */
26
+ defaultIsExpanded?: boolean;
27
+ /**
28
+ * **Note:** this is controlled by the parent TreeView component, do not set manually.
29
+ * TreeNode depth to determine spacing
30
+ */
31
+ depth?: number;
32
+ /**
33
+ * Specify if the TreeNode is disabled
34
+ */
35
+ disabled?: boolean;
36
+ /**
37
+ * Specify the TreeNode's ID. Must be unique in the DOM and is used for props.active and props.selected
38
+ */
39
+ id?: string;
40
+ /**
41
+ * Specify if the TreeNode is expanded (only applicable to parent nodes)
42
+ */
43
+ isExpanded?: boolean;
44
+ /**
45
+ * Rendered label for the TreeNode
46
+ */
47
+ label: React.ReactNode;
48
+ /**
49
+ * Callback function for when the node receives or loses focus
50
+ */
51
+ onNodeFocusEvent?: (event: React.FocusEvent<HTMLLIElement>) => void;
52
+ /**
53
+ * Callback function for when the node is selected
54
+ */
55
+ onSelect?: (event: React.MouseEvent, node?: TreeNodeProps) => void;
56
+ /**
57
+ * Callback function for when a parent node is expanded or collapsed
58
+ */
59
+ onToggle?: (event: React.MouseEvent, node?: TreeNodeProps) => void;
60
+ /**
61
+ * Callback function for when any node in the tree is selected
62
+ */
63
+ onTreeSelect?: (event: React.MouseEvent, node?: TreeNodeProps) => void;
64
+ /**
65
+ * Optional prop to allow each node to have an associated icon.
66
+ * Can be a React component class
67
+ */
68
+ renderIcon?: ComponentType | FunctionComponent;
69
+ /**
70
+ * **Note:** this is controlled by the parent TreeView component, do not set manually.
71
+ * Array containing all selected node IDs in the tree
72
+ */
73
+ selected?: Array<string | number>;
74
+ /**
75
+ * Specify the value of the TreeNode
76
+ */
77
+ value?: string;
78
+ } & Omit<React.LiHTMLAttributes<HTMLLIElement>, 'onSelect'>;
79
+ declare const TreeNode: React.ForwardRefExoticComponent<{
80
+ /**
81
+ * **Note:** this is controlled by the parent TreeView component, do not set manually.
82
+ * The ID of the active node in the tree
83
+ */
84
+ active?: string | number | undefined;
85
+ /**
86
+ * Specify the children of the TreeNode
87
+ */
88
+ children?: React.ReactNode;
89
+ /**
90
+ * Specify an optional className to be applied to the TreeNode
91
+ */
92
+ className?: string | undefined;
93
+ /**
94
+ * **[Experimental]** The default expansion state of the node.
95
+ * *This is only supported with the `enable-treeview-controllable` feature flag!*
96
+ */
97
+ defaultIsExpanded?: boolean | undefined;
98
+ /**
99
+ * **Note:** this is controlled by the parent TreeView component, do not set manually.
100
+ * TreeNode depth to determine spacing
101
+ */
102
+ depth?: number | undefined;
103
+ /**
104
+ * Specify if the TreeNode is disabled
105
+ */
106
+ disabled?: boolean | undefined;
107
+ /**
108
+ * Specify the TreeNode's ID. Must be unique in the DOM and is used for props.active and props.selected
109
+ */
110
+ id?: string | undefined;
111
+ /**
112
+ * Specify if the TreeNode is expanded (only applicable to parent nodes)
113
+ */
114
+ isExpanded?: boolean | undefined;
115
+ /**
116
+ * Rendered label for the TreeNode
117
+ */
118
+ label: React.ReactNode;
119
+ /**
120
+ * Callback function for when the node receives or loses focus
121
+ */
122
+ onNodeFocusEvent?: ((event: React.FocusEvent<HTMLLIElement>) => void) | undefined;
123
+ /**
124
+ * Callback function for when the node is selected
125
+ */
126
+ onSelect?: ((event: React.MouseEvent, node?: TreeNodeProps) => void) | undefined;
127
+ /**
128
+ * Callback function for when a parent node is expanded or collapsed
129
+ */
130
+ onToggle?: ((event: React.MouseEvent, node?: TreeNodeProps) => void) | undefined;
131
+ /**
132
+ * Callback function for when any node in the tree is selected
133
+ */
134
+ onTreeSelect?: ((event: React.MouseEvent, node?: TreeNodeProps) => void) | undefined;
135
+ /**
136
+ * Optional prop to allow each node to have an associated icon.
137
+ * Can be a React component class
138
+ */
139
+ renderIcon?: React.ComponentType<{}> | undefined;
140
+ /**
141
+ * **Note:** this is controlled by the parent TreeView component, do not set manually.
142
+ * Array containing all selected node IDs in the tree
143
+ */
144
+ selected?: (string | number)[] | undefined;
145
+ /**
146
+ * Specify the value of the TreeNode
147
+ */
148
+ value?: string | undefined;
149
+ } & Omit<React.LiHTMLAttributes<HTMLLIElement>, "onSelect"> & React.RefAttributes<HTMLLIElement>>;
150
+ export default TreeNode;
@@ -10,29 +10,29 @@
10
10
  Object.defineProperty(exports, '__esModule', { value: true });
11
11
 
12
12
  var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelpers.js');
13
- var React = require('react');
14
- var PropTypes = require('prop-types');
15
13
  var iconsReact = require('@carbon/icons-react');
16
14
  var cx = require('classnames');
17
- var uniqueId = require('../../tools/uniqueId.js');
18
- var usePrefix = require('../../internal/usePrefix.js');
15
+ var PropTypes = require('prop-types');
16
+ var React = require('react');
19
17
  var useControllableState = require('../../internal/useControllableState.js');
18
+ var usePrefix = require('../../internal/usePrefix.js');
19
+ var uniqueId = require('../../tools/uniqueId.js');
20
20
  var index = require('../FeatureFlags/index.js');
21
21
  var match = require('../../internal/keyboard/match.js');
22
22
  var keys = require('../../internal/keyboard/keys.js');
23
23
 
24
24
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
25
25
 
26
- var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
27
- var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
28
26
  var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
27
+ var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
28
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
29
29
 
30
30
  const TreeNode = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref) => {
31
31
  let {
32
32
  active,
33
33
  children,
34
34
  className,
35
- depth,
35
+ depth: propDepth,
36
36
  disabled,
37
37
  id: nodeId,
38
38
  isExpanded,
@@ -43,10 +43,13 @@ const TreeNode = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref) =
43
43
  onToggle,
44
44
  onTreeSelect,
45
45
  renderIcon: Icon,
46
- selected,
46
+ selected: propSelected,
47
47
  value,
48
48
  ...rest
49
49
  } = _ref;
50
+ // These are provided by the parent TreeView component
51
+ const depth = propDepth;
52
+ const selected = propSelected;
50
53
  const enableTreeviewControllable = index.useFeatureFlag('enable-treeview-controllable');
51
54
  const {
52
55
  current: id
@@ -151,7 +154,7 @@ const TreeNode = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref) =
151
154
  * When focus is on a leaf node or a closed parent node, move focus to
152
155
  * its parent node (unless its depth is level 1)
153
156
  */
154
- findParentTreeNode(currentNode.current.parentNode)?.focus();
157
+ findParentTreeNode(currentNode.current?.parentNode)?.focus();
155
158
  }
156
159
  }
157
160
  if (children && match.match(event, keys.ArrowRight)) {
@@ -160,7 +163,7 @@ const TreeNode = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref) =
160
163
  * When focus is on an expanded parent node, move focus to the first
161
164
  * child node
162
165
  */
163
- currentNode.current.lastChild.firstChild.focus();
166
+ (currentNode.current?.lastChild?.firstChild).focus();
164
167
  } else {
165
168
  if (!enableTreeviewControllable) {
166
169
  onToggle?.(event, {
@@ -227,8 +230,8 @@ const TreeNode = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref) =
227
230
  }, [children, depth, Icon, isExpanded, enableTreeviewControllable, setExpanded]);
228
231
  const treeNodeProps = {
229
232
  ...rest,
230
- ['aria-current']: isActive || null,
231
- ['aria-selected']: disabled ? null : isSelected,
233
+ ['aria-current']: isActive || undefined,
234
+ ['aria-selected']: disabled ? undefined : isSelected,
232
235
  ['aria-disabled']: disabled,
233
236
  className: treeNodeClasses,
234
237
  id,
@@ -236,8 +239,9 @@ const TreeNode = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref) =
236
239
  onClick: handleClick,
237
240
  onFocus: handleFocusEvent,
238
241
  onKeyDown: handleKeyDown,
239
- ref: currentNode,
240
- role: 'treeitem'
242
+ role: 'treeitem',
243
+ // @ts-ignore
244
+ ref: currentNode
241
245
  };
242
246
  if (!children) {
243
247
  return /*#__PURE__*/React__default["default"].createElement("li", treeNodeProps, /*#__PURE__*/React__default["default"].createElement("div", {
@@ -257,7 +261,9 @@ const TreeNode = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref) =
257
261
  className: `${prefix}--tree-node__label`,
258
262
  ref: currentNodeLabel
259
263
  }, /*#__PURE__*/React__default["default"].createElement("span", {
260
- className: `${prefix}--tree-parent-node__toggle`,
264
+ className: `${prefix}--tree-parent-node__toggle`
265
+ // @ts-ignore
266
+ ,
261
267
  disabled: disabled,
262
268
  onClick: handleToggleClick
263
269
  }, /*#__PURE__*/React__default["default"].createElement(iconsReact.CaretDown, {
@@ -332,11 +338,13 @@ TreeNode.propTypes = {
332
338
  * Optional prop to allow each node to have an associated icon.
333
339
  * Can be a React component class
334
340
  */
341
+ // @ts-ignore
335
342
  renderIcon: PropTypes__default["default"].oneOfType([PropTypes__default["default"].func, PropTypes__default["default"].object]),
336
343
  /**
337
344
  * **Note:** this is controlled by the parent TreeView component, do not set manually.
338
345
  * Array containing all selected node IDs in the tree
339
346
  */
347
+ // @ts-ignore
340
348
  selected: PropTypes__default["default"].arrayOf(PropTypes__default["default"].oneOfType([PropTypes__default["default"].string, PropTypes__default["default"].number])),
341
349
  /**
342
350
  * Specify the value of the TreeNode
@@ -344,6 +352,5 @@ TreeNode.propTypes = {
344
352
  value: PropTypes__default["default"].string
345
353
  };
346
354
  TreeNode.displayName = 'TreeNode';
347
- var TreeNode$1 = TreeNode;
348
355
 
349
- exports["default"] = TreeNode$1;
356
+ exports["default"] = TreeNode;
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Copyright IBM Corp. 2016, 2023
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import React from 'react';
8
+ import TreeNode from './TreeNode';
9
+ export type TreeViewProps = {
10
+ /**
11
+ * Mark the active node in the tree, represented by its ID
12
+ */
13
+ active?: string | number;
14
+ /**
15
+ * Specify the children of the TreeView
16
+ */
17
+ children?: React.ReactNode;
18
+ /**
19
+ * Specify an optional className to be applied to the TreeView
20
+ */
21
+ className?: string;
22
+ /**
23
+ * Specify whether or not the label should be hidden
24
+ */
25
+ hideLabel?: boolean;
26
+ /**
27
+ * Provide the label text that will be read by a screen reader
28
+ */
29
+ label: string;
30
+ /**
31
+ * **[Experimental]** Specify the selection mode of the tree.
32
+ * If `multiselect` is `false` then only one node can be selected at a time
33
+ */
34
+ multiselect?: boolean;
35
+ /**
36
+ * **[Experimental]** Callback function that is called when any node is activated.
37
+ * *This is only supported with the `enable-treeview-controllable` feature flag!*
38
+ */
39
+ onActivate?: (activated?: string | number) => void;
40
+ /**
41
+ * Callback function that is called when any node is selected
42
+ */
43
+ onSelect?: (selected: Array<string | number>, payload: any) => void;
44
+ /**
45
+ * Array representing all selected node IDs in the tree
46
+ */
47
+ selected?: Array<string | number>;
48
+ /**
49
+ * Specify the size of the tree from a list of available sizes.
50
+ */
51
+ size?: 'xs' | 'sm';
52
+ } & React.HTMLAttributes<HTMLUListElement>;
53
+ type TreeViewComponent = {
54
+ (props: TreeViewProps): JSX.Element;
55
+ propTypes?: any;
56
+ TreeNode: typeof TreeNode;
57
+ };
58
+ declare const TreeView: TreeViewComponent;
59
+ export default TreeView;
@@ -10,23 +10,24 @@
10
10
  Object.defineProperty(exports, '__esModule', { value: true });
11
11
 
12
12
  var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelpers.js');
13
- var React = require('react');
14
- var PropTypes = require('prop-types');
15
13
  var cx = require('classnames');
16
- var uniqueId = require('../../tools/uniqueId.js');
17
- var usePrefix = require('../../internal/usePrefix.js');
14
+ var PropTypes = require('prop-types');
15
+ var React = require('react');
18
16
  var useControllableState = require('../../internal/useControllableState.js');
17
+ var usePrefix = require('../../internal/usePrefix.js');
18
+ var uniqueId = require('../../tools/uniqueId.js');
19
19
  var index = require('../FeatureFlags/index.js');
20
+ var TreeNode = require('./TreeNode.js');
20
21
  var match = require('../../internal/keyboard/match.js');
21
22
  var keys = require('../../internal/keyboard/keys.js');
22
23
 
23
24
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
24
25
 
25
- var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
26
- var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
27
26
  var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
27
+ var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
28
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
28
29
 
29
- function TreeView(_ref) {
30
+ const TreeView = _ref => {
30
31
  let {
31
32
  active: prespecifiedActive,
32
33
  children,
@@ -46,6 +47,7 @@ function TreeView(_ref) {
46
47
  } = React.useRef(rest.id || uniqueId["default"]());
47
48
  const prefix = usePrefix.usePrefix();
48
49
  const treeClasses = cx__default["default"](className, `${prefix}--tree`, {
50
+ // @ts-ignore - will always be false according to prop types
49
51
  [`${prefix}--tree--${size}`]: size !== 'default'
50
52
  });
51
53
  const treeRootRef = React.useRef(null);
@@ -71,9 +73,7 @@ function TreeView(_ref) {
71
73
  }
72
74
  function handleTreeSelect(event) {
73
75
  let node = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
74
- const {
75
- id: nodeId
76
- } = node;
76
+ const nodeId = node.id;
77
77
  if (multiselect && (event.metaKey || event.ctrlKey)) {
78
78
  if (!selected.includes(nodeId)) {
79
79
  setSelected(selected.concat(nodeId));
@@ -117,14 +117,15 @@ function TreeView(_ref) {
117
117
  }
118
118
  }
119
119
  let focusTarget = false;
120
- const nodesWithProps = React__default["default"].Children.map(children, node => {
120
+ const nodesWithProps = React__default["default"].Children.map(children, _node => {
121
+ const node = _node;
121
122
  const sharedNodeProps = {
122
123
  active,
123
124
  depth: 0,
124
125
  onNodeFocusEvent: handleFocusEvent,
125
126
  onTreeSelect: handleTreeSelect,
126
127
  selected,
127
- tabIndex: !node.props.disabled && -1 || null
128
+ tabIndex: !node.props.disabled && -1 || undefined
128
129
  };
129
130
  if (!focusTarget && !node.props.disabled) {
130
131
  sharedNodeProps.tabIndex = 0;
@@ -136,40 +137,47 @@ function TreeView(_ref) {
136
137
  });
137
138
  function handleKeyDown(event) {
138
139
  event.stopPropagation();
139
- if (match.matches(event, [keys.ArrowUp, keys.ArrowDown, keys.Home, keys.End, {
140
+ if (match.matches(event, [keys.ArrowUp, keys.ArrowDown, keys.Home, keys.End,
141
+ // @ts-ignore - `matches` doesn't like the object syntax without missing properties
142
+ {
140
143
  code: 'KeyA'
141
144
  }])) {
142
145
  event.preventDefault();
143
146
  }
147
+ if (!treeWalker.current) {
148
+ return;
149
+ }
144
150
  treeWalker.current.currentNode = event.target;
145
- let nextFocusNode;
151
+ let nextFocusNode = null;
146
152
  if (match.match(event, keys.ArrowUp)) {
147
153
  nextFocusNode = treeWalker.current.previousNode();
148
154
  }
149
155
  if (match.match(event, keys.ArrowDown)) {
150
156
  nextFocusNode = treeWalker.current.nextNode();
151
157
  }
158
+ // @ts-ignore - `matches` doesn't like the object syntax without missing properties
152
159
  if (match.matches(event, [keys.Home, keys.End, {
153
160
  code: 'KeyA'
154
161
  }])) {
155
162
  const nodeIds = [];
156
163
  if (match.matches(event, [keys.Home, keys.End])) {
157
- if (multiselect && event.shiftKey && event.ctrlKey && !treeWalker.current.currentNode.getAttribute('aria-disabled')) {
164
+ if (multiselect && event.shiftKey && event.ctrlKey && treeWalker.current.currentNode instanceof Element && !treeWalker.current.currentNode.getAttribute('aria-disabled')) {
158
165
  nodeIds.push(treeWalker.current.currentNode?.id);
159
166
  }
160
167
  while (match.match(event, keys.Home) ? treeWalker.current.previousNode() : treeWalker.current.nextNode()) {
161
168
  nextFocusNode = treeWalker.current.currentNode;
162
- if (multiselect && event.shiftKey && event.ctrlKey && !nextFocusNode.getAttribute('aria-disabled')) {
169
+ if (multiselect && event.shiftKey && event.ctrlKey && nextFocusNode instanceof Element && !nextFocusNode.getAttribute('aria-disabled')) {
163
170
  nodeIds.push(nextFocusNode?.id);
164
171
  }
165
172
  }
166
173
  }
174
+ // @ts-ignore - `matches` doesn't like the object syntax without missing properties
167
175
  if (match.match(event, {
168
176
  code: 'KeyA'
169
177
  }) && event.ctrlKey) {
170
178
  treeWalker.current.currentNode = treeWalker.current.root;
171
179
  while (treeWalker.current.nextNode()) {
172
- if (!treeWalker.current.currentNode.getAttribute('aria-disabled')) {
180
+ if (treeWalker.current.currentNode instanceof Element && !treeWalker.current.currentNode.getAttribute('aria-disabled')) {
173
181
  nodeIds.push(treeWalker.current.currentNode?.id);
174
182
  }
175
183
  }
@@ -178,14 +186,19 @@ function TreeView(_ref) {
178
186
  }
179
187
  if (nextFocusNode && nextFocusNode !== event.target) {
180
188
  resetNodeTabIndices();
181
- nextFocusNode.tabIndex = 0;
182
- nextFocusNode.focus();
189
+ if (nextFocusNode instanceof HTMLElement) {
190
+ nextFocusNode.tabIndex = 0;
191
+ nextFocusNode.focus();
192
+ }
183
193
  }
184
194
  rest?.onKeyDown?.(event);
185
195
  }
186
196
  React.useEffect(() => {
187
197
  treeWalker.current = treeWalker.current ?? document.createTreeWalker(treeRootRef?.current, NodeFilter.SHOW_ELEMENT, {
188
198
  acceptNode: function (node) {
199
+ if (!(node instanceof Element)) {
200
+ return NodeFilter.FILTER_SKIP;
201
+ }
189
202
  if (node.classList.contains(`${prefix}--tree-node--disabled`)) {
190
203
  return NodeFilter.FILTER_REJECT;
191
204
  }
@@ -208,20 +221,20 @@ function TreeView(_ref) {
208
221
  }, []);
209
222
  useActiveAndSelectedOnMount();
210
223
  const labelId = `${treeId}__label`;
211
- const TreeLabel = () => !hideLabel && /*#__PURE__*/React__default["default"].createElement("label", {
224
+ const TreeLabel = () => !hideLabel ? /*#__PURE__*/React__default["default"].createElement("label", {
212
225
  id: labelId,
213
226
  className: `${prefix}--label`
214
- }, label);
227
+ }, label) : null;
215
228
  return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(TreeLabel, null), /*#__PURE__*/React__default["default"].createElement("ul", _rollupPluginBabelHelpers["extends"]({}, rest, {
216
- "aria-label": hideLabel ? label : null,
217
- "aria-labelledby": !hideLabel ? labelId : null,
218
- "aria-multiselectable": multiselect || null,
229
+ "aria-label": hideLabel ? label : undefined,
230
+ "aria-labelledby": !hideLabel ? labelId : undefined,
231
+ "aria-multiselectable": multiselect || undefined,
219
232
  className: treeClasses,
220
233
  onKeyDown: handleKeyDown,
221
234
  ref: treeRootRef,
222
235
  role: "tree"
223
236
  }), nodesWithProps));
224
- }
237
+ };
225
238
  TreeView.propTypes = {
226
239
  /**
227
240
  * Mark the active node in the tree, represented by its ID
@@ -266,5 +279,6 @@ TreeView.propTypes = {
266
279
  */
267
280
  size: PropTypes__default["default"].oneOf(['xs', 'sm'])
268
281
  };
282
+ TreeView.TreeNode = TreeNode["default"];
269
283
 
270
284
  exports["default"] = TreeView;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Copyright IBM Corp. 2016, 2023
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import TreeNode, { TreeNodeProps } from './TreeNode';
8
+ import TreeView, { TreeViewProps } from './TreeView';
9
+ export { TreeNode, TreeView };
10
+ export type { TreeViewProps, TreeNodeProps };
11
+ export default TreeView;
@@ -47,6 +47,10 @@ interface BaseSwitcherItemProps {
47
47
  * Specify where to open the link.
48
48
  */
49
49
  target?: HTMLAttributeAnchorTarget;
50
+ /**
51
+ * The rel property for the link.
52
+ */
53
+ rel?: string;
50
54
  }
51
55
  interface SwitcherItemWithAriaLabel extends BaseSwitcherItemProps {
52
56
  'aria-label': string;
@@ -39,6 +39,7 @@ const SwitcherItem = /*#__PURE__*/React.forwardRef(function SwitcherItem(props,
39
39
  onKeyDown = () => {},
40
40
  href,
41
41
  target,
42
+ rel,
42
43
  ...rest
43
44
  } = props;
44
45
  const prefix = usePrefix.usePrefix();
@@ -77,6 +78,7 @@ const SwitcherItem = /*#__PURE__*/React.forwardRef(function SwitcherItem(props,
77
78
  },
78
79
  href: href,
79
80
  target: target,
81
+ rel: rel,
80
82
  ref: forwardRef
81
83
  }, rest, {
82
84
  className: linkClassName,
@@ -121,7 +123,11 @@ SwitcherItem.propTypes = {
121
123
  /**
122
124
  * Specify where to open the link.
123
125
  */
124
- target: PropTypes__default["default"].string
126
+ target: PropTypes__default["default"].string,
127
+ /**
128
+ * The rel property for the link.
129
+ */
130
+ rel: PropTypes__default["default"].string
125
131
  };
126
132
 
127
133
  exports["default"] = SwitcherItem;
package/lib/index.d.ts CHANGED
@@ -116,9 +116,11 @@ export { OverflowMenuV2 as unstable_OverflowMenuV2 } from './components/Overflow
116
116
  export { PageSelector as unstable_PageSelector, Pagination as unstable_Pagination, } from './components/Pagination/experimental';
117
117
  export * from './components/Popover';
118
118
  export * from './components/ProgressBar';
119
- export { Slug as unstable__Slug, SlugContent as unstable__SlugContent, SlugActions as unstable__SlugActions, } from './components/Slug';
119
+ export { AILabel, AILabelContent, AILabelActions } from './components/AILabel';
120
+ export { AILabel as unstable__Slug, AILabelContent as unstable__SlugContent, AILabelActions as unstable__SlugActions, } from './components/AILabel';
120
121
  export { ChatButton as unstable__ChatButton, ChatButtonSkeleton as unstable__ChatButtonSkeleton, } from './components/ChatButton';
121
- export { AiSkeletonText as unstable__AiSkeletonText, AiSkeletonIcon as unstable__AiSkeletonIcon, AiSkeletonPlaceholder as unstable__AiSkeletonPlaceholder, } from './components/AiSkeleton';
122
+ export { AISkeletonText, AISkeletonIcon, AISkeletonPlaceholder, } from './components/AISkeleton';
123
+ export { AISkeletonText as unstable__AiSkeletonText, AISkeletonIcon as unstable__AiSkeletonIcon, AISkeletonPlaceholder as unstable__AiSkeletonPlaceholder, } from './components/AISkeleton';
122
124
  export * from './components/Stack';
123
125
  export * from './components/Tooltip';
124
126
  export { Text as unstable_Text, TextDirection as unstable_TextDirection, } from './components/Text';
package/lib/index.js CHANGED
@@ -130,6 +130,8 @@ var Toggle = require('./components/Toggle/Toggle.js');
130
130
  var Toggle_Skeleton = require('./components/Toggle/Toggle.Skeleton.js');
131
131
  var ToggleSmall_Skeleton = require('./components/ToggleSmall/ToggleSmall.Skeleton.js');
132
132
  var index$b = require('./components/Toggletip/index.js');
133
+ var TreeNode = require('./components/TreeView/TreeNode.js');
134
+ var TreeView = require('./components/TreeView/TreeView.js');
133
135
  var Content = require('./components/UIShell/Content.js');
134
136
  var Header = require('./components/UIShell/Header.js');
135
137
  var HeaderContainer = require('./components/UIShell/HeaderContainer.js');
@@ -168,10 +170,10 @@ var index$1 = require('./components/Layout/index.js');
168
170
  var index$2 = require('./components/OverflowMenuV2/index.js');
169
171
  var index$f = require('./components/Popover/index.js');
170
172
  var ProgressBar = require('./components/ProgressBar/ProgressBar.js');
171
- var index$3 = require('./components/Slug/index.js');
172
- var AiSkeletonPlaceholder = require('./components/AiSkeleton/AiSkeletonPlaceholder.js');
173
- var AiSkeletonIcon = require('./components/AiSkeleton/AiSkeletonIcon.js');
174
- var AiSkeletonText = require('./components/AiSkeleton/AiSkeletonText.js');
173
+ var index$3 = require('./components/AILabel/index.js');
174
+ var AISkeletonPlaceholder = require('./components/AISkeleton/AISkeletonPlaceholder.js');
175
+ var AISkeletonIcon = require('./components/AISkeleton/AISkeletonIcon.js');
176
+ var AISkeletonText = require('./components/AISkeleton/AISkeletonText.js');
175
177
  var DefinitionTooltip = require('./components/Tooltip/DefinitionTooltip.js');
176
178
  var Tooltip = require('./components/Tooltip/Tooltip.js');
177
179
  require('./components/Text/index.js');
@@ -192,7 +194,6 @@ var useContextMenu = require('./components/ContextMenu/useContextMenu.js');
192
194
  var Slider_Skeleton = require('./components/Slider/Slider.Skeleton.js');
193
195
  var TextInput_Skeleton = require('./components/TextInput/TextInput.Skeleton.js');
194
196
  var TextInput = require('./components/TextInput/TextInput.js');
195
- var TreeView = require('./components/TreeView/TreeView.js');
196
197
  var FluidComboBox = require('./components/FluidComboBox/FluidComboBox.js');
197
198
  var FluidComboBox_Skeleton = require('./components/FluidComboBox/FluidComboBox.Skeleton.js');
198
199
  var FluidDatePicker = require('./components/FluidDatePicker/FluidDatePicker.js');
@@ -238,7 +239,6 @@ var TableToolbarSearch = require('./components/DataTable/TableToolbarSearch.js')
238
239
  var TableToolbarMenu = require('./components/DataTable/TableToolbarMenu.js');
239
240
  var FilterableMultiSelect = require('./components/MultiSelect/FilterableMultiSelect.js');
240
241
  var MultiSelect = require('./components/MultiSelect/MultiSelect.js');
241
- var TreeNode = require('./components/TreeView/TreeNode.js');
242
242
 
243
243
 
244
244
 
@@ -394,6 +394,8 @@ exports.ToggletipActions = index$b.ToggletipActions;
394
394
  exports.ToggletipButton = index$b.ToggletipButton;
395
395
  exports.ToggletipContent = index$b.ToggletipContent;
396
396
  exports.ToggletipLabel = index$b.ToggletipLabel;
397
+ exports.TreeNode = TreeNode["default"];
398
+ exports.TreeView = TreeView["default"];
397
399
  exports.Content = Content["default"];
398
400
  exports.Header = Header["default"];
399
401
  exports.HeaderContainer = HeaderContainer["default"];
@@ -438,12 +440,18 @@ exports.unstable_OverflowMenuV2 = index$2.OverflowMenuV2;
438
440
  exports.Popover = index$f.Popover;
439
441
  exports.PopoverContent = index$f.PopoverContent;
440
442
  exports.ProgressBar = ProgressBar["default"];
441
- exports.unstable__Slug = index$3.Slug;
442
- exports.unstable__SlugActions = index$3.SlugActions;
443
- exports.unstable__SlugContent = index$3.SlugContent;
444
- exports.unstable__AiSkeletonPlaceholder = AiSkeletonPlaceholder["default"];
445
- exports.unstable__AiSkeletonIcon = AiSkeletonIcon["default"];
446
- exports.unstable__AiSkeletonText = AiSkeletonText["default"];
443
+ exports.AILabel = index$3.AILabel;
444
+ exports.AILabelActions = index$3.AILabelActions;
445
+ exports.AILabelContent = index$3.AILabelContent;
446
+ exports.unstable__Slug = index$3.AILabel;
447
+ exports.unstable__SlugActions = index$3.AILabelActions;
448
+ exports.unstable__SlugContent = index$3.AILabelContent;
449
+ exports.AISkeletonPlaceholder = AISkeletonPlaceholder["default"];
450
+ exports.unstable__AiSkeletonPlaceholder = AISkeletonPlaceholder["default"];
451
+ exports.AISkeletonIcon = AISkeletonIcon["default"];
452
+ exports.unstable__AiSkeletonIcon = AISkeletonIcon["default"];
453
+ exports.AISkeletonText = AISkeletonText["default"];
454
+ exports.unstable__AiSkeletonText = AISkeletonText["default"];
447
455
  exports.DefinitionTooltip = DefinitionTooltip.DefinitionTooltip;
448
456
  exports.Tooltip = Tooltip.Tooltip;
449
457
  exports.GlobalTheme = index$g.GlobalTheme;
@@ -468,7 +476,6 @@ exports.useContextMenu = useContextMenu["default"];
468
476
  exports.SliderSkeleton = Slider_Skeleton["default"];
469
477
  exports.TextInputSkeleton = TextInput_Skeleton["default"];
470
478
  exports.TextInput = TextInput["default"];
471
- exports.TreeView = TreeView["default"];
472
479
  exports.unstable__FluidComboBox = FluidComboBox["default"];
473
480
  exports.unstable__FluidComboBoxSkeleton = FluidComboBox_Skeleton["default"];
474
481
  exports.unstable__FluidDatePicker = FluidDatePicker["default"];
@@ -514,4 +521,3 @@ exports.TableToolbarSearch = TableToolbarSearch["default"];
514
521
  exports.TableToolbarMenu = TableToolbarMenu["default"];
515
522
  exports.FilterableMultiSelect = FilterableMultiSelect["default"];
516
523
  exports.MultiSelect = MultiSelect["default"];
517
- exports.TreeNode = TreeNode["default"];