@carbon/react 1.78.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 (217) hide show
  1. package/.playwright/INTERNAL_AVT_REPORT_DO_NOT_USE.json +883 -883
  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 +34 -24
  9. package/es/components/ComposedModal/ComposedModal.js +65 -51
  10. package/es/components/ContainedList/ContainedListItem/ContainedListItem.d.ts +2 -2
  11. package/es/components/ContainedList/ContainedListItem/ContainedListItem.js +1 -1
  12. package/es/components/ContentSwitcher/ContentSwitcher.js +3 -3
  13. package/es/components/DataTable/TableBatchAction.d.ts +3 -3
  14. package/es/components/DataTable/TableBatchAction.js +1 -1
  15. package/es/components/DataTable/TableContainer.d.ts +1 -1
  16. package/es/components/DataTable/TableContainer.js +3 -3
  17. package/es/components/DataTable/TableExpandHeader.d.ts +6 -5
  18. package/es/components/DataTable/TableToolbarMenu.d.ts +2 -2
  19. package/es/components/DataTable/TableToolbarMenu.js +1 -1
  20. package/es/components/DatePicker/DatePicker.js +2 -2
  21. package/es/components/DatePicker/plugins/fixEventsPlugin.js +1 -1
  22. package/es/components/Dialog/index.d.ts +42 -4
  23. package/es/components/Dialog/index.js +177 -0
  24. package/es/components/ExpandableSearch/ExpandableSearch.js +2 -2
  25. package/es/components/FeatureFlags/index.d.ts +3 -1
  26. package/es/components/FeatureFlags/index.js +3 -0
  27. package/es/components/FileUploader/FileUploader.d.ts +1 -1
  28. package/es/components/FileUploader/FileUploader.js +2 -2
  29. package/es/components/FileUploader/FileUploaderButton.js +2 -2
  30. package/es/components/FileUploader/FileUploaderDropContainer.d.ts +1 -1
  31. package/es/components/FileUploader/FileUploaderDropContainer.js +6 -4
  32. package/es/components/FileUploader/FileUploaderItem.d.ts +1 -1
  33. package/es/components/FileUploader/FileUploaderItem.js +2 -2
  34. package/es/components/Grid/CSSGrid.js +18 -14
  35. package/es/components/Grid/FlexGrid.js +7 -6
  36. package/es/components/Grid/GridTypes.d.ts +5 -3
  37. package/es/components/IconButton/index.js +3 -3
  38. package/es/components/Layer/index.d.ts +4 -6
  39. package/es/components/Layer/index.js +5 -6
  40. package/es/components/Link/Link.d.ts +2 -3
  41. package/es/components/Link/Link.js +1 -2
  42. package/es/components/ListBox/ListBoxMenuItem.d.ts +3 -3
  43. package/es/components/ListBox/ListBoxMenuItem.js +37 -15
  44. package/es/components/Menu/Menu.js +2 -2
  45. package/es/components/Menu/MenuItem.d.ts +2 -2
  46. package/es/components/Menu/MenuItem.js +3 -3
  47. package/es/components/Modal/Modal.js +121 -49
  48. package/es/components/ModalWrapper/ModalWrapper.js +1 -1
  49. package/es/components/MultiSelect/FilterableMultiSelect.js +3 -3
  50. package/es/components/MultiSelect/MultiSelect.js +2 -2
  51. package/es/components/Notification/Notification.d.ts +5 -13
  52. package/es/components/Notification/Notification.js +3 -4
  53. package/es/components/OverflowMenu/OverflowMenu.d.ts +4 -8
  54. package/es/components/OverflowMenu/OverflowMenu.js +3 -3
  55. package/es/components/OverflowMenu/next/index.d.ts +2 -2
  56. package/es/components/OverflowMenu/next/index.js +1 -1
  57. package/es/components/OverflowMenuItem/OverflowMenuItem.js +2 -2
  58. package/es/components/ProgressIndicator/ProgressIndicator.js +2 -2
  59. package/es/components/RadioTile/RadioTile.js +2 -2
  60. package/es/components/Search/Search.d.ts +2 -3
  61. package/es/components/Search/Search.js +4 -6
  62. package/es/components/Slider/Slider.d.ts +16 -15
  63. package/es/components/Slider/Slider.js +22 -22
  64. package/es/components/Tabs/Tabs.d.ts +3 -6
  65. package/es/components/Tabs/Tabs.js +8 -9
  66. package/es/components/Tag/DismissibleTag.d.ts +3 -5
  67. package/es/components/Tag/DismissibleTag.js +1 -2
  68. package/es/components/Tag/OperationalTag.d.ts +2 -3
  69. package/es/components/Tag/OperationalTag.js +1 -2
  70. package/es/components/Tag/SelectableTag.d.ts +3 -5
  71. package/es/components/Tag/SelectableTag.js +1 -2
  72. package/es/components/Tag/Tag.d.ts +2 -3
  73. package/es/components/Tag/Tag.js +1 -2
  74. package/es/components/Tile/Tile.d.ts +3 -5
  75. package/es/components/Tile/Tile.js +8 -6
  76. package/es/components/Toggletip/index.js +2 -2
  77. package/es/components/Tooltip/DefinitionTooltip.js +2 -2
  78. package/es/components/Tooltip/Tooltip.d.ts +1 -1
  79. package/es/components/Tooltip/Tooltip.js +2 -2
  80. package/es/components/TreeView/TreeNode.d.ts +3 -5
  81. package/es/components/TreeView/TreeNode.js +3 -4
  82. package/es/components/TreeView/TreeView.js +2 -2
  83. package/es/components/UIShell/HeaderContainer.js +2 -2
  84. package/es/components/UIShell/HeaderMenu.js +2 -2
  85. package/es/components/UIShell/HeaderPanel.js +2 -2
  86. package/es/components/UIShell/SideNav.d.ts +1 -1
  87. package/es/components/UIShell/SideNav.js +2 -2
  88. package/es/components/UIShell/SideNavHeader.d.ts +2 -3
  89. package/es/components/UIShell/SideNavHeader.js +1 -2
  90. package/es/components/UIShell/SideNavLink.d.ts +2 -2
  91. package/es/components/UIShell/SideNavLink.js +1 -1
  92. package/es/components/UIShell/SideNavMenu.d.ts +2 -2
  93. package/es/components/UIShell/SideNavMenu.js +3 -3
  94. package/es/components/UIShell/SwitcherItem.js +2 -2
  95. package/es/internal/FloatingMenu.js +4 -4
  96. package/es/internal/OptimizedResize.d.ts +18 -0
  97. package/es/internal/OptimizedResize.js +21 -24
  98. package/es/internal/keyboard/index.d.ts +9 -0
  99. package/es/internal/keyboard/keys.d.ts +23 -0
  100. package/es/internal/keyboard/keys.js +2 -2
  101. package/es/internal/keyboard/match.d.ts +26 -0
  102. package/es/internal/keyboard/match.js +17 -41
  103. package/es/internal/keyboard/navigation.d.ts +37 -0
  104. package/es/internal/keyboard/navigation.js +15 -27
  105. package/es/internal/useMergedRefs.js +3 -0
  106. package/lib/components/Accordion/AccordionItem.js +2 -2
  107. package/lib/components/Button/Button.d.ts +2 -3
  108. package/lib/components/Button/Button.js +1 -2
  109. package/lib/components/Button/ButtonBase.js +1 -1
  110. package/lib/components/ChatButton/ChatButton.d.ts +2 -3
  111. package/lib/components/ChatButton/ChatButton.js +1 -2
  112. package/lib/components/ComboBox/ComboBox.js +34 -24
  113. package/lib/components/ComposedModal/ComposedModal.js +64 -50
  114. package/lib/components/ContainedList/ContainedListItem/ContainedListItem.d.ts +2 -2
  115. package/lib/components/ContainedList/ContainedListItem/ContainedListItem.js +1 -1
  116. package/lib/components/ContentSwitcher/ContentSwitcher.js +3 -3
  117. package/lib/components/DataTable/TableBatchAction.d.ts +3 -3
  118. package/lib/components/DataTable/TableBatchAction.js +1 -1
  119. package/lib/components/DataTable/TableContainer.d.ts +1 -1
  120. package/lib/components/DataTable/TableContainer.js +3 -3
  121. package/lib/components/DataTable/TableExpandHeader.d.ts +6 -5
  122. package/lib/components/DataTable/TableToolbarMenu.d.ts +2 -2
  123. package/lib/components/DataTable/TableToolbarMenu.js +1 -1
  124. package/lib/components/DatePicker/DatePicker.js +2 -2
  125. package/lib/components/DatePicker/plugins/fixEventsPlugin.js +1 -1
  126. package/lib/components/Dialog/index.d.ts +42 -4
  127. package/lib/components/Dialog/index.js +190 -0
  128. package/lib/components/ExpandableSearch/ExpandableSearch.js +2 -2
  129. package/lib/components/FeatureFlags/index.d.ts +3 -1
  130. package/lib/components/FeatureFlags/index.js +3 -0
  131. package/lib/components/FileUploader/FileUploader.d.ts +1 -1
  132. package/lib/components/FileUploader/FileUploader.js +2 -2
  133. package/lib/components/FileUploader/FileUploaderButton.js +2 -2
  134. package/lib/components/FileUploader/FileUploaderDropContainer.d.ts +1 -1
  135. package/lib/components/FileUploader/FileUploaderDropContainer.js +6 -4
  136. package/lib/components/FileUploader/FileUploaderItem.d.ts +1 -1
  137. package/lib/components/FileUploader/FileUploaderItem.js +2 -2
  138. package/lib/components/Grid/CSSGrid.js +18 -14
  139. package/lib/components/Grid/FlexGrid.js +7 -6
  140. package/lib/components/Grid/GridTypes.d.ts +5 -3
  141. package/lib/components/IconButton/index.js +3 -3
  142. package/lib/components/Layer/index.d.ts +4 -6
  143. package/lib/components/Layer/index.js +5 -6
  144. package/lib/components/Link/Link.d.ts +2 -3
  145. package/lib/components/Link/Link.js +1 -2
  146. package/lib/components/ListBox/ListBoxMenuItem.d.ts +3 -3
  147. package/lib/components/ListBox/ListBoxMenuItem.js +36 -14
  148. package/lib/components/Menu/Menu.js +2 -2
  149. package/lib/components/Menu/MenuItem.d.ts +2 -2
  150. package/lib/components/Menu/MenuItem.js +3 -3
  151. package/lib/components/Modal/Modal.js +123 -51
  152. package/lib/components/ModalWrapper/ModalWrapper.js +1 -1
  153. package/lib/components/MultiSelect/FilterableMultiSelect.js +3 -3
  154. package/lib/components/MultiSelect/MultiSelect.js +2 -2
  155. package/lib/components/Notification/Notification.d.ts +5 -13
  156. package/lib/components/Notification/Notification.js +3 -4
  157. package/lib/components/OverflowMenu/OverflowMenu.d.ts +4 -8
  158. package/lib/components/OverflowMenu/OverflowMenu.js +3 -3
  159. package/lib/components/OverflowMenu/next/index.d.ts +2 -2
  160. package/lib/components/OverflowMenu/next/index.js +1 -1
  161. package/lib/components/OverflowMenuItem/OverflowMenuItem.js +2 -2
  162. package/lib/components/ProgressIndicator/ProgressIndicator.js +2 -2
  163. package/lib/components/RadioTile/RadioTile.js +2 -2
  164. package/lib/components/Search/Search.d.ts +2 -3
  165. package/lib/components/Search/Search.js +4 -6
  166. package/lib/components/Slider/Slider.d.ts +16 -15
  167. package/lib/components/Slider/Slider.js +22 -22
  168. package/lib/components/Tabs/Tabs.d.ts +3 -6
  169. package/lib/components/Tabs/Tabs.js +8 -9
  170. package/lib/components/Tag/DismissibleTag.d.ts +3 -5
  171. package/lib/components/Tag/DismissibleTag.js +1 -2
  172. package/lib/components/Tag/OperationalTag.d.ts +2 -3
  173. package/lib/components/Tag/OperationalTag.js +1 -2
  174. package/lib/components/Tag/SelectableTag.d.ts +3 -5
  175. package/lib/components/Tag/SelectableTag.js +1 -2
  176. package/lib/components/Tag/Tag.d.ts +2 -3
  177. package/lib/components/Tag/Tag.js +1 -2
  178. package/lib/components/Tile/Tile.d.ts +3 -5
  179. package/lib/components/Tile/Tile.js +8 -6
  180. package/lib/components/Toggletip/index.js +2 -2
  181. package/lib/components/Tooltip/DefinitionTooltip.js +2 -2
  182. package/lib/components/Tooltip/Tooltip.d.ts +1 -1
  183. package/lib/components/Tooltip/Tooltip.js +2 -2
  184. package/lib/components/TreeView/TreeNode.d.ts +3 -5
  185. package/lib/components/TreeView/TreeNode.js +3 -4
  186. package/lib/components/TreeView/TreeView.js +2 -2
  187. package/lib/components/UIShell/HeaderContainer.js +2 -2
  188. package/lib/components/UIShell/HeaderMenu.js +2 -2
  189. package/lib/components/UIShell/HeaderPanel.js +2 -2
  190. package/lib/components/UIShell/SideNav.d.ts +1 -1
  191. package/lib/components/UIShell/SideNav.js +2 -2
  192. package/lib/components/UIShell/SideNavHeader.d.ts +2 -3
  193. package/lib/components/UIShell/SideNavHeader.js +1 -2
  194. package/lib/components/UIShell/SideNavLink.d.ts +2 -2
  195. package/lib/components/UIShell/SideNavLink.js +1 -1
  196. package/lib/components/UIShell/SideNavMenu.d.ts +2 -2
  197. package/lib/components/UIShell/SideNavMenu.js +3 -3
  198. package/lib/components/UIShell/SwitcherItem.js +2 -2
  199. package/lib/internal/FloatingMenu.js +5 -5
  200. package/lib/internal/OptimizedResize.d.ts +18 -0
  201. package/lib/internal/OptimizedResize.js +21 -24
  202. package/lib/internal/keyboard/index.d.ts +9 -0
  203. package/lib/internal/keyboard/keys.d.ts +23 -0
  204. package/lib/internal/keyboard/keys.js +2 -2
  205. package/lib/internal/keyboard/match.d.ts +26 -0
  206. package/lib/internal/keyboard/match.js +17 -41
  207. package/lib/internal/keyboard/navigation.d.ts +37 -0
  208. package/lib/internal/keyboard/navigation.js +15 -27
  209. package/lib/internal/useMergedRefs.js +3 -0
  210. package/package.json +6 -6
  211. package/scss/components/dialog/_dialog.scss +9 -0
  212. package/scss/components/dialog/_index.scss +9 -0
  213. package/telemetry.yml +1 -0
  214. package/es/components/Modal/next/index.d.ts +0 -171
  215. package/es/internal/focus/index.js +0 -15
  216. package/lib/components/Modal/next/index.d.ts +0 -171
  217. package/lib/internal/focus/index.js +0 -19
