@carbon/react 1.76.0 → 1.77.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 (188) hide show
  1. package/.playwright/INTERNAL_AVT_REPORT_DO_NOT_USE.json +810 -775
  2. package/es/components/Button/Button.d.ts +9 -1
  3. package/es/components/Button/Button.js +8 -0
  4. package/es/components/CodeSnippet/CodeSnippet.d.ts +2 -2
  5. package/es/components/ComboBox/ComboBox.d.ts +2 -2
  6. package/es/components/ComboBox/ComboBox.js +34 -12
  7. package/es/components/ComboButton/index.js +1 -2
  8. package/es/components/ComposedModal/ComposedModal.js +1 -1
  9. package/es/components/ContentSwitcher/index.d.ts +0 -1
  10. package/es/components/ContextMenu/useContextMenu.d.ts +0 -1
  11. package/es/components/Copy/Copy.js +1 -1
  12. package/es/components/DataTable/DataTable.d.ts +12 -20
  13. package/es/components/DataTable/DataTable.js +1 -9
  14. package/es/components/DataTable/Table.js +1 -1
  15. package/es/components/DataTable/TableActionList.d.ts +1 -1
  16. package/es/components/DataTable/TableBody.js +1 -1
  17. package/es/components/DataTable/TableContext.d.ts +0 -1
  18. package/es/components/DataTable/TableHead.d.ts +1 -1
  19. package/es/components/DataTable/TableToolbarContent.d.ts +1 -1
  20. package/es/components/DatePicker/plugins/fixEventsPlugin.js +2 -2
  21. package/es/components/DatePickerInput/DatePickerInput.js +1 -1
  22. package/es/components/Dropdown/Dropdown.js +1 -2
  23. package/es/components/FluidForm/FormContext.d.ts +0 -1
  24. package/es/components/Grid/CSSGrid.js +1 -1
  25. package/es/components/Grid/Grid.js +1 -1
  26. package/es/components/Grid/GridTypes.d.ts +0 -1
  27. package/es/components/Heading/index.d.ts +1 -1
  28. package/es/components/IconButton/index.d.ts +17 -1
  29. package/es/components/IconButton/index.js +20 -1
  30. package/es/components/InlineCheckbox/InlineCheckbox.js +1 -1
  31. package/es/components/InlineLoading/InlineLoading.d.ts +1 -1
  32. package/es/components/InlineLoading/InlineLoading.js +21 -7
  33. package/es/components/Menu/Menu.js +2 -2
  34. package/es/components/Menu/MenuContext.d.ts +1 -1
  35. package/es/components/MenuButton/index.d.ts +1 -1
  36. package/es/components/MenuButton/index.js +1 -2
  37. package/es/components/Modal/Modal.js +1 -1
  38. package/es/components/Modal/next/index.d.ts +175 -0
  39. package/es/components/MultiSelect/FilterableMultiSelect.d.ts +2 -2
  40. package/es/components/MultiSelect/FilterableMultiSelect.js +12 -5
  41. package/es/components/MultiSelect/MultiSelect.d.ts +1 -1
  42. package/es/components/MultiSelect/MultiSelect.js +1 -2
  43. package/es/components/Pagination/Pagination.js +2 -2
  44. package/es/components/Popover/index.js +2 -3
  45. package/es/components/PrimaryButton/PrimaryButton.d.ts +1 -1
  46. package/es/components/RadioTile/RadioTile.d.ts +1 -1
  47. package/es/components/SecondaryButton/SecondaryButton.d.ts +1 -1
  48. package/es/components/Slider/Slider.d.ts +1 -1
  49. package/es/components/Slider/Slider.js +1 -1
  50. package/es/components/Slider/index.d.ts +0 -1
  51. package/es/components/Tabs/Tabs.d.ts +3 -3
  52. package/es/components/Tabs/Tabs.js +4 -4
  53. package/es/components/Tag/DismissibleTag.d.ts +2 -2
  54. package/es/components/Tag/OperationalTag.d.ts +1 -1
  55. package/es/components/Tag/SelectableTag.d.ts +2 -2
  56. package/es/components/Text/index.d.ts +2 -2
  57. package/es/components/TextInput/PasswordInput.d.ts +1 -1
  58. package/es/components/Theme/index.d.ts +1 -1
  59. package/es/components/Tile/Tile.d.ts +1 -1
  60. package/es/components/Tile/Tile.js +1 -1
  61. package/es/components/Toggletip/index.d.ts +3 -3
  62. package/es/components/Toggletip/index.js +5 -4
  63. package/es/components/Tooltip/Tooltip.d.ts +17 -1
  64. package/es/components/Tooltip/Tooltip.js +12 -2
  65. package/es/components/TreeView/TreeNode.d.ts +27 -19
  66. package/es/components/TreeView/TreeNode.js +100 -31
  67. package/es/components/TreeView/TreeView.js +1 -1
  68. package/es/components/UIShell/Content.d.ts +9 -9
  69. package/es/components/UIShell/HeaderGlobalBar.d.ts +1 -1
  70. package/es/components/UIShell/HeaderMenu.d.ts +69 -25
  71. package/es/components/UIShell/HeaderMenuButton.d.ts +69 -27
  72. package/es/components/UIShell/HeaderMenuItem.d.ts +4 -3
  73. package/es/components/UIShell/HeaderMenuItem.js +1 -1
  74. package/es/components/UIShell/HeaderName.js +1 -1
  75. package/es/components/UIShell/HeaderNavigation.d.ts +69 -25
  76. package/es/components/UIShell/Link.d.ts +14 -11
  77. package/es/components/UIShell/Link.js +5 -6
  78. package/es/components/UIShell/SideNav.js +3 -3
  79. package/es/components/UIShell/SideNavLink.js +1 -1
  80. package/es/components/UIShell/SideNavMenuItem.d.ts +51 -3
  81. package/es/components/UIShell/SideNavMenuItem.js +6 -6
  82. package/es/components/UIShell/SwitcherItem.d.ts +2 -2
  83. package/es/components/UIShell/SwitcherItem.js +1 -1
  84. package/es/internal/PolymorphicProps.d.ts +0 -1
  85. package/es/internal/Selection.d.ts +38 -0
  86. package/es/internal/Selection.js +26 -113
  87. package/es/node_modules/es-toolkit/dist/compat/function/debounce.mjs.js +55 -0
  88. package/es/node_modules/es-toolkit/dist/compat/function/throttle.mjs.js +23 -0
  89. package/es/node_modules/es-toolkit/dist/function/debounce.mjs.js +70 -0
  90. package/es/tools/wrapComponent.d.ts +1 -1
  91. package/lib/components/Button/Button.d.ts +9 -1
  92. package/lib/components/Button/Button.js +8 -0
  93. package/lib/components/CodeSnippet/CodeSnippet.d.ts +2 -2
  94. package/lib/components/ComboBox/ComboBox.d.ts +2 -2
  95. package/lib/components/ComboBox/ComboBox.js +34 -12
  96. package/lib/components/ComboButton/index.js +1 -2
  97. package/lib/components/ComposedModal/ComposedModal.js +2 -2
  98. package/lib/components/ContentSwitcher/index.d.ts +0 -1
  99. package/lib/components/ContextMenu/useContextMenu.d.ts +0 -1
  100. package/lib/components/Copy/Copy.js +2 -2
  101. package/lib/components/DataTable/DataTable.d.ts +12 -20
  102. package/lib/components/DataTable/DataTable.js +1 -9
  103. package/lib/components/DataTable/Table.js +3 -3
  104. package/lib/components/DataTable/TableActionList.d.ts +1 -1
  105. package/lib/components/DataTable/TableBody.js +1 -1
  106. package/lib/components/DataTable/TableContext.d.ts +0 -1
  107. package/lib/components/DataTable/TableHead.d.ts +1 -1
  108. package/lib/components/DataTable/TableToolbarContent.d.ts +1 -1
  109. package/lib/components/DatePicker/plugins/fixEventsPlugin.js +2 -2
  110. package/lib/components/DatePickerInput/DatePickerInput.js +1 -1
  111. package/lib/components/Dropdown/Dropdown.js +1 -2
  112. package/lib/components/FluidForm/FormContext.d.ts +0 -1
  113. package/lib/components/Grid/CSSGrid.js +1 -1
  114. package/lib/components/Grid/Grid.js +1 -1
  115. package/lib/components/Grid/GridTypes.d.ts +0 -1
  116. package/lib/components/Heading/index.d.ts +1 -1
  117. package/lib/components/IconButton/index.d.ts +17 -1
  118. package/lib/components/IconButton/index.js +20 -1
  119. package/lib/components/InlineCheckbox/InlineCheckbox.js +1 -1
  120. package/lib/components/InlineLoading/InlineLoading.d.ts +1 -1
  121. package/lib/components/InlineLoading/InlineLoading.js +20 -6
  122. package/lib/components/Menu/Menu.js +2 -2
  123. package/lib/components/Menu/MenuContext.d.ts +1 -1
  124. package/lib/components/MenuButton/index.d.ts +1 -1
  125. package/lib/components/MenuButton/index.js +1 -2
  126. package/lib/components/Modal/Modal.js +2 -2
  127. package/lib/components/Modal/next/index.d.ts +175 -0
  128. package/lib/components/MultiSelect/FilterableMultiSelect.d.ts +2 -2
  129. package/lib/components/MultiSelect/FilterableMultiSelect.js +11 -4
  130. package/lib/components/MultiSelect/MultiSelect.d.ts +1 -1
  131. package/lib/components/MultiSelect/MultiSelect.js +1 -2
  132. package/lib/components/Pagination/Pagination.js +3 -2
  133. package/lib/components/Popover/index.js +2 -3
  134. package/lib/components/PrimaryButton/PrimaryButton.d.ts +1 -1
  135. package/lib/components/RadioTile/RadioTile.d.ts +1 -1
  136. package/lib/components/SecondaryButton/SecondaryButton.d.ts +1 -1
  137. package/lib/components/Slider/Slider.d.ts +1 -1
  138. package/lib/components/Slider/Slider.js +2 -2
  139. package/lib/components/Slider/index.d.ts +0 -1
  140. package/lib/components/Tabs/Tabs.d.ts +3 -3
  141. package/lib/components/Tabs/Tabs.js +6 -6
  142. package/lib/components/Tag/DismissibleTag.d.ts +2 -2
  143. package/lib/components/Tag/OperationalTag.d.ts +1 -1
  144. package/lib/components/Tag/SelectableTag.d.ts +2 -2
  145. package/lib/components/Text/index.d.ts +2 -2
  146. package/lib/components/TextInput/PasswordInput.d.ts +1 -1
  147. package/lib/components/Theme/index.d.ts +1 -1
  148. package/lib/components/Tile/Tile.d.ts +1 -1
  149. package/lib/components/Tile/Tile.js +1 -1
  150. package/lib/components/Toggletip/index.d.ts +3 -3
  151. package/lib/components/Toggletip/index.js +5 -4
  152. package/lib/components/Tooltip/Tooltip.d.ts +17 -1
  153. package/lib/components/Tooltip/Tooltip.js +12 -2
  154. package/lib/components/TreeView/TreeNode.d.ts +27 -19
  155. package/lib/components/TreeView/TreeNode.js +100 -31
  156. package/lib/components/TreeView/TreeView.js +1 -1
  157. package/lib/components/UIShell/Content.d.ts +9 -9
  158. package/lib/components/UIShell/HeaderGlobalBar.d.ts +1 -1
  159. package/lib/components/UIShell/HeaderMenu.d.ts +69 -25
  160. package/lib/components/UIShell/HeaderMenuButton.d.ts +69 -27
  161. package/lib/components/UIShell/HeaderMenuItem.d.ts +4 -3
  162. package/lib/components/UIShell/HeaderMenuItem.js +1 -1
  163. package/lib/components/UIShell/HeaderName.js +1 -1
  164. package/lib/components/UIShell/HeaderNavigation.d.ts +69 -25
  165. package/lib/components/UIShell/Link.d.ts +14 -11
  166. package/lib/components/UIShell/Link.js +4 -4
  167. package/lib/components/UIShell/SideNav.js +3 -3
  168. package/lib/components/UIShell/SideNavLink.js +1 -1
  169. package/lib/components/UIShell/SideNavMenuItem.d.ts +51 -3
  170. package/lib/components/UIShell/SideNavMenuItem.js +6 -6
  171. package/lib/components/UIShell/SwitcherItem.d.ts +2 -2
  172. package/lib/components/UIShell/SwitcherItem.js +1 -1
  173. package/lib/internal/PolymorphicProps.d.ts +0 -1
  174. package/lib/internal/Selection.d.ts +38 -0
  175. package/lib/internal/Selection.js +24 -114
  176. package/lib/node_modules/es-toolkit/dist/compat/function/debounce.mjs.js +59 -0
  177. package/lib/node_modules/es-toolkit/dist/compat/function/throttle.mjs.js +27 -0
  178. package/lib/node_modules/es-toolkit/dist/function/debounce.mjs.js +74 -0
  179. package/lib/tools/wrapComponent.d.ts +1 -1
  180. package/package.json +10 -9
  181. package/es/node_modules/@floating-ui/core/dist/floating-ui.core.mjs.js +0 -896
  182. package/es/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs.js +0 -76
  183. package/es/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs.js +0 -139
  184. package/es/tools/array.js +0 -29
  185. package/lib/node_modules/@floating-ui/core/dist/floating-ui.core.mjs.js +0 -909
  186. package/lib/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs.js +0 -80
  187. package/lib/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs.js +0 -163
  188. package/lib/tools/array.js +0 -33
