@carbon/react 1.78.0-rc.0 → 1.78.1

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 (231) hide show
  1. package/.playwright/INTERNAL_AVT_REPORT_DO_NOT_USE.json +851 -816
  2. package/es/components/Accordion/AccordionItem.js +2 -2
  3. package/es/components/Button/Button.d.ts +2 -3
  4. package/es/components/Button/Button.js +1 -2
  5. package/es/components/Button/ButtonBase.js +1 -1
  6. package/es/components/ChatButton/ChatButton.d.ts +2 -3
  7. package/es/components/ChatButton/ChatButton.js +1 -2
  8. package/es/components/ComboBox/ComboBox.js +40 -30
  9. package/es/components/ComboButton/index.js +0 -1
  10. package/es/components/ComposedModal/ComposedModal.js +65 -51
  11. package/es/components/ContainedList/ContainedListItem/ContainedListItem.d.ts +2 -2
  12. package/es/components/ContainedList/ContainedListItem/ContainedListItem.js +1 -1
  13. package/es/components/ContentSwitcher/ContentSwitcher.js +3 -3
  14. package/es/components/ContextMenu/useContextMenu.d.ts +0 -1
  15. package/es/components/ContextMenu/useContextMenu.js +1 -2
  16. package/es/components/DataTable/TableBatchAction.d.ts +3 -3
  17. package/es/components/DataTable/TableBatchAction.js +1 -1
  18. package/es/components/DataTable/TableContainer.d.ts +1 -1
  19. package/es/components/DataTable/TableContainer.js +3 -3
  20. package/es/components/DataTable/TableExpandHeader.d.ts +6 -5
  21. package/es/components/DataTable/TableToolbarMenu.d.ts +2 -2
  22. package/es/components/DataTable/TableToolbarMenu.js +1 -1
  23. package/es/components/DatePicker/DatePicker.js +2 -2
  24. package/es/components/DatePicker/plugins/fixEventsPlugin.js +1 -1
  25. package/es/components/Dialog/index.d.ts +42 -4
  26. package/es/components/Dialog/index.js +177 -0
  27. package/es/components/ExpandableSearch/ExpandableSearch.js +2 -2
  28. package/es/components/FeatureFlags/index.d.ts +3 -1
  29. package/es/components/FeatureFlags/index.js +3 -0
  30. package/es/components/FileUploader/FileUploader.d.ts +1 -1
  31. package/es/components/FileUploader/FileUploader.js +2 -2
  32. package/es/components/FileUploader/FileUploaderButton.js +2 -2
  33. package/es/components/FileUploader/FileUploaderDropContainer.d.ts +1 -1
  34. package/es/components/FileUploader/FileUploaderDropContainer.js +6 -4
  35. package/es/components/FileUploader/FileUploaderItem.d.ts +1 -1
  36. package/es/components/FileUploader/FileUploaderItem.js +2 -2
  37. package/es/components/Grid/CSSGrid.js +18 -14
  38. package/es/components/Grid/FlexGrid.js +7 -6
  39. package/es/components/Grid/GridTypes.d.ts +5 -3
  40. package/es/components/IconButton/index.js +3 -3
  41. package/es/components/Layer/index.d.ts +4 -6
  42. package/es/components/Layer/index.js +5 -6
  43. package/es/components/Link/Link.d.ts +2 -3
  44. package/es/components/Link/Link.js +1 -2
  45. package/es/components/ListBox/ListBoxMenuItem.d.ts +3 -3
  46. package/es/components/ListBox/ListBoxMenuItem.js +37 -15
  47. package/es/components/Menu/Menu.d.ts +1 -0
  48. package/es/components/Menu/Menu.js +7 -9
  49. package/es/components/Menu/MenuContext.d.ts +4 -4
  50. package/es/components/Menu/MenuContext.js +6 -1
  51. package/es/components/Menu/MenuItem.d.ts +2 -2
  52. package/es/components/Menu/MenuItem.js +16 -24
  53. package/es/components/MenuButton/index.js +14 -2
  54. package/es/components/Modal/Modal.js +121 -49
  55. package/es/components/ModalWrapper/ModalWrapper.js +1 -1
  56. package/es/components/MultiSelect/FilterableMultiSelect.js +3 -3
  57. package/es/components/MultiSelect/MultiSelect.js +2 -2
  58. package/es/components/Notification/Notification.d.ts +5 -13
  59. package/es/components/Notification/Notification.js +7 -9
  60. package/es/components/OverflowMenu/OverflowMenu.d.ts +4 -8
  61. package/es/components/OverflowMenu/OverflowMenu.js +3 -3
  62. package/es/components/OverflowMenu/next/index.d.ts +2 -2
  63. package/es/components/OverflowMenu/next/index.js +1 -1
  64. package/es/components/OverflowMenuItem/OverflowMenuItem.js +2 -2
  65. package/es/components/ProgressIndicator/ProgressIndicator.js +2 -2
  66. package/es/components/RadioTile/RadioTile.js +2 -2
  67. package/es/components/Search/Search.d.ts +2 -3
  68. package/es/components/Search/Search.js +4 -6
  69. package/es/components/Slider/Slider.d.ts +16 -15
  70. package/es/components/Slider/Slider.js +22 -22
  71. package/es/components/Tabs/Tabs.d.ts +3 -6
  72. package/es/components/Tabs/Tabs.js +8 -9
  73. package/es/components/Tag/DismissibleTag.d.ts +3 -5
  74. package/es/components/Tag/DismissibleTag.js +1 -2
  75. package/es/components/Tag/OperationalTag.d.ts +2 -3
  76. package/es/components/Tag/OperationalTag.js +1 -2
  77. package/es/components/Tag/SelectableTag.d.ts +3 -5
  78. package/es/components/Tag/SelectableTag.js +1 -2
  79. package/es/components/Tag/Tag.d.ts +2 -3
  80. package/es/components/Tag/Tag.js +1 -2
  81. package/es/components/Tile/Tile.d.ts +3 -5
  82. package/es/components/Tile/Tile.js +8 -6
  83. package/es/components/Toggletip/index.js +2 -2
  84. package/es/components/Tooltip/DefinitionTooltip.js +2 -2
  85. package/es/components/Tooltip/Tooltip.d.ts +1 -1
  86. package/es/components/Tooltip/Tooltip.js +2 -2
  87. package/es/components/TreeView/TreeNode.d.ts +3 -5
  88. package/es/components/TreeView/TreeNode.js +3 -4
  89. package/es/components/TreeView/TreeView.js +2 -2
  90. package/es/components/UIShell/HeaderContainer.js +2 -2
  91. package/es/components/UIShell/HeaderMenu.js +2 -2
  92. package/es/components/UIShell/HeaderPanel.js +2 -2
  93. package/es/components/UIShell/SideNav.d.ts +1 -1
  94. package/es/components/UIShell/SideNav.js +2 -2
  95. package/es/components/UIShell/SideNavHeader.d.ts +2 -3
  96. package/es/components/UIShell/SideNavHeader.js +1 -2
  97. package/es/components/UIShell/SideNavLink.d.ts +2 -2
  98. package/es/components/UIShell/SideNavLink.js +1 -1
  99. package/es/components/UIShell/SideNavMenu.d.ts +2 -2
  100. package/es/components/UIShell/SideNavMenu.js +3 -3
  101. package/es/components/UIShell/SwitcherItem.js +2 -2
  102. package/es/internal/FloatingMenu.js +4 -4
  103. package/es/internal/OptimizedResize.d.ts +18 -0
  104. package/es/internal/OptimizedResize.js +21 -24
  105. package/es/internal/keyboard/index.d.ts +9 -0
  106. package/es/internal/keyboard/keys.d.ts +23 -0
  107. package/es/internal/keyboard/keys.js +2 -2
  108. package/es/internal/keyboard/match.d.ts +26 -0
  109. package/es/internal/keyboard/match.js +17 -41
  110. package/es/internal/keyboard/navigation.d.ts +37 -0
  111. package/es/internal/keyboard/navigation.js +15 -27
  112. package/es/internal/useMergedRefs.js +3 -0
  113. package/lib/components/Accordion/AccordionItem.js +2 -2
  114. package/lib/components/Button/Button.d.ts +2 -3
  115. package/lib/components/Button/Button.js +1 -2
  116. package/lib/components/Button/ButtonBase.js +1 -1
  117. package/lib/components/ChatButton/ChatButton.d.ts +2 -3
  118. package/lib/components/ChatButton/ChatButton.js +1 -2
  119. package/lib/components/ComboBox/ComboBox.js +40 -30
  120. package/lib/components/ComboButton/index.js +0 -1
  121. package/lib/components/ComposedModal/ComposedModal.js +64 -50
  122. package/lib/components/ContainedList/ContainedListItem/ContainedListItem.d.ts +2 -2
  123. package/lib/components/ContainedList/ContainedListItem/ContainedListItem.js +1 -1
  124. package/lib/components/ContentSwitcher/ContentSwitcher.js +3 -3
  125. package/lib/components/ContextMenu/useContextMenu.d.ts +0 -1
  126. package/lib/components/ContextMenu/useContextMenu.js +1 -2
  127. package/lib/components/DataTable/TableBatchAction.d.ts +3 -3
  128. package/lib/components/DataTable/TableBatchAction.js +1 -1
  129. package/lib/components/DataTable/TableContainer.d.ts +1 -1
  130. package/lib/components/DataTable/TableContainer.js +3 -3
  131. package/lib/components/DataTable/TableExpandHeader.d.ts +6 -5
  132. package/lib/components/DataTable/TableToolbarMenu.d.ts +2 -2
  133. package/lib/components/DataTable/TableToolbarMenu.js +1 -1
  134. package/lib/components/DatePicker/DatePicker.js +2 -2
  135. package/lib/components/DatePicker/plugins/fixEventsPlugin.js +1 -1
  136. package/lib/components/Dialog/index.d.ts +42 -4
  137. package/lib/components/Dialog/index.js +190 -0
  138. package/lib/components/ExpandableSearch/ExpandableSearch.js +2 -2
  139. package/lib/components/FeatureFlags/index.d.ts +3 -1
  140. package/lib/components/FeatureFlags/index.js +3 -0
  141. package/lib/components/FileUploader/FileUploader.d.ts +1 -1
  142. package/lib/components/FileUploader/FileUploader.js +2 -2
  143. package/lib/components/FileUploader/FileUploaderButton.js +2 -2
  144. package/lib/components/FileUploader/FileUploaderDropContainer.d.ts +1 -1
  145. package/lib/components/FileUploader/FileUploaderDropContainer.js +6 -4
  146. package/lib/components/FileUploader/FileUploaderItem.d.ts +1 -1
  147. package/lib/components/FileUploader/FileUploaderItem.js +2 -2
  148. package/lib/components/Grid/CSSGrid.js +18 -14
  149. package/lib/components/Grid/FlexGrid.js +7 -6
  150. package/lib/components/Grid/GridTypes.d.ts +5 -3
  151. package/lib/components/IconButton/index.js +3 -3
  152. package/lib/components/Layer/index.d.ts +4 -6
  153. package/lib/components/Layer/index.js +5 -6
  154. package/lib/components/Link/Link.d.ts +2 -3
  155. package/lib/components/Link/Link.js +1 -2
  156. package/lib/components/ListBox/ListBoxMenuItem.d.ts +3 -3
  157. package/lib/components/ListBox/ListBoxMenuItem.js +36 -14
  158. package/lib/components/Menu/Menu.d.ts +1 -0
  159. package/lib/components/Menu/Menu.js +7 -9
  160. package/lib/components/Menu/MenuContext.d.ts +4 -4
  161. package/lib/components/Menu/MenuContext.js +6 -1
  162. package/lib/components/Menu/MenuItem.d.ts +2 -2
  163. package/lib/components/Menu/MenuItem.js +15 -23
  164. package/lib/components/MenuButton/index.js +14 -2
  165. package/lib/components/Modal/Modal.js +123 -51
  166. package/lib/components/ModalWrapper/ModalWrapper.js +1 -1
  167. package/lib/components/MultiSelect/FilterableMultiSelect.js +3 -3
  168. package/lib/components/MultiSelect/MultiSelect.js +2 -2
  169. package/lib/components/Notification/Notification.d.ts +5 -13
  170. package/lib/components/Notification/Notification.js +7 -9
  171. package/lib/components/OverflowMenu/OverflowMenu.d.ts +4 -8
  172. package/lib/components/OverflowMenu/OverflowMenu.js +3 -3
  173. package/lib/components/OverflowMenu/next/index.d.ts +2 -2
  174. package/lib/components/OverflowMenu/next/index.js +1 -1
  175. package/lib/components/OverflowMenuItem/OverflowMenuItem.js +2 -2
  176. package/lib/components/ProgressIndicator/ProgressIndicator.js +2 -2
  177. package/lib/components/RadioTile/RadioTile.js +2 -2
  178. package/lib/components/Search/Search.d.ts +2 -3
  179. package/lib/components/Search/Search.js +4 -6
  180. package/lib/components/Slider/Slider.d.ts +16 -15
  181. package/lib/components/Slider/Slider.js +22 -22
  182. package/lib/components/Tabs/Tabs.d.ts +3 -6
  183. package/lib/components/Tabs/Tabs.js +8 -9
  184. package/lib/components/Tag/DismissibleTag.d.ts +3 -5
  185. package/lib/components/Tag/DismissibleTag.js +1 -2
  186. package/lib/components/Tag/OperationalTag.d.ts +2 -3
  187. package/lib/components/Tag/OperationalTag.js +1 -2
  188. package/lib/components/Tag/SelectableTag.d.ts +3 -5
  189. package/lib/components/Tag/SelectableTag.js +1 -2
  190. package/lib/components/Tag/Tag.d.ts +2 -3
  191. package/lib/components/Tag/Tag.js +1 -2
  192. package/lib/components/Tile/Tile.d.ts +3 -5
  193. package/lib/components/Tile/Tile.js +8 -6
  194. package/lib/components/Toggletip/index.js +2 -2
  195. package/lib/components/Tooltip/DefinitionTooltip.js +2 -2
  196. package/lib/components/Tooltip/Tooltip.d.ts +1 -1
  197. package/lib/components/Tooltip/Tooltip.js +2 -2
  198. package/lib/components/TreeView/TreeNode.d.ts +3 -5
  199. package/lib/components/TreeView/TreeNode.js +3 -4
  200. package/lib/components/TreeView/TreeView.js +2 -2
  201. package/lib/components/UIShell/HeaderContainer.js +2 -2
  202. package/lib/components/UIShell/HeaderMenu.js +2 -2
  203. package/lib/components/UIShell/HeaderPanel.js +2 -2
  204. package/lib/components/UIShell/SideNav.d.ts +1 -1
  205. package/lib/components/UIShell/SideNav.js +2 -2
  206. package/lib/components/UIShell/SideNavHeader.d.ts +2 -3
  207. package/lib/components/UIShell/SideNavHeader.js +1 -2
  208. package/lib/components/UIShell/SideNavLink.d.ts +2 -2
  209. package/lib/components/UIShell/SideNavLink.js +1 -1
  210. package/lib/components/UIShell/SideNavMenu.d.ts +2 -2
  211. package/lib/components/UIShell/SideNavMenu.js +3 -3
  212. package/lib/components/UIShell/SwitcherItem.js +2 -2
  213. package/lib/internal/FloatingMenu.js +5 -5
  214. package/lib/internal/OptimizedResize.d.ts +18 -0
  215. package/lib/internal/OptimizedResize.js +21 -24
  216. package/lib/internal/keyboard/index.d.ts +9 -0
  217. package/lib/internal/keyboard/keys.d.ts +23 -0
  218. package/lib/internal/keyboard/keys.js +2 -2
  219. package/lib/internal/keyboard/match.d.ts +26 -0
  220. package/lib/internal/keyboard/match.js +17 -41
  221. package/lib/internal/keyboard/navigation.d.ts +37 -0
  222. package/lib/internal/keyboard/navigation.js +15 -27
  223. package/lib/internal/useMergedRefs.js +3 -0
  224. package/package.json +7 -7
  225. package/scss/components/dialog/_dialog.scss +9 -0
  226. package/scss/components/dialog/_index.scss +9 -0
  227. package/telemetry.yml +1 -0
  228. package/es/components/Modal/next/index.d.ts +0 -171
  229. package/es/internal/focus/index.js +0 -15
  230. package/lib/components/Modal/next/index.d.ts +0 -171
  231. package/lib/internal/focus/index.js +0 -19
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2016, 2023
2
+ * Copyright IBM Corp. 2016, 2025
3
3
  *
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -37,7 +37,7 @@ export type SideNavLinkProps<E extends ElementType> = LinkProps<E> & {
37
37
  */
38
38
  large?: boolean;
39
39
  /**
40
- * Provide an icon to render in the side navigation link. Should be a React class.
40
+ * A component used to render an icon.
41
41
  */
42
42
  renderIcon?: ComponentType;
43
43
  /**
@@ -69,7 +69,7 @@ SideNavLink.propTypes = {
69
69
  */
70
70
  large: PropTypes.bool,
71
71
  /**
72
- * Provide an icon to render in the side navigation link. Should be a React class.
72
+ * A component used to render an icon.
73
73
  */
74
74
  // @ts-expect-error - PropTypes are unable to cover this case.
75
75
  renderIcon: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2016, 2023
2
+ * Copyright IBM Corp. 2016, 2025
3
3
  *
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -27,7 +27,7 @@ export interface SideNavMenuProps {
27
27
  */
28
28
  large?: boolean;
29
29
  /**
30
- * A custom icon to render next to the SideNavMenu title. This can be a function returning JSX or JSX itself.
30
+ * A component used to render an icon.
31
31
  */
32
32
  renderIcon?: React.ComponentType;
33
33
  /**
@@ -10,10 +10,10 @@ import cx from 'classnames';
10
10
  import PropTypes from 'prop-types';
11
11
  import React__default, { useContext, useState } from 'react';
12
12
  import SideNavIcon from './SideNavIcon.js';
13
+ import { Escape } from '../../internal/keyboard/keys.js';
14
+ import { match } from '../../internal/keyboard/match.js';
13
15
  import { usePrefix } from '../../internal/usePrefix.js';
14
16
  import { SideNavContext } from './SideNav.js';
15
- import { match } from '../../internal/keyboard/match.js';
16
- import { Escape } from '../../internal/keyboard/keys.js';
17
17
 
18
18
  var _ChevronDown;
19
19
  const SideNavMenu = /*#__PURE__*/React__default.forwardRef(function SideNavMenu(_ref, ref) {
@@ -110,7 +110,7 @@ SideNavMenu.propTypes = {
110
110
  */
111
111
  large: PropTypes.bool,
112
112
  /**
113
- * Pass in a custom icon to render next to the `SideNavMenu` title
113
+ * A component used to render an icon.
114
114
  */
115
115
  // @ts-expect-error - PropTypes are unable to cover this case.
116
116
  renderIcon: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
@@ -11,9 +11,9 @@ import cx from 'classnames';
11
11
  import PropTypes from 'prop-types';
12
12
  import { Link } from './Link.js';
13
13
  import { usePrefix } from '../../internal/usePrefix.js';
14
- import { AriaLabelPropType } from '../../prop-types/AriaPropTypes.js';
15
- import { match } from '../../internal/keyboard/match.js';
16
14
  import { ArrowDown, ArrowUp } from '../../internal/keyboard/keys.js';
15
+ import { match } from '../../internal/keyboard/match.js';
16
+ import { AriaLabelPropType } from '../../prop-types/AriaPropTypes.js';
17
17
 
18
18
  const SwitcherItem = /*#__PURE__*/forwardRef(function SwitcherItem(props, forwardRef) {
19
19
  const {
@@ -9,13 +9,13 @@ import React__default, { useContext, useState, useRef, useCallback, useEffect, c
9
9
  import * as FeatureFlags from '@carbon/feature-flags';
10
10
  import ReactDOM from 'react-dom';
11
11
  import window from 'window-or-global';
12
- import OptimizedResize from './OptimizedResize.js';
12
+ import { Tab } from './keyboard/keys.js';
13
+ import { match } from './keyboard/match.js';
13
14
  import { selectorTabbable, selectorFocusable } from './keyboard/navigation.js';
15
+ import { OptimizedResize } from './OptimizedResize.js';
14
16
  import { PrefixContext } from './usePrefix.js';
15
17
  import { warning } from './warning.js';
16
18
  import wrapFocus, { wrapFocusWithoutSentinels } from './wrapFocus.js';
17
- import { match } from './keyboard/match.js';
18
- import { Tab } from './keyboard/keys.js';
19
19
 
20
20
  const DIRECTION_LEFT = 'left';
21
21
  const DIRECTION_TOP = 'top';
@@ -205,7 +205,7 @@ const FloatingMenu = _ref2 => {
205
205
  updateMenuPosition();
206
206
  });
207
207
  return () => {
208
- resizeHandler.release();
208
+ resizeHandler.remove();
209
209
  };
210
210
  }, [triggerRef, menuOffset, menuDirection, flipped, target, updateOrientation]);
211
211
 
@@ -0,0 +1,18 @@
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
+ /**
8
+ * A callback function to be executed on `resize`.
9
+ */
10
+ type Callback = () => void;
11
+ export declare const OptimizedResize: {
12
+ /** Adds a callback function to be executed on window `resize`. */
13
+ add: (callback: Callback) => {
14
+ /** Removes the callback. */
15
+ remove: () => void;
16
+ };
17
+ };
18
+ export {};
@@ -8,44 +8,42 @@
8
8
  import window from 'window-or-global';
9
9
 
10
10
  // mdn resize function
11
- const OptimizedResize = function optimizedResize() {
11
+
12
+ /**
13
+ * A callback function to be executed on `resize`.
14
+ */
15
+
16
+ const OptimizedResize = (() => {
12
17
  const callbacks = [];
13
18
  let running = false;
14
-
15
- // run the actual callbacks
16
- function runCallbacks() {
19
+ const runCallbacks = () => {
17
20
  callbacks.forEach(callback => {
18
21
  callback();
19
22
  });
20
23
  running = false;
21
- }
22
-
23
- // fired on resize event
24
- function resize() {
24
+ };
25
+ const handleResize = () => {
25
26
  if (!running) {
26
27
  running = true;
27
28
  window.requestAnimationFrame(runCallbacks);
28
29
  }
29
- }
30
-
31
- // adds callback to loop
32
- function addCallback(callback) {
33
- if (callback) {
34
- const index = callbacks.indexOf(callback);
35
- if (index < 0) {
36
- callbacks.push(callback);
37
- }
30
+ };
31
+ const addCallback = callback => {
32
+ const index = callbacks.indexOf(callback);
33
+ if (index < 0) {
34
+ callbacks.push(callback);
38
35
  }
39
- }
36
+ };
40
37
  return {
41
- // public method to add additional callback
38
+ /** Adds a callback function to be executed on window `resize`. */
42
39
  add: callback => {
43
40
  if (!callbacks.length) {
44
- window.addEventListener('resize', resize);
41
+ window.addEventListener('resize', handleResize);
45
42
  }
46
43
  addCallback(callback);
47
44
  return {
48
- release() {
45
+ /** Removes the callback. */
46
+ remove: () => {
49
47
  const index = callbacks.indexOf(callback);
50
48
  if (index >= 0) {
51
49
  callbacks.splice(index, 1);
@@ -54,7 +52,6 @@ const OptimizedResize = function optimizedResize() {
54
52
  };
55
53
  }
56
54
  };
57
- }();
58
- var OptimizedResize$1 = OptimizedResize;
55
+ })();
59
56
 
60
- export { OptimizedResize$1 as default };
57
+ export { OptimizedResize };
@@ -0,0 +1,9 @@
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
+ export * as keys from './keys';
8
+ export * from './match';
9
+ export * from './navigation';
@@ -0,0 +1,23 @@
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 { KeyboardEvent } from 'react';
8
+ export type Key = Pick<KeyboardEvent, 'which' | 'keyCode' | 'code'> & {
9
+ key?: string | string[];
10
+ };
11
+ export declare const Tab: Key;
12
+ export declare const Enter: Key;
13
+ export declare const Escape: Key;
14
+ export declare const Space: Key;
15
+ export declare const PageUp: Key;
16
+ export declare const PageDown: Key;
17
+ export declare const End: Key;
18
+ export declare const Home: Key;
19
+ export declare const ArrowLeft: Key;
20
+ export declare const ArrowUp: Key;
21
+ export declare const ArrowRight: Key;
22
+ export declare const ArrowDown: Key;
23
+ export declare const Delete: Key;
@@ -69,8 +69,8 @@ const ArrowDown = {
69
69
  };
70
70
  const Delete = {
71
71
  key: 'Delete',
72
- which: 8 ,
73
- keyCode: 8 ,
72
+ which: 8,
73
+ keyCode: 8,
74
74
  code: 'ArrowDecimal'
75
75
  };
76
76
 
@@ -0,0 +1,26 @@
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 { KeyboardEvent as ReactKeyboardEvent } from 'react';
8
+ import type { Key } from './keys';
9
+ /**
10
+ * Check to see if at least one key code matches the key code of the
11
+ * given event.
12
+ *
13
+ * @param event - The event to test.
14
+ * @param keysToMatch - An array of key definitions to match against.
15
+ * @returns `true` if one of the keys matches.
16
+ */
17
+ export declare const matches: (event: ReactKeyboardEvent | KeyboardEvent, keysToMatch: Key[]) => boolean;
18
+ /**
19
+ * Check to see if the given key matches the corresponding keyboard event. Also
20
+ * supports passing in the value directly if you can't use the given event.
21
+ *
22
+ * @param eventOrCode - A `KeyboardEvent`, a number, or a string value.
23
+ * @param keyObj - An object with key properties to match against.
24
+ * @returns `true` if the event or code matches the key definition.
25
+ */
26
+ export declare const match: (eventOrCode: ReactKeyboardEvent | KeyboardEvent | number | string, { key, which, keyCode, code }: Key) => boolean;
@@ -5,65 +5,38 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- /**
9
- * @typedef Key
10
- * @property key {Array<string>|string}
11
- * @property which {number}
12
- * @property keyCode {number}
13
- */
14
-
15
8
  /**
16
9
  * Check to see if at least one key code matches the key code of the
17
10
  * given event.
18
11
  *
19
- * @example
20
- * import * as keys from '../keys';
21
- * import { matches } from '../match';
22
- *
23
- * function handleOnKeyDown(event) {
24
- * if (matches(event, [keys.Enter, keys.Space]) {
25
- * // ...
26
- * }
27
- * }
28
- *
29
- * @param {Event|React.SyntheticEvent} event
30
- * @param {Array<Key>} keysToMatch
31
- * @returns {boolean}
12
+ * @param event - The event to test.
13
+ * @param keysToMatch - An array of key definitions to match against.
14
+ * @returns `true` if one of the keys matches.
32
15
  */
33
- function matches(event, keysToMatch) {
16
+ const matches = (event, keysToMatch) => {
34
17
  for (let i = 0; i < keysToMatch.length; i++) {
35
18
  if (match(event, keysToMatch[i])) {
36
19
  return true;
37
20
  }
38
21
  }
39
22
  return false;
40
- }
23
+ };
41
24
 
42
25
  /**
43
26
  * Check to see if the given key matches the corresponding keyboard event. Also
44
- * supports passing in the value directly if you can't used the given event.
45
- *
46
- * @example
47
- * import * as keys from '../keys';
48
- * import { matches } from '../match';
49
- *
50
- * function handleOnKeyDown(event) {
51
- * if (match(event, keys.Enter) {
52
- * // ...
53
- * }
54
- * }
27
+ * supports passing in the value directly if you can't use the given event.
55
28
  *
56
- * @param {React.SyntheticEvent|Event|number|string} eventOrCode
57
- * @param {Key} key
58
- * @returns {boolean}
29
+ * @param eventOrCode - A `KeyboardEvent`, a number, or a string value.
30
+ * @param keyObj - An object with key properties to match against.
31
+ * @returns `true` if the event or code matches the key definition.
59
32
  */
60
- function match(eventOrCode) {
33
+ const match = (eventOrCode, _ref) => {
61
34
  let {
62
35
  key,
63
36
  which,
64
37
  keyCode,
65
38
  code
66
- } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
39
+ } = _ref;
67
40
  if (typeof eventOrCode === 'string') {
68
41
  return eventOrCode === key;
69
42
  }
@@ -71,9 +44,12 @@ function match(eventOrCode) {
71
44
  return eventOrCode === which || eventOrCode === keyCode;
72
45
  }
73
46
  if (eventOrCode.key && Array.isArray(key)) {
74
- return key.indexOf(eventOrCode.key) !== -1;
47
+ return key.includes(eventOrCode.key);
75
48
  }
76
- return eventOrCode.key === key || eventOrCode.which === which || eventOrCode.keyCode === keyCode || eventOrCode.code === code;
77
- }
49
+ return eventOrCode.key === key ||
50
+ // TODO: When can these checks for deprecated properties be deleted?
51
+ // Presumably, the `Key` type should also be pruned of these properties.
52
+ eventOrCode.which === which || eventOrCode.keyCode === keyCode || eventOrCode.code === code;
53
+ };
78
54
 
79
55
  export { match, matches };
@@ -0,0 +1,37 @@
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 { KeyboardEvent } from 'react';
8
+ /**
9
+ * A "ring buffer" function that takes an array and, depending on an ArrowRight
10
+ * or ArrowLeft key input, loops from last index to first or first index to last.
11
+ *
12
+ * @param key - the left or right arrow key (KeyboardEvent, number, or string)
13
+ * @param index - the current index in the array
14
+ * @param arrayLength - the total length of the array
15
+ *
16
+ * @example
17
+ * getNextIndex(keyCodes.RIGHT, 0, 4)
18
+ */
19
+ export declare const getNextIndex: (key: KeyboardEvent | number | string, index: number, arrayLength: number) => number | undefined;
20
+ /**
21
+ * A flag `node.compareDocumentPosition(target)` returns that indicates
22
+ * `target` is located earlier than `node` in the document or `target` contains `node`.
23
+ */
24
+ export declare const DOCUMENT_POSITION_BROAD_PRECEDING: number;
25
+ /**
26
+ * A flag `node.compareDocumentPosition(target)` returns that indicates
27
+ * `target` is located later than `node` in the document or `node` contains `target`.
28
+ */
29
+ export declare const DOCUMENT_POSITION_BROAD_FOLLOWING: number;
30
+ /**
31
+ * CSS selector that selects major nodes that are sequentially focusable.
32
+ */
33
+ export declare const selectorTabbable = "\n a[href], area[href], input:not([disabled]):not([tabindex='-1']),\n button:not([disabled]):not([tabindex='-1']),select:not([disabled]):not([tabindex='-1']),\n textarea:not([disabled]):not([tabindex='-1']),\n iframe, object, embed, *[tabindex]:not([tabindex='-1']):not([disabled]), *[contenteditable=true]\n";
34
+ /**
35
+ * CSS selector that selects major nodes that are click focusable.
36
+ */
37
+ export declare const selectorFocusable = "\n a[href], area[href], input:not([disabled]),\n button:not([disabled]),select:not([disabled]),\n textarea:not([disabled]),\n iframe, object, embed, *[tabindex]:not([disabled]), *[contenteditable=true]\n";
@@ -9,21 +9,16 @@ import { ArrowRight, ArrowLeft } from './keys.js';
9
9
  import { match } from './match.js';
10
10
 
11
11
  /**
12
- * Various utilities to help with a11y work
13
- */
14
-
15
- /**
16
- * A "ring buffer" function that takes an array and depending on an ArrowRight
17
- * or ArrowLeft key input loops from last index to first or first index to last.
12
+ * A "ring buffer" function that takes an array and, depending on an ArrowRight
13
+ * or ArrowLeft key input, loops from last index to first or first index to last.
18
14
  *
19
- * @param {string} key - the left or right arrow keys
20
- * @param {number} index - the current index in a given array
21
- * @param {number} arrayLength - the total length of the array
15
+ * @param key - the left or right arrow key (KeyboardEvent, number, or string)
16
+ * @param index - the current index in the array
17
+ * @param arrayLength - the total length of the array
22
18
  *
23
19
  * @example
24
- * getNextIndex(keyCodes.RIGHT, 0, 4)
20
+ * getNextIndex(keyCodes.RIGHT, 0, 4)
25
21
  */
26
-
27
22
  const getNextIndex = (key, index, arrayLength) => {
28
23
  if (match(key, ArrowRight)) {
29
24
  return (index + 1) % arrayLength;
@@ -31,30 +26,23 @@ const getNextIndex = (key, index, arrayLength) => {
31
26
  if (match(key, ArrowLeft)) {
32
27
  return (index + arrayLength - 1) % arrayLength;
33
28
  }
29
+ return;
34
30
  };
35
31
 
36
32
  /**
37
- * A flag `node.compareDocumentPosition(target)` returns,
38
- * that indicates `target` is located earlier than `node` in the document or `target` contains `node`.
33
+ * A flag `node.compareDocumentPosition(target)` returns that indicates
34
+ * `target` is located earlier than `node` in the document or `target` contains `node`.
39
35
  */
40
- const DOCUMENT_POSITION_BROAD_PRECEDING =
41
- // Checks `typeof Node` for `react-docgen`
42
- typeof Node !== 'undefined' &&
43
- // eslint-disable-next-line ssr-friendly/no-dom-globals-in-module-scope
44
- Node.DOCUMENT_POSITION_PRECEDING | Node.DOCUMENT_POSITION_CONTAINS;
36
+ const DOCUMENT_POSITION_BROAD_PRECEDING = typeof Node !== 'undefined' ? Node.DOCUMENT_POSITION_PRECEDING | Node.DOCUMENT_POSITION_CONTAINS : 0;
45
37
 
46
38
  /**
47
- * A flag `node.compareDocumentPosition(target)` returns,
48
- * that indicates `target` is located later than `node` in the document or `node` contains `target`.
39
+ * A flag `node.compareDocumentPosition(target)` returns that indicates
40
+ * `target` is located later than `node` in the document or `node` contains `target`.
49
41
  */
50
- const DOCUMENT_POSITION_BROAD_FOLLOWING =
51
- // Checks `typeof Node` for `react-docgen`
52
- typeof Node !== 'undefined' &&
53
- // eslint-disable-next-line ssr-friendly/no-dom-globals-in-module-scope
54
- Node.DOCUMENT_POSITION_FOLLOWING | Node.DOCUMENT_POSITION_CONTAINED_BY;
42
+ const DOCUMENT_POSITION_BROAD_FOLLOWING = typeof Node !== 'undefined' ? Node.DOCUMENT_POSITION_FOLLOWING | Node.DOCUMENT_POSITION_CONTAINED_BY : 0;
55
43
 
56
44
  /**
57
- * CSS selector that selects major nodes that are sequential-focusable.
45
+ * CSS selector that selects major nodes that are sequentially focusable.
58
46
  */
59
47
  const selectorTabbable = `
60
48
  a[href], area[href], input:not([disabled]):not([tabindex='-1']),
@@ -64,7 +52,7 @@ const selectorTabbable = `
64
52
  `;
65
53
 
66
54
  /**
67
- * CSS selector that selects major nodes that are click focusable
55
+ * CSS selector that selects major nodes that are click focusable.
68
56
  */
69
57
  const selectorFocusable = `
70
58
  a[href], area[href], input:not([disabled]),
@@ -7,6 +7,9 @@
7
7
 
8
8
  import { useCallback } from 'react';
9
9
 
10
+ // TODO: Investigate updating this hook based on the following code from
11
+ // https://github.com/carbon-design-system/carbon/pull/18611:
12
+ // https://github.com/adamalston/carbon/blob/dd403b6b10de3d8a6ccd8d2e21174c908c1e890a/packages/react/src/components/ListBox/ListBoxMenuItem.tsx#L23-L46
10
13
  /**
11
14
  * Combine multiple refs into a single ref. This use useful when you have two
12
15
  * refs from both `React.forwardRef` and `useRef` that you would like to add to
@@ -15,13 +15,13 @@ var cx = require('classnames');
15
15
  var PropTypes = require('prop-types');
16
16
  var React = require('react');
17
17
  require('../Text/index.js');
18
+ var keys = require('../../internal/keyboard/keys.js');
19
+ var match = require('../../internal/keyboard/match.js');
18
20
  var useId = require('../../internal/useId.js');
19
21
  var deprecate = require('../../prop-types/deprecate.js');
20
22
  var usePrefix = require('../../internal/usePrefix.js');
21
23
  var AccordionProvider = require('./AccordionProvider.js');
22
- var match = require('../../internal/keyboard/match.js');
23
24
  var Text = require('../Text/Text.js');
24
- var keys = require('../../internal/keyboard/keys.js');
25
25
 
26
26
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
27
27
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2016, 2023
2
+ * Copyright IBM Corp. 2016, 2025
3
3
  *
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -50,8 +50,7 @@ export interface ButtonBaseProps extends React.ButtonHTMLAttributes<HTMLButtonEl
50
50
  */
51
51
  rel?: React.AnchorHTMLAttributes<HTMLAnchorElement>['rel'];
52
52
  /**
53
- * Optional prop to allow overriding the icon rendering.
54
- * Can be a React component class
53
+ * A component used to render an icon.
55
54
  */
56
55
  renderIcon?: React.ElementType;
57
56
  /**
@@ -203,8 +203,7 @@ Button.propTypes = {
203
203
  */
204
204
  rel: PropTypes__default["default"].string,
205
205
  /**
206
- * Optional prop to allow overriding the icon rendering.
207
- * Can be a React component class
206
+ * A component used to render an icon.
208
207
  */
209
208
  renderIcon: PropTypes__default["default"].oneOfType([PropTypes__default["default"].func, PropTypes__default["default"].object]),
210
209
  /**
@@ -58,7 +58,7 @@ const ButtonBase = /*#__PURE__*/React__default["default"].forwardRef(function Bu
58
58
  [`${prefix}--btn--${kind}`]: kind,
59
59
  [`${prefix}--btn--disabled`]: disabled,
60
60
  [`${prefix}--btn--expressive`]: isExpressive,
61
- [`${prefix}--btn--icon-only`]: hasIconOnly && !className?.includes(`${prefix}--btn--icon-only`),
61
+ [`${prefix}--btn--icon-only`]: hasIconOnly,
62
62
  [`${prefix}--btn--selected`]: hasIconOnly && isSelected && kind === 'ghost'
63
63
  });
64
64
  const commonProps = {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2024
2
+ * Copyright IBM Corp. 2024, 2025
3
3
  *
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -33,8 +33,7 @@ export interface ChatButtonProps extends React.ButtonHTMLAttributes<HTMLButtonEl
33
33
  */
34
34
  kind?: ChatButtonKind;
35
35
  /**
36
- * Optional prop to specify an icon to be rendered.
37
- * Can be a React component class
36
+ * A component used to render an icon.
38
37
  */
39
38
  renderIcon?: ComponentType | FunctionComponent;
40
39
  /**
@@ -85,8 +85,7 @@ ChatButton.propTypes = {
85
85
  */
86
86
  kind: PropTypes__default["default"].oneOf(['primary', 'secondary', 'danger', 'ghost', 'tertiary']),
87
87
  /**
88
- * Optional prop to specify an icon to be rendered.
89
- * Can be a React component class
88
+ * A component used to render an icon.
90
89
  */
91
90
  // @ts-expect-error: PropTypes are not expressive enough to cover this case
92
91
  renderIcon: PropTypes__default["default"].oneOfType([PropTypes__default["default"].func, PropTypes__default["default"].object]),