@@ -20,6 +20,8 @@ var isEqual = require('react-fast-compare');
20
20
  var index$1 = require('../ListBox/index.js');
21
21
  var ListBoxSelection = require('../ListBox/next/ListBoxSelection.js');
22
22
  var ListBoxTrigger = require('../ListBox/next/ListBoxTrigger.js');
23
+ var keys = require('../../internal/keyboard/keys.js');
24
+ var match = require('../../internal/keyboard/match.js');
23
25
  var useId = require('../../internal/useId.js');
24
26
  var mergeRefs = require('../../tools/mergeRefs.js');
25
27
  var deprecate = require('../../prop-types/deprecate.js');
@@ -28,10 +30,8 @@ require('../FluidForm/FluidForm.js');
28
30
  var FormContext = require('../FluidForm/FormContext.js');
29
31
  var react = require('@floating-ui/react');
30
32
  var index = require('../FeatureFlags/index.js');
31
- var match = require('../../internal/keyboard/match.js');
32
33
  var ListBoxPropTypes = require('../ListBox/ListBoxPropTypes.js');
33
34
  var Text = require('../Text/Text.js');
34
- var keys = require('../../internal/keyboard/keys.js');
35
35
 
36
36
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
37
37
 
@@ -312,31 +312,41 @@ const ComboBox = /*#__PURE__*/React.forwardRef((props, ref) => {
312
312
  return changes;
313
313
  }
314
314
  case InputKeyDownEnter:
315
- if (highlightedIndex === -1 && !allowCustomValue && state.selectedItem) {
316
- return {
317
- ...changes,
318
- selectedItem: null,
319
- inputValue: state.inputValue
320
- };
321
- }
322
- if (allowCustomValue) {
323
- setInputValue(inputValue);
324
- setHighlightedIndex(changes.selectedItem);
325
- if (onChange) {
326
- onChange({
327
- selectedItem: changes.selectedItem,
315
+ if (!allowCustomValue) {
316
+ const highlightedIndex = indexToHighlight(inputValue);
317
+ const matchingItem = items[highlightedIndex];
318
+ if (matchingItem) {
319
+ // Prevent matching items that are marked as `disabled` from
320
+ // being selected.
321
+ if (matchingItem.disabled) {
322
+ return state;
323
+ }
324
+
325
+ // Select the matching item.
326
+ return {
327
+ ...changes,
328
+ selectedItem: matchingItem,
329
+ inputValue: itemToString(matchingItem)
330
+ };
331
+ }
332
+
333
+ // If no matching item is found and there is an existing
334
+ // selection, clear the selection.
335
+ if (state.selectedItem !== null) {
336
+ return {
337
+ ...changes,
338
+ selectedItem: null,
328
339
  inputValue
329
- });
340
+ };
330
341
  }
331
- return changes;
332
- } else if (changes.selectedItem && !allowCustomValue) {
333
- return changes;
334
- } else {
335
- return {
336
- ...changes,
337
- isOpen: true
338
- };
339
342
  }
343
+
344
+ // For `allowCustomValue` or if no matching item is found, keep the
345
+ // menu open.
346
+ return {
347
+ ...changes,
348
+ isOpen: true
349
+ };
340
350
  case FunctionToggleMenu:
341
351
  case ToggleButtonClick:
342
352
  if (!changes.isOpen && state.inputValue && highlightedIndex === -1 && !allowCustomValue) {
@@ -23,12 +23,13 @@ var toggleClass = require('../../tools/toggleClass.js');
23
23
  var requiredIfGivenPropIsTruthy = require('../../prop-types/requiredIfGivenPropIsTruthy.js');
24
24
  var wrapFocus = require('../../internal/wrapFocus.js');
25
25
  var usePrefix = require('../../internal/usePrefix.js');
26
+ var keys = require('../../internal/keyboard/keys.js');
27
+ var match = require('../../internal/keyboard/match.js');
26
28
  var index$1 = require('../FeatureFlags/index.js');
27
29
  var events = require('../../tools/events.js');
28
30
  var deprecate = require('../../prop-types/deprecate.js');
31
+ var index$2 = require('../Dialog/index.js');
29
32
  var debounce = require('../../node_modules/es-toolkit/dist/compat/function/debounce.mjs.js');
30
- var match = require('../../internal/keyboard/match.js');
31
- var keys = require('../../internal/keyboard/keys.js');
32
33
 
33
34
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
34
35
 
@@ -130,12 +131,14 @@ const ComposedModal = /*#__PURE__*/React__default["default"].forwardRef(function
130
131
  const startSentinel = React.useRef(null);
131
132
  const endSentinel = React.useRef(null);
132
133
  const onMouseDownTarget = React.useRef(null);
133
- const focusTrapWithoutSentinels = index$1.useFeatureFlag('enable-experimental-focus-wrap-without-sentinels');
134
+ const enableDialogElement =
135
+ // useFeatureFlag('enable-experimental-focus-wrap-without-sentinels') ||
136
+ index$1.useFeatureFlag('enable-dialog-element');
134
137
 
135
138
  // Keep track of modal open/close state
136
139
  // and propagate it to the document.body
137
140
  React.useEffect(() => {
138
- if (open !== wasOpen) {
141
+ if (!enableDialogElement && open !== wasOpen) {
139
142
  setIsOpen(!!open);
140
143
  setWasOpen(!!open);
141
144
  toggleClass["default"](document.body, `${prefix}--body--with-modal-open`, !!open);
@@ -143,22 +146,19 @@ const ComposedModal = /*#__PURE__*/React__default["default"].forwardRef(function
143
146
  }, [open, wasOpen, prefix]);
144
147
  // Remove the document.body className on unmount
145
148
  React.useEffect(() => {
146
- return () => {
147
- toggleClass["default"](document.body, `${prefix}--body--with-modal-open`, false);
148
- };
149
+ if (!enableDialogElement) {
150
+ return () => {
151
+ toggleClass["default"](document.body, `${prefix}--body--with-modal-open`, false);
152
+ };
153
+ }
149
154
  }, []); // eslint-disable-line react-hooks/exhaustive-deps
150
155
 
151
156
  function handleKeyDown(event) {
152
- event.stopPropagation();
153
- if (match.match(event, keys.Escape)) {
154
- closeModal(event);
155
- }
156
- if (focusTrapWithoutSentinels && open && match.match(event, keys.Tab) && innerModal.current) {
157
- wrapFocus.wrapFocusWithoutSentinels({
158
- containerNode: innerModal.current,
159
- currentActiveNode: event.target,
160
- event: event
161
- });
157
+ if (!enableDialogElement) {
158
+ event.stopPropagation();
159
+ if (match.match(event, keys.Escape)) {
160
+ closeModal(event);
161
+ }
162
162
  }
163
163
  onKeyDown?.(event);
164
164
  }
@@ -238,32 +238,34 @@ const ComposedModal = /*#__PURE__*/React__default["default"].forwardRef(function
238
238
  }
239
239
  });
240
240
  React.useEffect(() => {
241
- if (!open && launcherButtonRef) {
241
+ if (!enableDialogElement && !open && launcherButtonRef) {
242
242
  setTimeout(() => {
243
243
  launcherButtonRef?.current?.focus();
244
244
  });
245
245
  }
246
246
  }, [open, launcherButtonRef]);
247
247
  React.useEffect(() => {
248
- const initialFocus = focusContainerElement => {
249
- const containerElement = focusContainerElement || innerModal.current;
250
- const primaryFocusElement = containerElement ? containerElement.querySelector(danger ? `.${prefix}--btn--secondary` : selectorPrimaryFocus) : null;
251
- if (primaryFocusElement) {
252
- return primaryFocusElement;
253
- }
254
- return button && button.current;
255
- };
256
- const focusButton = focusContainerElement => {
257
- const target = initialFocus(focusContainerElement);
258
- const closeButton = focusContainerElement.querySelector(`.${prefix}--modal-close`);
259
- if (target) {
260
- target.focus();
261
- } else if (!target && closeButton) {
262
- closeButton?.focus();
248
+ if (!enableDialogElement) {
249
+ const initialFocus = focusContainerElement => {
250
+ const containerElement = focusContainerElement || innerModal.current;
251
+ const primaryFocusElement = containerElement ? containerElement.querySelector(danger ? `.${prefix}--btn--secondary` : selectorPrimaryFocus) : null;
252
+ if (primaryFocusElement) {
253
+ return primaryFocusElement;
254
+ }
255
+ return button && button.current;
256
+ };
257
+ const focusButton = focusContainerElement => {
258
+ const target = initialFocus(focusContainerElement);
259
+ const closeButton = focusContainerElement.querySelector(`.${prefix}--modal-close`);
260
+ if (target) {
261
+ target.focus();
262
+ } else if (!target && closeButton) {
263
+ closeButton?.focus();
264
+ }
265
+ };
266
+ if (open && isOpen) {
267
+ focusButton(innerModal.current);
263
268
  }
264
- };
265
- if (open && isOpen) {
266
- focusButton(innerModal.current);
267
269
  }
268
270
  }, [open, selectorPrimaryFocus, isOpen]);
269
271
 
@@ -274,23 +276,24 @@ const ComposedModal = /*#__PURE__*/React__default["default"].forwardRef(function
274
276
  size: 'sm'
275
277
  });
276
278
  }
277
- return /*#__PURE__*/React__default["default"].createElement(index.Layer, _rollupPluginBabelHelpers["extends"]({}, rest, {
278
- level: 0,
279
- role: "presentation",
280
- ref: ref,
281
- "aria-hidden": !open,
282
- onBlur: !focusTrapWithoutSentinels ? handleBlur : () => {},
283
- onClick: events.composeEventHandlers([rest?.onClick, handleOnClick]),
284
- onMouseDown: events.composeEventHandlers([rest?.onMouseDown, handleOnMouseDown]),
285
- onKeyDown: handleKeyDown,
286
- className: modalClass
287
- }), /*#__PURE__*/React__default["default"].createElement("div", {
279
+ const modalBody = enableDialogElement ? /*#__PURE__*/React__default["default"].createElement(index$2.unstable__Dialog, {
280
+ open: open,
281
+ modal: true,
282
+ className: containerClass,
283
+ "aria-label": ariaLabel ? ariaLabel : generatedAriaLabel,
284
+ "aria-labelledby": ariaLabelledBy
285
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
286
+ ref: innerModal,
287
+ className: `${prefix}--modal-container-body`
288
+ }, slug ? normalizedDecorator : decorator ? /*#__PURE__*/React__default["default"].createElement("div", {
289
+ className: `${prefix}--modal--inner__decorator`
290
+ }, normalizedDecorator) : '', childrenWithProps)) : /*#__PURE__*/React__default["default"].createElement("div", {
288
291
  className: containerClass,
289
292
  role: "dialog",
290
293
  "aria-modal": "true",
291
294
  "aria-label": ariaLabel ? ariaLabel : generatedAriaLabel,
292
295
  "aria-labelledby": ariaLabelledBy
293
- }, !focusTrapWithoutSentinels && /*#__PURE__*/React__default["default"].createElement("button", {
296
+ }, /*#__PURE__*/React__default["default"].createElement("button", {
294
297
  type: "button",
295
298
  ref: startSentinel,
296
299
  className: `${prefix}--visually-hidden`
@@ -299,11 +302,22 @@ const ComposedModal = /*#__PURE__*/React__default["default"].forwardRef(function
299
302
  className: `${prefix}--modal-container-body`
300
303
  }, slug ? normalizedDecorator : decorator ? /*#__PURE__*/React__default["default"].createElement("div", {
301
304
  className: `${prefix}--modal--inner__decorator`
302
- }, normalizedDecorator) : '', childrenWithProps), !focusTrapWithoutSentinels && /*#__PURE__*/React__default["default"].createElement("button", {
305
+ }, normalizedDecorator) : '', childrenWithProps), /*#__PURE__*/React__default["default"].createElement("button", {
303
306
  type: "button",
304
307
  ref: endSentinel,
305
308
  className: `${prefix}--visually-hidden`
306
- }, "Focus sentinel")));
309
+ }, "Focus sentinel"));
310
+ return /*#__PURE__*/React__default["default"].createElement(index.Layer, _rollupPluginBabelHelpers["extends"]({}, rest, {
311
+ level: 0,
312
+ role: "presentation",
313
+ ref: ref,
314
+ "aria-hidden": !open,
315
+ onBlur: !enableDialogElement ? handleBlur : () => {},
316
+ onClick: events.composeEventHandlers([rest?.onClick, handleOnClick]),
317
+ onMouseDown: events.composeEventHandlers([rest?.onMouseDown, handleOnMouseDown]),
318
+ onKeyDown: handleKeyDown,
319
+ className: modalClass
320
+ }), modalBody);
307
321
  });
308
322
  ComposedModal.propTypes = {
309
323
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2022
2
+ * Copyright IBM Corp. 2022, 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 @@ interface ContainedListItemProps {
27
27
  */
28
28
  onClick?: () => void;
29
29
  /**
30
- * Provide an optional icon to render in front of the item's content.
30
+ * A component used to render an icon.
31
31
  */
32
32
  renderIcon?: ComponentType | FunctionComponent;
33
33
  }
@@ -81,7 +81,7 @@ ContainedListItem.propTypes = {
81
81
  */
82
82
  onClick: PropTypes__default["default"].func,
83
83
  /**
84
- * Provide an optional icon to render in front of the item's content.
84
+ * A component used to render an icon.
85
85
  */
86
86
  // @ts-expect-error: PropTypes are not expressive enough to cover this case
87
87
  renderIcon: PropTypes__default["default"].oneOfType([PropTypes__default["default"].func, PropTypes__default["default"].object])
@@ -16,11 +16,11 @@ var cx = require('classnames');
16
16
  var deprecate = require('../../prop-types/deprecate.js');
17
17
  var index = require('../Layout/index.js');
18
18
  var events = require('../../tools/events.js');
19
- var usePrefix = require('../../internal/usePrefix.js');
20
- var noopFn = require('../../internal/noopFn.js');
19
+ var keys = require('../../internal/keyboard/keys.js');
21
20
  var match = require('../../internal/keyboard/match.js');
22
21
  var navigation = require('../../internal/keyboard/navigation.js');
23
- var keys = require('../../internal/keyboard/keys.js');
22
+ var usePrefix = require('../../internal/usePrefix.js');
23
+ var noopFn = require('../../internal/noopFn.js');
24
24
 
25
25
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
26
26
 
@@ -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.
@@ -17,7 +17,7 @@ export interface TableBatchActionProps extends React.ButtonHTMLAttributes<HTMLBu
17
17
  */
18
18
  iconDescription?: string;
19
19
  /**
20
- * Optional function to render your own icon in the underlying button
20
+ * A component used to render an icon.
21
21
  */
22
22
  renderIcon?: React.ElementType;
23
23
  }
@@ -34,7 +34,7 @@ declare const TableBatchAction: {
34
34
  */
35
35
  iconDescription: (props: any) => Error | undefined;
36
36
  /**
37
- * Optional function to render your own icon in the underlying button
37
+ * A component used to render an icon.
38
38
  */
39
39
  renderIcon: PropTypes.Requireable<object>;
40
40
  };
@@ -48,7 +48,7 @@ TableBatchAction.propTypes = {
48
48
  return undefined;
49
49
  },
50
50
  /**
51
- * Optional function to render your own icon in the underlying button
51
+ * A component used to render an icon.
52
52
  */
53
53
  renderIcon: PropTypes__default["default"].oneOfType([PropTypes__default["default"].func, PropTypes__default["default"].object])
54
54
  };
@@ -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.
@@ -51,12 +51,12 @@ const TableContainer = _ref => {
51
51
  value: value
52
52
  }, /*#__PURE__*/React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({}, rest, {
53
53
  className: tableContainerClasses
54
- }), title && /*#__PURE__*/React__default["default"].createElement("div", {
54
+ }), (title || description) && /*#__PURE__*/React__default["default"].createElement("div", {
55
55
  className: `${prefix}--data-table-header`
56
- }, /*#__PURE__*/React__default["default"].createElement("h4", {
56
+ }, title && /*#__PURE__*/React__default["default"].createElement("h4", {
57
57
  className: `${prefix}--data-table-header__title`,
58
58
  id: titleId
59
- }, title), /*#__PURE__*/React__default["default"].createElement("p", {
59
+ }, title), description && /*#__PURE__*/React__default["default"].createElement("p", {
60
60
  className: `${prefix}--data-table-header__description`,
61
61
  id: descriptionId
62
62
  }, description)), children));
@@ -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.
@@ -45,15 +45,16 @@ export type TableExpandHeaderPropsBase = {
45
45
  */
46
46
  onExpand?(event: React.MouseEvent<HTMLButtonElement>): void;
47
47
  } & ReactAttr<HTMLTableCellElement>;
48
- export type TableExpandHeaderPropsWithToggle = Omit<TableExpandHeaderPropsBase, 'ariaLabel' | 'aria-label' | 'enableToggle' | 'onExpand'> & {
48
+ export type TableExpandHeaderPropsWithToggle = Omit<TableExpandHeaderPropsBase, 'aria-label' | 'enableToggle' | 'onExpand'> & {
49
49
  enableToggle: true;
50
- ariaLabel: string;
51
50
  ['aria-label']: string;
52
51
  onExpand(event: React.MouseEvent<HTMLButtonElement>): void;
53
52
  };
54
- export type TableExpandHeaderPropsWithExpando = Omit<TableExpandHeaderPropsBase, 'ariaLabel' | 'aria-label' | 'enableExpando' | 'onExpand'> & {
53
+ export type TableExpandHeaderPropsWithExpando = Omit<TableExpandHeaderPropsBase, 'aria-label' | 'enableExpando' | 'onExpand'> & {
54
+ /**
55
+ * @deprecated The enableExpando prop is being replaced by `enableToggle`
56
+ */
55
57
  enableExpando: true;
56
- ariaLabel: string;
57
58
  ['aria-label']: string;
58
59
  onExpand(event: React.MouseEvent<HTMLButtonElement>): void;
59
60
  };
@@ -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.
@@ -20,7 +20,7 @@ export interface TableToolbarMenuProps extends React.HTMLAttributes<HTMLDivEleme
20
20
  */
21
21
  menuOptionsClass?: string;
22
22
  /**
23
- * Optional prop to allow overriding the default menu icon
23
+ * A component used to render an icon.
24
24
  */
25
25
  renderIcon?: any;
26
26
  }
@@ -61,7 +61,7 @@ TableToolbarMenu.propTypes = {
61
61
  */
62
62
  menuOptionsClass: PropTypes__default["default"].string,
63
63
  /**
64
- * Optional prop to allow overriding the default menu icon
64
+ * A component used to render an icon.
65
65
  */
66
66
  renderIcon: PropTypes__default["default"].oneOfType([PropTypes__default["default"].func, PropTypes__default["default"].object])
67
67
  };
@@ -20,13 +20,13 @@ var appendToPlugin = require('./plugins/appendToPlugin.js');
20
20
  var fixEventsPlugin = require('./plugins/fixEventsPlugin.js');
21
21
  var rangePlugin = require('./plugins/rangePlugin.js');
22
22
  var deprecate = require('../../prop-types/deprecate.js');
23
+ var keys = require('../../internal/keyboard/keys.js');
24
+ var match = require('../../internal/keyboard/match.js');
23
25
  var usePrefix = require('../../internal/usePrefix.js');
24
26
  var useSavedCallback = require('../../internal/useSavedCallback.js');
25
27
  require('../FluidForm/FluidForm.js');
26
28
  var FormContext = require('../FluidForm/FormContext.js');
27
29
  var iconsReact = require('@carbon/icons-react');
28
- var match = require('../../internal/keyboard/match.js');
29
- var keys = require('../../internal/keyboard/keys.js');
30
30
 
31
31
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
32
32
 
@@ -9,8 +9,8 @@
9
9
 
10
10
  Object.defineProperty(exports, '__esModule', { value: true });
11
11
 
12
- var match = require('../../../internal/keyboard/match.js');
13
12
  var keys = require('../../../internal/keyboard/keys.js');
13
+ var match = require('../../../internal/keyboard/match.js');
14
14
 
15
15
  /**
16
16
  * @param {object} config Plugin configuration.
@@ -12,9 +12,28 @@ export interface DialogProps extends ReactAttr<HTMLDialogElement> {
12
12
  */
13
13
  children?: React.ReactNode;
14
14
  /**
15
- * Specifies whether the dialog is modal or non-modal
15
+ * Specify an optional className to be applied to the modal root node
16
+ */
17
+ className?: string;
18
+ /**
19
+ * Specifies whether the dialog is modal or non-modal. This cannot be changed
20
+ * while open=true
16
21
  */
17
22
  modal?: boolean;
23
+ /**
24
+ * Specify a handler for the dialog's cancel event.
25
+ * The browser fires this event when the user presses the Esc key and is cancelable.
26
+ */
27
+ onCancel?: React.ReactEventHandler<HTMLDialogElement>;
28
+ /**
29
+ * Specify a click handler applied to the dialog.
30
+ */
31
+ onClick?: React.ReactEventHandler<HTMLDialogElement>;
32
+ /**
33
+ * Specify a handler the dialog's close event.
34
+ * The browser fires this event after the dialog has closed.
35
+ */
36
+ onClose?: React.ReactEventHandler<HTMLDialogElement>;
18
37
  /**
19
38
  * Specify a handler for closing Dialog.
20
39
  * The handler should care of closing Dialog, e.g. changing `open` prop.
@@ -25,6 +44,25 @@ export interface DialogProps extends ReactAttr<HTMLDialogElement> {
25
44
  */
26
45
  open?: boolean;
27
46
  }
28
- declare const unstable__Dialog: React.ForwardRefExoticComponent<DialogProps & React.RefAttributes<unknown>>;
29
- export { unstable__Dialog };
30
- export default unstable__Dialog;
47
+ export declare const unstable__Dialog: React.ForwardRefExoticComponent<DialogProps & React.RefAttributes<unknown>>;
48
+ export interface DialogHeaderProps extends ReactAttr<HTMLDivElement> {
49
+ /**
50
+ * Provide the contents to be rendered inside of this component
51
+ */
52
+ children?: React.ReactNode;
53
+ }
54
+ export declare const DialogHeader: React.ForwardRefExoticComponent<DialogHeaderProps & React.RefAttributes<HTMLDivElement>>;
55
+ export interface DialogControlsProps extends ReactAttr<HTMLDivElement> {
56
+ /**
57
+ * Provide the contents to be rendered inside of this component
58
+ */
59
+ children?: React.ReactNode;
60
+ }
61
+ export declare const DialogControls: React.ForwardRefExoticComponent<DialogControlsProps & React.RefAttributes<HTMLDivElement>>;
62
+ export interface DialogCloseButtonProps extends ReactAttr<HTMLDivElement> {
63
+ /**
64
+ * Specify a click handler applied to the IconButton
65
+ */
66
+ onClick?: React.MouseEventHandler;
67
+ }
68
+ export declare const DialogCloseButton: React.ForwardRefExoticComponent<DialogCloseButtonProps & React.RefAttributes<HTMLDivElement>>;