@@ -40,10 +40,18 @@ interface TooltipBaseProps {
40
40
  * description will not be used
41
41
  */
42
42
  description?: React.ReactNode;
43
+ /**
44
+ * Specify whether a drop shadow should be rendered
45
+ */
46
+ dropShadow?: boolean;
43
47
  /**
44
48
  * Specify the duration in milliseconds to delay before displaying the tooltip
45
49
  */
46
50
  enterDelayMs?: number;
51
+ /**
52
+ * Render the component using the high-contrast theme
53
+ */
54
+ highContrast?: boolean;
47
55
  /**
48
56
  * Provide the label to be rendered inside of the Tooltip. The label will use
49
57
  * `aria-labelledby` and will fully describe the child node that is provided.
@@ -60,7 +68,7 @@ interface TooltipBaseProps {
60
68
  leaveDelayMs?: number;
61
69
  }
62
70
  export type TooltipProps<T extends React.ElementType> = PolymorphicProps<T, TooltipBaseProps>;
63
- declare function Tooltip<T extends React.ElementType>({ align, className: customClassName, children, label, description, enterDelayMs, leaveDelayMs, defaultOpen, closeOnActivation, ...rest }: TooltipProps<T>): import("react/jsx-runtime").JSX.Element;
71
+ declare function Tooltip<T extends React.ElementType>({ align, className: customClassName, children, label, description, enterDelayMs, leaveDelayMs, defaultOpen, closeOnActivation, dropShadow, highContrast, ...rest }: TooltipProps<T>): import("react/jsx-runtime").JSX.Element;
64
72
  declare namespace Tooltip {
65
73
  var propTypes: {
66
74
  /**
@@ -94,10 +102,18 @@ declare namespace Tooltip {
94
102
  * description will not be used
95
103
  */
96
104
  description: PropTypes.Requireable<PropTypes.ReactNodeLike>;
105
+ /**
106
+ * Specify whether a drop shadow should be rendered
107
+ */
108
+ dropShadow: PropTypes.Requireable<boolean>;
97
109
  /**
98
110
  * Specify the duration in milliseconds to delay before displaying the tooltip
99
111
  */
100
112
  enterDelayMs: PropTypes.Requireable<number>;
113
+ /**
114
+ * Render the component using the high-contrast theme
115
+ */
116
+ highContrast: PropTypes.Requireable<boolean>;
101
117
  /**
102
118
  * Provide the label to be rendered inside of the Tooltip. The label will use
103
119
  * `aria-labelledby` and will fully describe the child node that is provided.
@@ -43,6 +43,8 @@ function Tooltip(_ref) {
43
43
  leaveDelayMs = 300,
44
44
  defaultOpen = false,
45
45
  closeOnActivation = false,
46
+ dropShadow = false,
47
+ highContrast = true,
46
48
  ...rest
47
49
  } = _ref;
48
50
  const tooltipRef = React.useRef(null);
@@ -164,8 +166,8 @@ function Tooltip(_ref) {
164
166
  React__default["default"].createElement(index.Popover, _rollupPluginBabelHelpers["extends"]({}, rest, {
165
167
  align: align,
166
168
  className: cx__default["default"](`${prefix}--tooltip`, customClassName),
167
- dropShadow: false,
168
- highContrast: true,
169
+ dropShadow: dropShadow,
170
+ highContrast: highContrast,
169
171
  onKeyDown: onKeyDown,
170
172
  onMouseLeave: onMouseLeave,
171
173
  open: open
@@ -236,10 +238,18 @@ Tooltip.propTypes = {
236
238
  * description will not be used
237
239
  */
238
240
  description: PropTypes__default["default"].node,
241
+ /**
242
+ * Specify whether a drop shadow should be rendered
243
+ */
244
+ dropShadow: PropTypes__default["default"].bool,
239
245
  /**
240
246
  * Specify the duration in milliseconds to delay before displaying the tooltip
241
247
  */
242
248
  enterDelayMs: PropTypes__default["default"].number,
249
+ /**
250
+ * Render the component using the high-contrast theme
251
+ */
252
+ highContrast: PropTypes__default["default"].bool,
243
253
  /**
244
254
  * Provide the label to be rendered inside of the Tooltip. The label will use
245
255
  * `aria-labelledby` and will fully describe the child node that is provided.
@@ -34,7 +34,7 @@ export type TreeNodeProps = {
34
34
  */
35
35
  disabled?: boolean;
36
36
  /**
37
- * Specify the TreeNode's ID. Must be unique in the DOM and is used for props.active and props.selected
37
+ * Specify the TreeNode's ID. Must be unique in the DOM and is used for props.active, props.selected and aria-owns
38
38
  */
39
39
  id?: string;
40
40
  /**
@@ -48,7 +48,7 @@ export type TreeNodeProps = {
48
48
  /**
49
49
  * Callback function for when the node receives or loses focus
50
50
  */
51
- onNodeFocusEvent?: (event: React.FocusEvent<HTMLLIElement>) => void;
51
+ onNodeFocusEvent?: (event: React.FocusEvent<HTMLElement>) => void;
52
52
  /**
53
53
  * Callback function for when the node is selected
54
54
  */
@@ -75,13 +75,17 @@ export type TreeNodeProps = {
75
75
  * Specify the value of the TreeNode
76
76
  */
77
77
  value?: string;
78
- } & Omit<React.LiHTMLAttributes<HTMLLIElement>, 'onSelect'>;
78
+ /**
79
+ * Optional: The URL the TreeNode is linking to
80
+ */
81
+ href?: string;
82
+ } & Omit<React.LiHTMLAttributes<HTMLElement>, 'onSelect'>;
79
83
  declare const TreeNode: React.ForwardRefExoticComponent<{
80
84
  /**
81
85
  * **Note:** this is controlled by the parent TreeView component, do not set manually.
82
86
  * The ID of the active node in the tree
83
87
  */
84
- active?: string | number | undefined;
88
+ active?: string | number;
85
89
  /**
86
90
  * Specify the children of the TreeNode
87
91
  */
@@ -89,29 +93,29 @@ declare const TreeNode: React.ForwardRefExoticComponent<{
89
93
  /**
90
94
  * Specify an optional className to be applied to the TreeNode
91
95
  */
92
- className?: string | undefined;
96
+ className?: string;
93
97
  /**
94
98
  * **[Experimental]** The default expansion state of the node.
95
99
  * *This is only supported with the `enable-treeview-controllable` feature flag!*
96
100
  */
97
- defaultIsExpanded?: boolean | undefined;
101
+ defaultIsExpanded?: boolean;
98
102
  /**
99
103
  * **Note:** this is controlled by the parent TreeView component, do not set manually.
100
104
  * TreeNode depth to determine spacing
101
105
  */
102
- depth?: number | undefined;
106
+ depth?: number;
103
107
  /**
104
108
  * Specify if the TreeNode is disabled
105
109
  */
106
- disabled?: boolean | undefined;
110
+ disabled?: boolean;
107
111
  /**
108
- * Specify the TreeNode's ID. Must be unique in the DOM and is used for props.active and props.selected
112
+ * Specify the TreeNode's ID. Must be unique in the DOM and is used for props.active, props.selected and aria-owns
109
113
  */
110
- id?: string | undefined;
114
+ id?: string;
111
115
  /**
112
116
  * Specify if the TreeNode is expanded (only applicable to parent nodes)
113
117
  */
114
- isExpanded?: boolean | undefined;
118
+ isExpanded?: boolean;
115
119
  /**
116
120
  * Rendered label for the TreeNode
117
121
  */
@@ -119,32 +123,36 @@ declare const TreeNode: React.ForwardRefExoticComponent<{
119
123
  /**
120
124
  * Callback function for when the node receives or loses focus
121
125
  */
122
- onNodeFocusEvent?: ((event: React.FocusEvent<HTMLLIElement>) => void) | undefined;
126
+ onNodeFocusEvent?: (event: React.FocusEvent<HTMLElement>) => void;
123
127
  /**
124
128
  * Callback function for when the node is selected
125
129
  */
126
- onSelect?: ((event: React.MouseEvent, node?: TreeNodeProps) => void) | undefined;
130
+ onSelect?: (event: React.MouseEvent, node?: TreeNodeProps) => void;
127
131
  /**
128
132
  * Callback function for when a parent node is expanded or collapsed
129
133
  */
130
- onToggle?: ((event: React.MouseEvent, node?: TreeNodeProps) => void) | undefined;
134
+ onToggle?: (event: React.MouseEvent, node?: TreeNodeProps) => void;
131
135
  /**
132
136
  * Callback function for when any node in the tree is selected
133
137
  */
134
- onTreeSelect?: ((event: React.MouseEvent, node?: TreeNodeProps) => void) | undefined;
138
+ onTreeSelect?: (event: React.MouseEvent, node?: TreeNodeProps) => void;
135
139
  /**
136
140
  * Optional prop to allow each node to have an associated icon.
137
141
  * Can be a React component class
138
142
  */
139
- renderIcon?: React.ComponentType<{}> | undefined;
143
+ renderIcon?: ComponentType | FunctionComponent;
140
144
  /**
141
145
  * **Note:** this is controlled by the parent TreeView component, do not set manually.
142
146
  * Array containing all selected node IDs in the tree
143
147
  */
144
- selected?: (string | number)[] | undefined;
148
+ selected?: Array<string | number>;
145
149
  /**
146
150
  * Specify the value of the TreeNode
147
151
  */
148
- value?: string | undefined;
149
- } & Omit<React.LiHTMLAttributes<HTMLLIElement>, "onSelect"> & React.RefAttributes<HTMLLIElement>>;
152
+ value?: string;
153
+ /**
154
+ * Optional: The URL the TreeNode is linking to
155
+ */
156
+ href?: string;
157
+ } & Omit<React.LiHTMLAttributes<HTMLElement>, "onSelect"> & React.RefAttributes<HTMLElement>>;
150
158
  export default TreeNode;
@@ -45,6 +45,7 @@ const TreeNode = /*#__PURE__*/React__default["default"].forwardRef((_ref, forwar
45
45
  renderIcon: Icon,
46
46
  selected: propSelected,
47
47
  value,
48
+ href,
48
49
  ...rest
49
50
  } = _ref;
50
51
  // These are provided by the parent TreeView component
@@ -79,6 +80,7 @@ const TreeNode = /*#__PURE__*/React__default["default"].forwardRef((_ref, forwar
79
80
  depth: depth + 1,
80
81
  disabled: disabled || node.props.disabled,
81
82
  onTreeSelect,
83
+ onNodeFocusEvent,
82
84
  selected,
83
85
  tabIndex: !node.props.disabled && -1 || null
84
86
  });
@@ -104,6 +106,9 @@ const TreeNode = /*#__PURE__*/React__default["default"].forwardRef((_ref, forwar
104
106
 
105
107
  // Prevent the node from being selected
106
108
  event.stopPropagation();
109
+ if (href) {
110
+ event.preventDefault();
111
+ }
107
112
  if (!enableTreeviewControllable) {
108
113
  onToggle?.(event, {
109
114
  id,
@@ -131,6 +136,12 @@ const TreeNode = /*#__PURE__*/React__default["default"].forwardRef((_ref, forwar
131
136
  }
132
137
  }
133
138
  function handleKeyDown(event) {
139
+ function getFocusableNode(node) {
140
+ if (node?.classList.contains(`${prefix}--tree-node`)) {
141
+ return node;
142
+ }
143
+ return node?.firstChild;
144
+ }
134
145
  if (disabled) {
135
146
  return;
136
147
  }
@@ -143,6 +154,9 @@ const TreeNode = /*#__PURE__*/React__default["default"].forwardRef((_ref, forwar
143
154
  if (node.classList.contains(`${prefix}--tree-parent-node`)) {
144
155
  return node;
145
156
  }
157
+ if (node.classList.contains(`${prefix}--tree-node-link-parent`)) {
158
+ return node.firstChild;
159
+ }
146
160
  if (node.classList.contains(`${prefix}--tree`)) {
147
161
  return null;
148
162
  }
@@ -163,7 +177,7 @@ const TreeNode = /*#__PURE__*/React__default["default"].forwardRef((_ref, forwar
163
177
  * When focus is on a leaf node or a closed parent node, move focus to
164
178
  * its parent node (unless its depth is level 1)
165
179
  */
166
- const parentNode = findParentTreeNode(currentNode.current?.parentElement || null);
180
+ const parentNode = findParentTreeNode(href ? currentNode.current?.parentElement?.parentElement : currentNode.current?.parentElement);
167
181
  if (parentNode instanceof HTMLElement) {
168
182
  parentNode.focus();
169
183
  }
@@ -175,7 +189,7 @@ const TreeNode = /*#__PURE__*/React__default["default"].forwardRef((_ref, forwar
175
189
  * When focus is on an expanded parent node, move focus to the first
176
190
  * child node
177
191
  */
178
- (currentNode.current?.lastChild?.firstChild).focus();
192
+ getFocusableNode(href ? currentNode.current?.parentElement?.lastChild?.firstChild : currentNode.current?.lastChild?.firstChild).focus();
179
193
  } else {
180
194
  if (!enableTreeviewControllable) {
181
195
  onToggle?.(event, {
@@ -190,6 +204,9 @@ const TreeNode = /*#__PURE__*/React__default["default"].forwardRef((_ref, forwar
190
204
  }
191
205
  if (match.matches(event, [keys.Enter, keys.Space])) {
192
206
  event.preventDefault();
207
+ if (href) {
208
+ currentNode.current?.click();
209
+ }
193
210
  handleClick(event);
194
211
  }
195
212
  rest?.onKeyDown?.(event);
@@ -242,9 +259,10 @@ const TreeNode = /*#__PURE__*/React__default["default"].forwardRef((_ref, forwar
242
259
  }, [children, depth, Icon, isExpanded, enableTreeviewControllable, setExpanded]);
243
260
  const treeNodeProps = {
244
261
  ...rest,
245
- ['aria-current']: isActive || undefined,
246
- ['aria-selected']: disabled ? undefined : isSelected,
262
+ ['aria-current']: !href ? isActive || undefined : isActive ? 'page' : undefined,
263
+ ['aria-selected']: !href ? disabled ? undefined : isSelected : undefined,
247
264
  ['aria-disabled']: disabled,
265
+ ['aria-owns']: children ? `${id}-subtree` : undefined,
248
266
  className: treeNodeClasses,
249
267
  id,
250
268
  onBlur: handleFocusEvent,
@@ -254,39 +272,86 @@ const TreeNode = /*#__PURE__*/React__default["default"].forwardRef((_ref, forwar
254
272
  role: 'treeitem'
255
273
  };
256
274
  if (!children) {
275
+ if (href) {
276
+ return /*#__PURE__*/React__default["default"].createElement("li", {
277
+ role: "none"
278
+ }, /*#__PURE__*/React__default["default"].createElement("a", _rollupPluginBabelHelpers["extends"]({}, treeNodeProps, {
279
+ ref: setRefs,
280
+ href: !disabled ? href : undefined
281
+ }), /*#__PURE__*/React__default["default"].createElement("div", {
282
+ className: `${prefix}--tree-node__label`,
283
+ ref: currentNodeLabel
284
+ }, Icon && /*#__PURE__*/React__default["default"].createElement(Icon, {
285
+ className: `${prefix}--tree-node__icon`
286
+ }), label)));
287
+ } else {
288
+ return /*#__PURE__*/React__default["default"].createElement("li", _rollupPluginBabelHelpers["extends"]({}, treeNodeProps, {
289
+ ref: setRefs
290
+ }), /*#__PURE__*/React__default["default"].createElement("div", {
291
+ className: `${prefix}--tree-node__label`,
292
+ ref: currentNodeLabel
293
+ }, Icon && /*#__PURE__*/React__default["default"].createElement(Icon, {
294
+ className: `${prefix}--tree-node__icon`
295
+ }), label));
296
+ }
297
+ }
298
+ if (href) {
299
+ return /*#__PURE__*/React__default["default"].createElement("li", {
300
+ role: "none",
301
+ className: `${prefix}--tree-node-link-parent`
302
+ }, /*#__PURE__*/React__default["default"].createElement("a", _rollupPluginBabelHelpers["extends"]({}, treeNodeProps, {
303
+ "aria-expanded": !!expanded,
304
+ ref: setRefs,
305
+ href: !disabled ? href : undefined
306
+ }), /*#__PURE__*/React__default["default"].createElement("div", {
307
+ className: `${prefix}--tree-node__label`,
308
+ ref: currentNodeLabel
309
+ }, /*#__PURE__*/React__default["default"].createElement("span", {
310
+ className: `${prefix}--tree-parent-node__toggle`
311
+ // @ts-ignore
312
+ ,
313
+ disabled: disabled,
314
+ onClick: handleToggleClick
315
+ }, /*#__PURE__*/React__default["default"].createElement(iconsReact.CaretDown, {
316
+ className: toggleClasses
317
+ })), /*#__PURE__*/React__default["default"].createElement("span", {
318
+ className: `${prefix}--tree-node__label__details`
319
+ }, Icon && /*#__PURE__*/React__default["default"].createElement(Icon, {
320
+ className: `${prefix}--tree-node__icon`
321
+ }), label))), /*#__PURE__*/React__default["default"].createElement("ul", {
322
+ id: `${id}-subtree`,
323
+ role: "group",
324
+ className: cx__default["default"](`${prefix}--tree-node__children`, {
325
+ [`${prefix}--tree-node--hidden`]: !expanded
326
+ })
327
+ }, nodesWithProps));
328
+ } else {
257
329
  return /*#__PURE__*/React__default["default"].createElement("li", _rollupPluginBabelHelpers["extends"]({}, treeNodeProps, {
330
+ "aria-expanded": !!expanded,
258
331
  ref: setRefs
259
332
  }), /*#__PURE__*/React__default["default"].createElement("div", {
260
333
  className: `${prefix}--tree-node__label`,
261
334
  ref: currentNodeLabel
335
+ }, /*#__PURE__*/React__default["default"].createElement("span", {
336
+ className: `${prefix}--tree-parent-node__toggle`
337
+ // @ts-ignore
338
+ ,
339
+ disabled: disabled,
340
+ onClick: handleToggleClick
341
+ }, /*#__PURE__*/React__default["default"].createElement(iconsReact.CaretDown, {
342
+ className: toggleClasses
343
+ })), /*#__PURE__*/React__default["default"].createElement("span", {
344
+ className: `${prefix}--tree-node__label__details`
262
345
  }, Icon && /*#__PURE__*/React__default["default"].createElement(Icon, {
263
346
  className: `${prefix}--tree-node__icon`
264
- }), label));
347
+ }), label)), /*#__PURE__*/React__default["default"].createElement("ul", {
348
+ id: `${id}-subtree`,
349
+ role: "group",
350
+ className: cx__default["default"](`${prefix}--tree-node__children`, {
351
+ [`${prefix}--tree-node--hidden`]: !expanded
352
+ })
353
+ }, nodesWithProps));
265
354
  }
266
- return /*#__PURE__*/React__default["default"].createElement("li", _rollupPluginBabelHelpers["extends"]({}, treeNodeProps, {
267
- "aria-expanded": !!expanded,
268
- ref: setRefs
269
- }), /*#__PURE__*/React__default["default"].createElement("div", {
270
- className: `${prefix}--tree-node__label`,
271
- ref: currentNodeLabel
272
- }, /*#__PURE__*/React__default["default"].createElement("span", {
273
- className: `${prefix}--tree-parent-node__toggle`
274
- // @ts-ignore
275
- ,
276
- disabled: disabled,
277
- onClick: handleToggleClick
278
- }, /*#__PURE__*/React__default["default"].createElement(iconsReact.CaretDown, {
279
- className: toggleClasses
280
- })), /*#__PURE__*/React__default["default"].createElement("span", {
281
- className: `${prefix}--tree-node__label__details`
282
- }, Icon && /*#__PURE__*/React__default["default"].createElement(Icon, {
283
- className: `${prefix}--tree-node__icon`
284
- }), label)), /*#__PURE__*/React__default["default"].createElement("ul", {
285
- role: "group",
286
- className: cx__default["default"](`${prefix}--tree-node__children`, {
287
- [`${prefix}--tree-node--hidden`]: !expanded
288
- })
289
- }, nodesWithProps));
290
355
  });
291
356
  TreeNode.propTypes = {
292
357
  /**
@@ -317,7 +382,7 @@ TreeNode.propTypes = {
317
382
  */
318
383
  disabled: PropTypes__default["default"].bool,
319
384
  /**
320
- * Specify the TreeNode's ID. Must be unique in the DOM and is used for props.active and props.selected
385
+ * Specify the TreeNode's ID. Must be unique in the DOM and is used for props.active, props.selected and aria-owns
321
386
  */
322
387
  id: PropTypes__default["default"].string,
323
388
  /**
@@ -359,7 +424,11 @@ TreeNode.propTypes = {
359
424
  /**
360
425
  * Specify the value of the TreeNode
361
426
  */
362
- value: PropTypes__default["default"].string
427
+ value: PropTypes__default["default"].string,
428
+ /**
429
+ * Optional: The URL the TreeNode is linking to
430
+ */
431
+ href: PropTypes__default["default"].string
363
432
  };
364
433
  TreeNode.displayName = 'TreeNode';
365
434
 
@@ -202,7 +202,7 @@ const TreeView = _ref => {
202
202
  if (node.classList.contains(`${prefix}--tree-node--disabled`) || node.classList.contains(`${prefix}--tree-node--hidden`)) {
203
203
  return NodeFilter.FILTER_REJECT;
204
204
  }
205
- if (node.matches(`li.${prefix}--tree-node`)) {
205
+ if (node.matches(`.${prefix}--tree-node`)) {
206
206
  return NodeFilter.FILTER_ACCEPT;
207
207
  }
208
208
  return NodeFilter.FILTER_SKIP;
@@ -68,33 +68,33 @@ declare const Content: {
68
68
  results?: number | undefined;
69
69
  security?: string | undefined;
70
70
  unselectable?: "on" | "off" | undefined;
71
- inputMode?: "search" | "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | undefined;
71
+ inputMode?: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search" | undefined;
72
72
  is?: string | undefined;
73
73
  "aria-activedescendant"?: string | undefined;
74
74
  "aria-atomic"?: (boolean | "true" | "false") | undefined;
75
- "aria-autocomplete"?: "list" | "none" | "inline" | "both" | undefined;
75
+ "aria-autocomplete"?: "none" | "inline" | "list" | "both" | undefined;
76
76
  "aria-braillelabel"?: string | undefined;
77
77
  "aria-brailleroledescription"?: string | undefined;
78
78
  "aria-busy"?: (boolean | "true" | "false") | undefined;
79
- "aria-checked"?: boolean | "true" | "false" | "mixed" | undefined;
79
+ "aria-checked"?: boolean | "false" | "mixed" | "true" | undefined;
80
80
  "aria-colcount"?: number | undefined;
81
81
  "aria-colindex"?: number | undefined;
82
82
  "aria-colindextext"?: string | undefined;
83
83
  "aria-colspan"?: number | undefined;
84
84
  "aria-controls"?: string | undefined;
85
- "aria-current"?: boolean | "true" | "false" | "time" | "step" | "date" | "page" | "location" | undefined;
85
+ "aria-current"?: boolean | "false" | "true" | "page" | "step" | "location" | "date" | "time" | undefined;
86
86
  "aria-describedby"?: string | undefined;
87
87
  "aria-description"?: string | undefined;
88
88
  "aria-details"?: string | undefined;
89
89
  "aria-disabled"?: (boolean | "true" | "false") | undefined;
90
- "aria-dropeffect"?: "link" | "none" | "copy" | "move" | "execute" | "popup" | undefined;
90
+ "aria-dropeffect"?: "none" | "copy" | "execute" | "link" | "move" | "popup" | undefined;
91
91
  "aria-errormessage"?: string | undefined;
92
92
  "aria-expanded"?: (boolean | "true" | "false") | undefined;
93
93
  "aria-flowto"?: string | undefined;
94
94
  "aria-grabbed"?: (boolean | "true" | "false") | undefined;
95
- "aria-haspopup"?: boolean | "true" | "false" | "dialog" | "grid" | "listbox" | "menu" | "tree" | undefined;
95
+ "aria-haspopup"?: boolean | "false" | "true" | "menu" | "listbox" | "tree" | "grid" | "dialog" | undefined;
96
96
  "aria-hidden"?: (boolean | "true" | "false") | undefined;
97
- "aria-invalid"?: boolean | "true" | "false" | "grammar" | "spelling" | undefined;
97
+ "aria-invalid"?: boolean | "false" | "true" | "grammar" | "spelling" | undefined;
98
98
  "aria-keyshortcuts"?: string | undefined;
99
99
  "aria-label"?: string | undefined;
100
100
  "aria-labelledby"?: string | undefined;
@@ -107,9 +107,9 @@ declare const Content: {
107
107
  "aria-owns"?: string | undefined;
108
108
  "aria-placeholder"?: string | undefined;
109
109
  "aria-posinset"?: number | undefined;
110
- "aria-pressed"?: boolean | "true" | "false" | "mixed" | undefined;
110
+ "aria-pressed"?: boolean | "false" | "mixed" | "true" | undefined;
111
111
  "aria-readonly"?: (boolean | "true" | "false") | undefined;
112
- "aria-relevant"?: "text" | "all" | "additions" | "additions removals" | "additions text" | "removals" | "removals additions" | "removals text" | "text additions" | "text removals" | undefined;
112
+ "aria-relevant"?: "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text" | "text additions" | "text removals" | undefined;
113
113
  "aria-required"?: (boolean | "true" | "false") | undefined;
114
114
  "aria-roledescription"?: string | undefined;
115
115
  "aria-rowcount"?: number | undefined;
@@ -7,5 +7,5 @@
7
7
  /**
8
8
  * Generic container for `HeaderGlobalAction` components
9
9
  */
10
- declare const HeaderGlobalBar: (props: import("../../types/common").ReactAttr<"div">) => import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
10
+ declare const HeaderGlobalBar: (props: import("../../types/common").ReactAttr<"div">) => React.ReactElement;
11
11
  export default HeaderGlobalBar;
@@ -121,54 +121,98 @@ declare class HeaderMenu extends React.Component<HeaderMenuProps, HeaderMenuStat
121
121
  length: 1;
122
122
  toString(): string;
123
123
  toLocaleString(): string;
124
+ toLocaleString(locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string;
124
125
  pop(): string | undefined;
125
126
  push(...items: string[]): number;
126
127
  concat(...items: ConcatArray<string>[]): string[];
127
128
  concat(...items: (string | ConcatArray<string>)[]): string[];
128
- join(separator?: string | undefined): string;
129
+ join(separator?: string): string;
129
130
  reverse(): string[];
130
131
  shift(): string | undefined;
131
- slice(start?: number | undefined, end?: number | undefined): string[];
132
+ slice(start?: number, end?: number): string[];
132
133
  sort(compareFn?: ((a: string, b: string) => number) | undefined): [key: string];
133
- splice(start: number, deleteCount?: number | undefined): string[];
134
+ splice(start: number, deleteCount?: number): string[];
134
135
  splice(start: number, deleteCount: number, ...items: string[]): string[];
135
136
  unshift(...items: string[]): number;
136
- indexOf(searchElement: string, fromIndex?: number | undefined): number;
137
- lastIndexOf(searchElement: string, fromIndex?: number | undefined): number;
137
+ indexOf(searchElement: string, fromIndex?: number): number;
138
+ lastIndexOf(searchElement: string, fromIndex?: number): number;
138
139
  every<S extends string>(predicate: (value: string, index: number, array: string[]) => value is S, thisArg?: any): this is S[];
139
140
  every(predicate: (value: string, index: number, array: string[]) => unknown, thisArg?: any): boolean;
140
141
  some(predicate: (value: string, index: number, array: string[]) => unknown, thisArg?: any): boolean;
141
142
  forEach(callbackfn: (value: string, index: number, array: string[]) => void, thisArg?: any): void;
142
143
  map<U>(callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): U[];
143
- filter<S_1 extends string>(predicate: (value: string, index: number, array: string[]) => value is S_1, thisArg?: any): S_1[];
144
+ filter<S extends string>(predicate: (value: string, index: number, array: string[]) => value is S, thisArg?: any): S[];
144
145
  filter(predicate: (value: string, index: number, array: string[]) => unknown, thisArg?: any): string[];
145
146
  reduce(callbackfn: (previousValue: string, currentValue: string, currentIndex: number, array: string[]) => string): string;
146
147
  reduce(callbackfn: (previousValue: string, currentValue: string, currentIndex: number, array: string[]) => string, initialValue: string): string;
147
- reduce<U_1>(callbackfn: (previousValue: U_1, currentValue: string, currentIndex: number, array: string[]) => U_1, initialValue: U_1): U_1;
148
+ reduce<U>(callbackfn: (previousValue: U, currentValue: string, currentIndex: number, array: string[]) => U, initialValue: U): U;
148
149
  reduceRight(callbackfn: (previousValue: string, currentValue: string, currentIndex: number, array: string[]) => string): string;
149
150
  reduceRight(callbackfn: (previousValue: string, currentValue: string, currentIndex: number, array: string[]) => string, initialValue: string): string;
150
- reduceRight<U_2>(callbackfn: (previousValue: U_2, currentValue: string, currentIndex: number, array: string[]) => U_2, initialValue: U_2): U_2;
151
- find<S_2 extends string>(predicate: (this: void, value: string, index: number, obj: string[]) => value is S_2, thisArg?: any): S_2 | undefined;
151
+ reduceRight<U>(callbackfn: (previousValue: U, currentValue: string, currentIndex: number, array: string[]) => U, initialValue: U): U;
152
+ find<S extends string>(predicate: (value: string, index: number, obj: string[]) => value is S, thisArg?: any): S | undefined;
152
153
  find(predicate: (value: string, index: number, obj: string[]) => unknown, thisArg?: any): string | undefined;
153
154
  findIndex(predicate: (value: string, index: number, obj: string[]) => unknown, thisArg?: any): number;
154
- fill(value: string, start?: number | undefined, end?: number | undefined): [key: string];
155
- copyWithin(target: number, start: number, end?: number | undefined): [key: string];
156
- entries(): IterableIterator<[number, string]>;
157
- keys(): IterableIterator<number>;
158
- values(): IterableIterator<string>;
159
- includes(searchElement: string, fromIndex?: number | undefined): boolean;
160
- flatMap<U_3, This = undefined>(callback: (this: This, value: string, index: number, array: string[]) => U_3 | readonly U_3[], thisArg?: This | undefined): U_3[];
155
+ fill(value: string, start?: number, end?: number): [key: string];
156
+ copyWithin(target: number, start: number, end?: number): [key: string];
157
+ entries(): ArrayIterator<[number, string]>;
158
+ keys(): ArrayIterator<number>;
159
+ values(): ArrayIterator<string>;
160
+ includes(searchElement: string, fromIndex?: number): boolean;
161
+ flatMap<U, This = undefined>(callback: (this: This, value: string, index: number, array: string[]) => U | readonly U[], thisArg?: This | undefined): U[];
161
162
  flat<A, D extends number = 1>(this: A, depth?: D | undefined): FlatArray<A, D>[];
162
163
  at(index: number): string | undefined;
163
- [Symbol.iterator](): IterableIterator<string>;
164
- [Symbol.unscopables](): {
165
- copyWithin: boolean;
166
- entries: boolean;
167
- fill: boolean;
168
- find: boolean;
169
- findIndex: boolean;
170
- keys: boolean;
171
- values: boolean;
164
+ findLast<S extends string>(predicate: (value: string, index: number, array: string[]) => value is S, thisArg?: any): S | undefined;
165
+ findLast(predicate: (value: string, index: number, array: string[]) => unknown, thisArg?: any): string | undefined;
166
+ findLastIndex(predicate: (value: string, index: number, array: string[]) => unknown, thisArg?: any): number;
167
+ toReversed(): string[];
168
+ toSorted(compareFn?: ((a: string, b: string) => number) | undefined): string[];
169
+ toSpliced(start: number, deleteCount: number, ...items: string[]): string[];
170
+ toSpliced(start: number, deleteCount?: number): string[];
171
+ with(index: number, value: string): string[];
172
+ [Symbol.iterator](): ArrayIterator<string>;
173
+ [Symbol.unscopables]: {
174
+ [x: number]: boolean | undefined;
175
+ length?: boolean | undefined;
176
+ toString?: boolean | undefined;
177
+ toLocaleString?: boolean | undefined;
178
+ pop?: boolean | undefined;
179
+ push?: boolean | undefined;
180
+ concat?: boolean | undefined;
181
+ join?: boolean | undefined;
182
+ reverse?: boolean | undefined;
183
+ shift?: boolean | undefined;
184
+ slice?: boolean | undefined;
185
+ sort?: boolean | undefined;
186
+ splice?: boolean | undefined;
187
+ unshift?: boolean | undefined;
188
+ indexOf?: boolean | undefined;
189
+ lastIndexOf?: boolean | undefined;
190
+ every?: boolean | undefined;
191
+ some?: boolean | undefined;
192
+ forEach?: boolean | undefined;
193
+ map?: boolean | undefined;
194
+ filter?: boolean | undefined;
195
+ reduce?: boolean | undefined;
196
+ reduceRight?: boolean | undefined;
197
+ find?: boolean | undefined;
198
+ findIndex?: boolean | undefined;
199
+ fill?: boolean | undefined;
200
+ copyWithin?: boolean | undefined;
201
+ entries?: boolean | undefined;
202
+ keys?: boolean | undefined;
203
+ values?: boolean | undefined;
204
+ includes?: boolean | undefined;
205
+ flatMap?: boolean | undefined;
206
+ flat?: boolean | undefined;
207
+ at?: boolean | undefined;
208
+ findLast?: boolean | undefined;
209
+ findLastIndex?: boolean | undefined;
210
+ toReversed?: boolean | undefined;
211
+ toSorted?: boolean | undefined;
212
+ toSpliced?: boolean | undefined;
213
+ with?: boolean | undefined;
214
+ [Symbol.iterator]?: boolean | undefined;
215
+ readonly [Symbol.unscopables]?: boolean | undefined;
172
216
  };
173
217
  };
174
218
  static contextType: React.Context<string>;