@carbon/react 1.29.1 → 1.30.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 (580) hide show
  1. package/es/_virtual/_rollupPluginBabelHelpers.js +16 -5
  2. package/es/components/Accordion/Accordion.Skeleton.js +0 -7
  3. package/es/components/Accordion/Accordion.js +1 -8
  4. package/es/components/Accordion/AccordionItem.js +5 -19
  5. package/es/components/AspectRatio/AspectRatio.js +0 -5
  6. package/es/components/Breadcrumb/Breadcrumb.Skeleton.js +0 -3
  7. package/es/components/Breadcrumb/Breadcrumb.js +0 -3
  8. package/es/components/Breadcrumb/BreadcrumbItem.js +0 -7
  9. package/es/components/Button/Button.Skeleton.js +2 -7
  10. package/es/components/Button/Button.js +2 -36
  11. package/es/components/ButtonSet/ButtonSet.js +0 -2
  12. package/es/components/Checkbox/Checkbox.Skeleton.js +0 -1
  13. package/es/components/Checkbox/Checkbox.js +4 -20
  14. package/es/components/CheckboxGroup/CheckboxGroup.js +0 -11
  15. package/es/components/ClassPrefix/index.d.ts +26 -0
  16. package/es/components/ClassPrefix/index.js +0 -2
  17. package/es/components/CodeSnippet/CodeSnippet.Skeleton.js +0 -5
  18. package/es/components/CodeSnippet/CodeSnippet.js +6 -45
  19. package/es/components/ComboBox/ComboBox.js +12 -79
  20. package/es/components/ComboBox/tools/filter.js +0 -1
  21. package/es/components/ComboButton/index.js +0 -14
  22. package/es/components/ComposedModal/ComposedModal.js +2 -32
  23. package/es/components/ComposedModal/ModalFooter.js +0 -21
  24. package/es/components/ComposedModal/ModalHeader.js +0 -12
  25. package/es/components/ContainedList/ContainedList.js +5 -32
  26. package/es/components/ContainedList/ContainedListItem/ContainedListItem.js +0 -6
  27. package/es/components/ContentSwitcher/ContentSwitcher.js +11 -23
  28. package/es/components/ContextMenu/useContextMenu.js +1 -6
  29. package/es/components/Copy/Copy.js +8 -31
  30. package/es/components/CopyButton/CopyButton.js +0 -4
  31. package/es/components/DangerButton/DangerButton.js +0 -1
  32. package/es/components/DataTable/DataTable.js +171 -91
  33. package/es/components/DataTable/Table.js +0 -6
  34. package/es/components/DataTable/TableBatchAction.js +0 -4
  35. package/es/components/DataTable/TableBatchActions.js +0 -8
  36. package/es/components/DataTable/TableBody.js +0 -1
  37. package/es/components/DataTable/TableContainer.js +0 -5
  38. package/es/components/DataTable/TableExpandHeader.js +0 -7
  39. package/es/components/DataTable/TableExpandRow.js +0 -6
  40. package/es/components/DataTable/TableExpandedRow.js +0 -6
  41. package/es/components/DataTable/TableHeader.d.ts +1 -1
  42. package/es/components/DataTable/TableHeader.js +3 -19
  43. package/es/components/DataTable/TableRow.js +4 -5
  44. package/es/components/DataTable/TableSelectAll.js +0 -8
  45. package/es/components/DataTable/TableSelectRow.js +2 -10
  46. package/es/components/DataTable/TableToolbar.js +0 -3
  47. package/es/components/DataTable/TableToolbarMenu.d.ts +1 -1
  48. package/es/components/DataTable/TableToolbarMenu.js +3 -6
  49. package/es/components/DataTable/TableToolbarSearch.js +2 -30
  50. package/es/components/DataTable/state/getDerivedStateFromProps.js +0 -4
  51. package/es/components/DataTable/state/sorting.js +5 -8
  52. package/es/components/DataTable/tools/denormalize.js +2 -2
  53. package/es/components/DataTable/tools/filter.js +0 -2
  54. package/es/components/DataTable/tools/instanceId.js +0 -1
  55. package/es/components/DataTable/tools/normalize.js +10 -10
  56. package/es/components/DataTable/tools/sorting.js +5 -13
  57. package/es/components/DataTableSkeleton/DataTableSkeleton.js +5 -20
  58. package/es/components/DatePicker/DatePicker.Skeleton.js +0 -6
  59. package/es/components/DatePicker/DatePicker.js +153 -175
  60. package/es/components/DatePicker/plugins/appendToPlugin.js +3 -7
  61. package/es/components/DatePicker/plugins/fixEventsPlugin.js +14 -25
  62. package/es/components/DatePicker/plugins/rangePlugin.js +2 -7
  63. package/es/components/DatePickerInput/DatePickerInput.js +2 -28
  64. package/es/components/Dropdown/Dropdown.Skeleton.js +0 -2
  65. package/es/components/Dropdown/Dropdown.js +43 -52
  66. package/es/components/ErrorBoundary/ErrorBoundary.js +0 -10
  67. package/es/components/ErrorBoundary/ErrorBoundaryContext.js +0 -1
  68. package/es/components/ExpandableSearch/ExpandableSearch.js +1 -10
  69. package/es/components/FeatureFlags/index.js +8 -20
  70. package/es/components/FileUploader/FileUploader.Skeleton.js +0 -2
  71. package/es/components/FileUploader/FileUploader.js +3 -38
  72. package/es/components/FileUploader/FileUploaderButton.js +3 -24
  73. package/es/components/FileUploader/FileUploaderDropContainer.js +1 -28
  74. package/es/components/FileUploader/FileUploaderItem.js +5 -12
  75. package/es/components/FileUploader/Filename.js +6 -10
  76. package/es/components/FluidComboBox/FluidComboBox.Skeleton.js +0 -1
  77. package/es/components/FluidComboBox/FluidComboBox.js +0 -18
  78. package/es/components/FluidDatePicker/FluidDatePicker.Skeleton.js +0 -2
  79. package/es/components/FluidDatePicker/FluidDatePicker.js +0 -6
  80. package/es/components/FluidDatePickerInput/FluidDatePickerInput.js +2 -1
  81. package/es/components/FluidDropdown/FluidDropdown.Skeleton.js +0 -1
  82. package/es/components/FluidDropdown/FluidDropdown.js +0 -18
  83. package/es/components/FluidForm/FluidForm.js +0 -2
  84. package/es/components/FluidMultiSelect/FluidMultiSelect.Skeleton.js +0 -1
  85. package/es/components/FluidMultiSelect/FluidMultiSelect.js +0 -19
  86. package/es/components/FluidSelect/FluidSelect.Skeleton.js +0 -1
  87. package/es/components/FluidSelect/FluidSelect.js +0 -10
  88. package/es/components/FluidTextArea/FluidTextArea.Skeleton.js +0 -1
  89. package/es/components/FluidTextArea/FluidTextArea.js +0 -20
  90. package/es/components/FluidTextInput/FluidTextInput.Skeleton.js +0 -1
  91. package/es/components/FluidTextInput/FluidTextInput.js +0 -14
  92. package/es/components/FluidTimePicker/FluidTimePicker.Skeleton.js +0 -3
  93. package/es/components/FluidTimePicker/FluidTimePicker.js +1 -11
  94. package/es/components/FluidTimePickerSelect/FluidTimePickerSelect.js +0 -6
  95. package/es/components/Form/Form.d.ts +23 -0
  96. package/es/components/Form/Form.js +3 -6
  97. package/es/components/Form/index.d.ts +7 -0
  98. package/es/components/FormGroup/FormGroup.js +0 -7
  99. package/es/components/FormItem/FormItem.js +0 -2
  100. package/es/components/FormLabel/FormLabel.js +1 -7
  101. package/es/components/Grid/CSSGrid.js +2 -15
  102. package/es/components/Grid/Column.js +18 -59
  103. package/es/components/Grid/ColumnHang.js +2 -5
  104. package/es/components/Grid/FlexGrid.js +2 -8
  105. package/es/components/Grid/Grid.js +0 -8
  106. package/es/components/Grid/GridContext.js +1 -3
  107. package/es/components/Grid/Row.js +2 -7
  108. package/es/components/Heading/index.js +0 -4
  109. package/es/components/Icon/Icon.Skeleton.js +2 -2
  110. package/es/components/IconButton/index.js +0 -10
  111. package/es/components/IdPrefix/index.js +0 -2
  112. package/es/components/InlineCheckbox/InlineCheckbox.js +0 -14
  113. package/es/components/InlineLoading/InlineLoading.js +0 -12
  114. package/es/components/Layer/index.js +3 -6
  115. package/es/components/Layout/LayoutDirection.js +0 -3
  116. package/es/components/Layout/useLayoutDirection.js +0 -1
  117. package/es/components/Link/Link.js +3 -10
  118. package/es/components/ListBox/ListBox.js +2 -13
  119. package/es/components/ListBox/ListBoxField.js +0 -5
  120. package/es/components/ListBox/ListBoxMenuIcon.js +0 -4
  121. package/es/components/ListBox/ListBoxMenuItem.js +2 -6
  122. package/es/components/ListBox/ListBoxPropTypes.d.ts +2 -2
  123. package/es/components/ListBox/ListBoxSelection.js +1 -13
  124. package/es/components/ListBox/next/ListBoxSelection.js +1 -14
  125. package/es/components/ListBox/next/ListBoxTrigger.js +1 -3
  126. package/es/components/ListItem/ListItem.d.ts +23 -0
  127. package/es/components/ListItem/ListItem.js +4 -8
  128. package/es/components/ListItem/index.d.ts +7 -0
  129. package/es/components/Loading/Loading.js +0 -6
  130. package/es/components/Menu/Menu.js +22 -40
  131. package/es/components/Menu/MenuContext.js +4 -5
  132. package/es/components/Menu/MenuItem.js +5 -39
  133. package/es/components/MenuButton/index.js +0 -9
  134. package/es/components/Modal/Modal.js +1 -46
  135. package/es/components/ModalWrapper/ModalWrapper.js +2 -15
  136. package/es/components/MultiSelect/FilterableMultiSelect.js +2 -60
  137. package/es/components/MultiSelect/MultiSelect.js +22 -70
  138. package/es/components/MultiSelect/MultiSelectPropTypes.js +0 -1
  139. package/es/components/MultiSelect/index.js +0 -1
  140. package/es/components/MultiSelect/tools/itemToString.js +0 -2
  141. package/es/components/MultiSelect/tools/sorting.js +3 -4
  142. package/es/components/Notification/Notification.js +0 -78
  143. package/es/components/NumberInput/NumberInput.Skeleton.js +0 -2
  144. package/es/components/NumberInput/NumberInput.js +3 -60
  145. package/es/components/OrderedList/OrderedList.d.ts +39 -0
  146. package/es/components/OrderedList/OrderedList.js +7 -19
  147. package/es/components/{Form/index.js → OrderedList/index.d.ts} +1 -3
  148. package/es/components/OverflowMenu/OverflowMenu.js +65 -86
  149. package/es/components/OverflowMenuItem/OverflowMenuItem.js +6 -23
  150. package/es/components/OverflowMenuV2/index.js +0 -5
  151. package/es/components/Pagination/Pagination.Skeleton.js +0 -2
  152. package/es/components/Pagination/Pagination.js +11 -47
  153. package/es/components/Pagination/experimental/PageSelector.js +0 -10
  154. package/es/components/Pagination/experimental/Pagination.js +2 -48
  155. package/es/components/PaginationNav/PaginationNav.js +15 -59
  156. package/es/components/Popover/index.d.ts +14 -8
  157. package/es/components/Popover/index.js +44 -48
  158. package/es/components/PrimaryButton/PrimaryButton.js +0 -1
  159. package/es/components/ProgressBar/ProgressBar.js +0 -15
  160. package/es/components/ProgressIndicator/ProgressIndicator.Skeleton.js +0 -4
  161. package/es/components/ProgressIndicator/ProgressIndicator.js +2 -40
  162. package/es/components/RadioButton/RadioButton.Skeleton.js +0 -1
  163. package/es/components/RadioButton/RadioButton.js +0 -13
  164. package/es/components/RadioButtonGroup/RadioButtonGroup.js +3 -23
  165. package/es/components/RadioTile/RadioTile.js +0 -12
  166. package/es/components/Search/Search.Skeleton.js +0 -2
  167. package/es/components/Search/Search.js +1 -28
  168. package/es/components/SecondaryButton/SecondaryButton.js +0 -1
  169. package/es/components/Select/Select.Skeleton.js +0 -2
  170. package/es/components/Select/Select.d.ts +1 -1
  171. package/es/components/Select/Select.js +6 -33
  172. package/es/components/SelectItem/SelectItem.js +0 -5
  173. package/es/components/SelectItemGroup/SelectItemGroup.d.ts +0 -1
  174. package/es/components/SelectItemGroup/SelectItemGroup.js +1 -7
  175. package/es/components/SkeletonIcon/SkeletonIcon.js +0 -2
  176. package/es/components/SkeletonPlaceholder/SkeletonPlaceholder.js +0 -1
  177. package/es/components/SkeletonText/SkeletonText.js +0 -12
  178. package/es/components/Slider/Slider.Skeleton.js +0 -2
  179. package/es/components/Slider/Slider.d.ts +0 -1
  180. package/es/components/Slider/Slider.js +112 -135
  181. package/es/components/Stack/Stack.js +1 -8
  182. package/es/components/StructuredList/StructuredList.Skeleton.js +0 -5
  183. package/es/components/StructuredList/StructuredList.js +1 -25
  184. package/es/components/Switch/IconSwitch.js +0 -18
  185. package/es/components/Switch/Switch.js +0 -11
  186. package/es/components/TabContent/TabContent.js +2 -6
  187. package/es/components/Tabs/Tabs.Skeleton.js +0 -4
  188. package/es/components/Tabs/Tabs.js +135 -104
  189. package/es/components/Tabs/usePressable.js +18 -31
  190. package/es/components/Tag/Tag.Skeleton.js +0 -2
  191. package/es/components/Tag/Tag.js +0 -15
  192. package/es/components/Text/Text.js +5 -18
  193. package/es/components/Text/TextDirection.js +0 -3
  194. package/es/components/Text/TextDirectionContext.js +0 -1
  195. package/es/components/Text/createTextComponent.js +0 -3
  196. package/es/components/TextArea/TextArea.Skeleton.js +0 -2
  197. package/es/components/TextArea/TextArea.js +11 -33
  198. package/es/components/TextInput/ControlledPasswordInput.js +0 -20
  199. package/es/components/TextInput/PasswordInput.js +0 -25
  200. package/es/components/TextInput/TextInput.Skeleton.js +0 -2
  201. package/es/components/TextInput/TextInput.d.ts +1 -1
  202. package/es/components/TextInput/TextInput.js +5 -33
  203. package/es/components/TextInput/util.js +3 -5
  204. package/es/components/Theme/index.js +1 -6
  205. package/es/components/Tile/Tile.js +32 -59
  206. package/es/components/TileGroup/TileGroup.js +1 -22
  207. package/es/components/TimePicker/TimePicker.js +6 -32
  208. package/es/components/TimePickerSelect/TimePickerSelect.js +2 -5
  209. package/es/components/Toggle/Toggle.Skeleton.js +0 -8
  210. package/es/components/Toggle/Toggle.js +0 -16
  211. package/es/components/ToggleSmall/ToggleSmall.Skeleton.js +0 -7
  212. package/es/components/Toggletip/index.d.ts +148 -0
  213. package/es/components/Toggletip/index.js +20 -44
  214. package/es/components/Tooltip/DefinitionTooltip.js +0 -11
  215. package/es/components/Tooltip/Tooltip.d.ts +1 -1
  216. package/es/components/Tooltip/Tooltip.js +4 -21
  217. package/es/components/TreeView/TreeNode.js +21 -66
  218. package/es/components/TreeView/TreeView.js +11 -67
  219. package/es/components/UIShell/Content.js +2 -4
  220. package/es/components/UIShell/Header.js +0 -2
  221. package/es/components/UIShell/HeaderContainer.d.ts +33 -0
  222. package/es/components/UIShell/HeaderContainer.js +13 -11
  223. package/es/components/UIShell/HeaderGlobalAction.js +0 -6
  224. package/es/components/UIShell/HeaderGlobalBar.js +0 -1
  225. package/es/components/UIShell/HeaderMenu.js +32 -31
  226. package/es/components/UIShell/HeaderMenuButton.js +2 -4
  227. package/es/components/UIShell/HeaderMenuItem.js +0 -8
  228. package/es/components/UIShell/HeaderName.js +0 -5
  229. package/es/components/UIShell/HeaderNavigation.js +0 -2
  230. package/es/components/UIShell/HeaderPanel.js +0 -2
  231. package/es/components/UIShell/HeaderSideNavItems.js +0 -2
  232. package/es/components/UIShell/Link.js +2 -3
  233. package/es/components/UIShell/SideNav.d.ts +3 -1
  234. package/es/components/UIShell/SideNav.js +44 -36
  235. package/es/components/UIShell/SideNavDetails.js +0 -3
  236. package/es/components/UIShell/SideNavDivider.js +0 -1
  237. package/es/components/UIShell/SideNavFooter.js +1 -4
  238. package/es/components/UIShell/SideNavHeader.js +0 -4
  239. package/es/components/UIShell/SideNavIcon.js +0 -3
  240. package/es/components/UIShell/SideNavItem.js +0 -3
  241. package/es/components/UIShell/SideNavItems.js +2 -6
  242. package/es/components/UIShell/SideNavLink.js +3 -7
  243. package/es/components/UIShell/SideNavLinkText.js +0 -2
  244. package/es/components/UIShell/SideNavMenu.js +0 -16
  245. package/es/components/UIShell/SideNavMenuItem.js +0 -2
  246. package/es/components/UIShell/SideNavSwitcher.js +2 -5
  247. package/es/components/UIShell/SkipToContent.d.ts +32 -0
  248. package/es/components/UIShell/SkipToContent.js +8 -15
  249. package/es/components/UIShell/Switcher.js +0 -2
  250. package/es/components/UIShell/SwitcherDivider.js +0 -1
  251. package/es/components/UIShell/SwitcherItem.js +0 -3
  252. package/es/components/UnorderedList/UnorderedList.d.ts +34 -0
  253. package/es/components/UnorderedList/UnorderedList.js +6 -16
  254. package/es/components/UnorderedList/index.d.ts +7 -0
  255. package/es/index.js +7 -8
  256. package/es/internal/ClickListener.js +3 -13
  257. package/es/internal/FloatingMenu.js +57 -63
  258. package/es/internal/OptimizedResize.js +6 -12
  259. package/es/internal/Selection.js +2 -25
  260. package/es/internal/createClassWrapper.js +0 -2
  261. package/es/internal/deprecateFieldOnObject.js +0 -4
  262. package/es/internal/focus/index.js +0 -1
  263. package/es/internal/keyboard/keys.js +2 -1
  264. package/es/internal/keyboard/match.js +1 -6
  265. package/es/internal/keyboard/navigation.js +8 -7
  266. package/es/internal/useAnnouncer.js +0 -1
  267. package/es/internal/useAttachedMenu.js +1 -9
  268. package/es/internal/useControllableState.js +6 -13
  269. package/es/internal/useDelayedState.js +2 -4
  270. package/es/internal/useEffectOnce.js +0 -1
  271. package/es/internal/useEvent.js +61 -3
  272. package/es/internal/useId.js +2 -5
  273. package/es/internal/useIsomorphicEffect.js +1 -0
  274. package/es/internal/useMergedRefs.js +2 -2
  275. package/es/internal/useNoInteractiveChildren.js +2 -13
  276. package/es/internal/useNormalizedInputProps.js +0 -3
  277. package/es/internal/useSavedCallback.js +0 -1
  278. package/es/internal/warning.js +0 -3
  279. package/es/internal/wrapFocus.js +1 -8
  280. package/es/prop-types/deprecate.js +2 -5
  281. package/es/prop-types/isRequiredOneOf.js +2 -5
  282. package/es/prop-types/requiredIfGivenPropIsTruthy.js +0 -2
  283. package/es/tools/array.js +0 -3
  284. package/es/tools/events.js +0 -3
  285. package/es/tools/mergeRefs.js +0 -2
  286. package/es/tools/wrapComponent.js +2 -5
  287. package/lib/_virtual/_rollupPluginBabelHelpers.js +17 -4
  288. package/lib/components/Accordion/Accordion.Skeleton.js +0 -7
  289. package/lib/components/Accordion/Accordion.js +1 -27
  290. package/lib/components/Accordion/AccordionItem.js +5 -19
  291. package/lib/components/AspectRatio/AspectRatio.js +0 -5
  292. package/lib/components/Breadcrumb/Breadcrumb.Skeleton.js +0 -3
  293. package/lib/components/Breadcrumb/Breadcrumb.js +0 -3
  294. package/lib/components/Breadcrumb/BreadcrumbItem.js +0 -7
  295. package/lib/components/Button/Button.Skeleton.js +2 -26
  296. package/lib/components/Button/Button.js +2 -36
  297. package/lib/components/ButtonSet/ButtonSet.js +0 -2
  298. package/lib/components/Checkbox/Checkbox.Skeleton.js +0 -1
  299. package/lib/components/Checkbox/Checkbox.js +4 -20
  300. package/lib/components/CheckboxGroup/CheckboxGroup.js +0 -11
  301. package/lib/components/ClassPrefix/index.d.ts +26 -0
  302. package/lib/components/ClassPrefix/index.js +0 -2
  303. package/lib/components/CodeSnippet/CodeSnippet.Skeleton.js +0 -5
  304. package/lib/components/CodeSnippet/CodeSnippet.js +6 -45
  305. package/lib/components/ComboBox/ComboBox.js +19 -86
  306. package/lib/components/ComboBox/tools/filter.js +0 -1
  307. package/lib/components/ComboButton/index.js +0 -14
  308. package/lib/components/ComposedModal/ComposedModal.js +2 -32
  309. package/lib/components/ComposedModal/ModalFooter.js +0 -21
  310. package/lib/components/ComposedModal/ModalHeader.js +0 -12
  311. package/lib/components/ContainedList/ContainedList.js +5 -32
  312. package/lib/components/ContainedList/ContainedListItem/ContainedListItem.js +0 -6
  313. package/lib/components/ContentSwitcher/ContentSwitcher.js +11 -23
  314. package/lib/components/ContextMenu/useContextMenu.js +1 -6
  315. package/lib/components/Copy/Copy.js +8 -50
  316. package/lib/components/CopyButton/CopyButton.js +0 -4
  317. package/lib/components/DangerButton/DangerButton.js +0 -1
  318. package/lib/components/DataTable/DataTable.js +171 -91
  319. package/lib/components/DataTable/Table.js +0 -6
  320. package/lib/components/DataTable/TableBatchAction.js +0 -4
  321. package/lib/components/DataTable/TableBatchActions.js +0 -8
  322. package/lib/components/DataTable/TableBody.js +0 -1
  323. package/lib/components/DataTable/TableContainer.js +0 -5
  324. package/lib/components/DataTable/TableExpandHeader.js +0 -7
  325. package/lib/components/DataTable/TableExpandRow.js +0 -6
  326. package/lib/components/DataTable/TableExpandedRow.js +0 -6
  327. package/lib/components/DataTable/TableHeader.d.ts +1 -1
  328. package/lib/components/DataTable/TableHeader.js +3 -19
  329. package/lib/components/DataTable/TableRow.js +4 -5
  330. package/lib/components/DataTable/TableSelectAll.js +0 -8
  331. package/lib/components/DataTable/TableSelectRow.js +2 -10
  332. package/lib/components/DataTable/TableToolbar.js +0 -3
  333. package/lib/components/DataTable/TableToolbarMenu.d.ts +1 -1
  334. package/lib/components/DataTable/TableToolbarMenu.js +3 -6
  335. package/lib/components/DataTable/TableToolbarSearch.js +2 -30
  336. package/lib/components/DataTable/state/getDerivedStateFromProps.js +0 -4
  337. package/lib/components/DataTable/state/sorting.js +5 -8
  338. package/lib/components/DataTable/tools/denormalize.js +2 -2
  339. package/lib/components/DataTable/tools/filter.js +0 -2
  340. package/lib/components/DataTable/tools/instanceId.js +0 -1
  341. package/lib/components/DataTable/tools/normalize.js +10 -10
  342. package/lib/components/DataTable/tools/sorting.js +5 -13
  343. package/lib/components/DataTableSkeleton/DataTableSkeleton.js +5 -20
  344. package/lib/components/DatePicker/DatePicker.Skeleton.js +0 -6
  345. package/lib/components/DatePicker/DatePicker.js +153 -175
  346. package/lib/components/DatePicker/plugins/appendToPlugin.js +3 -7
  347. package/lib/components/DatePicker/plugins/fixEventsPlugin.js +14 -25
  348. package/lib/components/DatePicker/plugins/rangePlugin.js +2 -7
  349. package/lib/components/DatePickerInput/DatePickerInput.js +2 -28
  350. package/lib/components/Dropdown/Dropdown.Skeleton.js +0 -2
  351. package/lib/components/Dropdown/Dropdown.js +50 -59
  352. package/lib/components/ErrorBoundary/ErrorBoundary.js +0 -10
  353. package/lib/components/ErrorBoundary/ErrorBoundaryContext.js +0 -1
  354. package/lib/components/ExpandableSearch/ExpandableSearch.js +1 -10
  355. package/lib/components/FeatureFlags/index.js +8 -20
  356. package/lib/components/FileUploader/FileUploader.Skeleton.js +0 -2
  357. package/lib/components/FileUploader/FileUploader.js +3 -57
  358. package/lib/components/FileUploader/FileUploaderButton.js +3 -43
  359. package/lib/components/FileUploader/FileUploaderDropContainer.js +1 -28
  360. package/lib/components/FileUploader/FileUploaderItem.js +5 -31
  361. package/lib/components/FileUploader/Filename.js +6 -10
  362. package/lib/components/FluidComboBox/FluidComboBox.Skeleton.js +0 -1
  363. package/lib/components/FluidComboBox/FluidComboBox.js +0 -18
  364. package/lib/components/FluidDatePicker/FluidDatePicker.Skeleton.js +0 -2
  365. package/lib/components/FluidDatePicker/FluidDatePicker.js +0 -6
  366. package/lib/components/FluidDatePickerInput/FluidDatePickerInput.js +2 -1
  367. package/lib/components/FluidDropdown/FluidDropdown.Skeleton.js +0 -1
  368. package/lib/components/FluidDropdown/FluidDropdown.js +0 -18
  369. package/lib/components/FluidForm/FluidForm.js +0 -2
  370. package/lib/components/FluidMultiSelect/FluidMultiSelect.Skeleton.js +0 -1
  371. package/lib/components/FluidMultiSelect/FluidMultiSelect.js +0 -19
  372. package/lib/components/FluidSelect/FluidSelect.Skeleton.js +0 -1
  373. package/lib/components/FluidSelect/FluidSelect.js +0 -10
  374. package/lib/components/FluidTextArea/FluidTextArea.Skeleton.js +0 -1
  375. package/lib/components/FluidTextArea/FluidTextArea.js +0 -20
  376. package/lib/components/FluidTextInput/FluidTextInput.Skeleton.js +0 -1
  377. package/lib/components/FluidTextInput/FluidTextInput.js +0 -14
  378. package/lib/components/FluidTimePicker/FluidTimePicker.Skeleton.js +0 -3
  379. package/lib/components/FluidTimePicker/FluidTimePicker.js +1 -11
  380. package/lib/components/FluidTimePickerSelect/FluidTimePickerSelect.js +0 -6
  381. package/lib/components/Form/Form.d.ts +23 -0
  382. package/lib/components/Form/Form.js +3 -6
  383. package/lib/components/Form/index.d.ts +7 -0
  384. package/lib/components/FormGroup/FormGroup.js +0 -7
  385. package/lib/components/FormItem/FormItem.js +0 -2
  386. package/lib/components/FormLabel/FormLabel.js +1 -26
  387. package/lib/components/Grid/CSSGrid.js +2 -15
  388. package/lib/components/Grid/Column.js +18 -59
  389. package/lib/components/Grid/ColumnHang.js +2 -5
  390. package/lib/components/Grid/FlexGrid.js +2 -8
  391. package/lib/components/Grid/Grid.js +0 -8
  392. package/lib/components/Grid/GridContext.js +1 -3
  393. package/lib/components/Grid/Row.js +2 -7
  394. package/lib/components/Heading/index.js +0 -4
  395. package/lib/components/Icon/Icon.Skeleton.js +2 -2
  396. package/lib/components/IconButton/index.js +0 -10
  397. package/lib/components/IdPrefix/index.js +0 -2
  398. package/lib/components/InlineCheckbox/InlineCheckbox.js +0 -14
  399. package/lib/components/InlineLoading/InlineLoading.js +0 -12
  400. package/lib/components/Layer/index.js +3 -6
  401. package/lib/components/Layout/LayoutDirection.js +0 -3
  402. package/lib/components/Layout/useLayoutDirection.js +0 -1
  403. package/lib/components/Link/Link.js +3 -10
  404. package/lib/components/ListBox/ListBox.js +2 -13
  405. package/lib/components/ListBox/ListBoxField.js +0 -5
  406. package/lib/components/ListBox/ListBoxMenuIcon.js +0 -4
  407. package/lib/components/ListBox/ListBoxMenuItem.js +2 -6
  408. package/lib/components/ListBox/ListBoxPropTypes.d.ts +2 -2
  409. package/lib/components/ListBox/ListBoxSelection.js +1 -13
  410. package/lib/components/ListBox/next/ListBoxSelection.js +1 -14
  411. package/lib/components/ListBox/next/ListBoxTrigger.js +1 -3
  412. package/lib/components/ListItem/ListItem.d.ts +23 -0
  413. package/lib/components/ListItem/ListItem.js +4 -8
  414. package/lib/components/ListItem/index.d.ts +7 -0
  415. package/lib/components/Loading/Loading.js +0 -6
  416. package/lib/components/Menu/Menu.js +22 -40
  417. package/lib/components/Menu/MenuContext.js +4 -5
  418. package/lib/components/Menu/MenuItem.js +5 -39
  419. package/lib/components/MenuButton/index.js +0 -9
  420. package/lib/components/Modal/Modal.js +1 -46
  421. package/lib/components/ModalWrapper/ModalWrapper.js +2 -15
  422. package/lib/components/MultiSelect/FilterableMultiSelect.js +8 -66
  423. package/lib/components/MultiSelect/MultiSelect.js +30 -78
  424. package/lib/components/MultiSelect/MultiSelectPropTypes.js +0 -1
  425. package/lib/components/MultiSelect/index.js +0 -1
  426. package/lib/components/MultiSelect/tools/itemToString.js +0 -2
  427. package/lib/components/MultiSelect/tools/sorting.js +3 -4
  428. package/lib/components/Notification/Notification.js +0 -78
  429. package/lib/components/NumberInput/NumberInput.Skeleton.js +0 -2
  430. package/lib/components/NumberInput/NumberInput.js +3 -60
  431. package/lib/components/OrderedList/OrderedList.d.ts +39 -0
  432. package/lib/components/OrderedList/OrderedList.js +7 -19
  433. package/lib/components/OrderedList/index.d.ts +7 -0
  434. package/lib/components/OverflowMenu/OverflowMenu.js +65 -86
  435. package/lib/components/OverflowMenuItem/OverflowMenuItem.js +6 -23
  436. package/lib/components/OverflowMenuV2/index.js +0 -5
  437. package/lib/components/Pagination/Pagination.Skeleton.js +0 -2
  438. package/lib/components/Pagination/Pagination.js +11 -47
  439. package/lib/components/Pagination/experimental/PageSelector.js +0 -10
  440. package/lib/components/Pagination/experimental/Pagination.js +2 -67
  441. package/lib/components/PaginationNav/PaginationNav.js +15 -78
  442. package/lib/components/Popover/index.d.ts +14 -8
  443. package/lib/components/Popover/index.js +44 -48
  444. package/lib/components/PrimaryButton/PrimaryButton.js +0 -1
  445. package/lib/components/ProgressBar/ProgressBar.js +0 -15
  446. package/lib/components/ProgressIndicator/ProgressIndicator.Skeleton.js +0 -4
  447. package/lib/components/ProgressIndicator/ProgressIndicator.js +2 -40
  448. package/lib/components/RadioButton/RadioButton.Skeleton.js +0 -1
  449. package/lib/components/RadioButton/RadioButton.js +0 -13
  450. package/lib/components/RadioButtonGroup/RadioButtonGroup.js +3 -23
  451. package/lib/components/RadioTile/RadioTile.js +0 -12
  452. package/lib/components/Search/Search.Skeleton.js +0 -2
  453. package/lib/components/Search/Search.js +1 -28
  454. package/lib/components/SecondaryButton/SecondaryButton.js +0 -1
  455. package/lib/components/Select/Select.Skeleton.js +0 -2
  456. package/lib/components/Select/Select.d.ts +1 -1
  457. package/lib/components/Select/Select.js +6 -33
  458. package/lib/components/SelectItem/SelectItem.js +0 -5
  459. package/lib/components/SelectItemGroup/SelectItemGroup.d.ts +0 -1
  460. package/lib/components/SelectItemGroup/SelectItemGroup.js +1 -26
  461. package/lib/components/SkeletonIcon/SkeletonIcon.js +0 -2
  462. package/lib/components/SkeletonPlaceholder/SkeletonPlaceholder.js +0 -1
  463. package/lib/components/SkeletonText/SkeletonText.js +0 -12
  464. package/lib/components/Slider/Slider.Skeleton.js +0 -2
  465. package/lib/components/Slider/Slider.d.ts +0 -1
  466. package/lib/components/Slider/Slider.js +112 -154
  467. package/lib/components/Stack/Stack.js +1 -8
  468. package/lib/components/StructuredList/StructuredList.Skeleton.js +0 -5
  469. package/lib/components/StructuredList/StructuredList.js +1 -25
  470. package/lib/components/Switch/IconSwitch.js +0 -18
  471. package/lib/components/Switch/Switch.js +0 -11
  472. package/lib/components/TabContent/TabContent.js +2 -6
  473. package/lib/components/Tabs/Tabs.Skeleton.js +0 -4
  474. package/lib/components/Tabs/Tabs.js +133 -102
  475. package/lib/components/Tabs/usePressable.js +18 -31
  476. package/lib/components/Tag/Tag.Skeleton.js +0 -2
  477. package/lib/components/Tag/Tag.js +0 -15
  478. package/lib/components/Text/Text.js +5 -18
  479. package/lib/components/Text/TextDirection.js +0 -3
  480. package/lib/components/Text/TextDirectionContext.js +0 -1
  481. package/lib/components/Text/createTextComponent.js +0 -3
  482. package/lib/components/TextArea/TextArea.Skeleton.js +0 -2
  483. package/lib/components/TextArea/TextArea.js +10 -32
  484. package/lib/components/TextInput/ControlledPasswordInput.js +0 -20
  485. package/lib/components/TextInput/PasswordInput.js +0 -25
  486. package/lib/components/TextInput/TextInput.Skeleton.js +0 -2
  487. package/lib/components/TextInput/TextInput.d.ts +1 -1
  488. package/lib/components/TextInput/TextInput.js +5 -52
  489. package/lib/components/TextInput/util.js +3 -5
  490. package/lib/components/Theme/index.js +1 -6
  491. package/lib/components/Tile/Tile.js +31 -58
  492. package/lib/components/TileGroup/TileGroup.js +1 -22
  493. package/lib/components/TimePicker/TimePicker.js +6 -32
  494. package/lib/components/TimePickerSelect/TimePickerSelect.js +2 -5
  495. package/lib/components/Toggle/Toggle.Skeleton.js +0 -8
  496. package/lib/components/Toggle/Toggle.js +0 -16
  497. package/lib/components/ToggleSmall/ToggleSmall.Skeleton.js +0 -7
  498. package/lib/components/Toggletip/index.d.ts +148 -0
  499. package/lib/components/Toggletip/index.js +20 -44
  500. package/lib/components/Tooltip/DefinitionTooltip.js +0 -11
  501. package/lib/components/Tooltip/Tooltip.d.ts +1 -1
  502. package/lib/components/Tooltip/Tooltip.js +4 -21
  503. package/lib/components/TreeView/TreeNode.js +21 -66
  504. package/lib/components/TreeView/TreeView.js +11 -67
  505. package/lib/components/UIShell/Content.js +2 -4
  506. package/lib/components/UIShell/Header.js +0 -2
  507. package/lib/components/UIShell/HeaderContainer.d.ts +33 -0
  508. package/lib/components/UIShell/HeaderContainer.js +13 -11
  509. package/lib/components/UIShell/HeaderGlobalAction.js +0 -6
  510. package/lib/components/UIShell/HeaderGlobalBar.js +0 -1
  511. package/lib/components/UIShell/HeaderMenu.js +32 -31
  512. package/lib/components/UIShell/HeaderMenuButton.js +2 -4
  513. package/lib/components/UIShell/HeaderMenuItem.js +0 -8
  514. package/lib/components/UIShell/HeaderName.js +0 -5
  515. package/lib/components/UIShell/HeaderNavigation.js +0 -2
  516. package/lib/components/UIShell/HeaderPanel.js +0 -2
  517. package/lib/components/UIShell/HeaderSideNavItems.js +0 -2
  518. package/lib/components/UIShell/Link.js +2 -3
  519. package/lib/components/UIShell/SideNav.d.ts +3 -1
  520. package/lib/components/UIShell/SideNav.js +43 -35
  521. package/lib/components/UIShell/SideNavDetails.js +0 -3
  522. package/lib/components/UIShell/SideNavDivider.js +0 -1
  523. package/lib/components/UIShell/SideNavFooter.js +1 -4
  524. package/lib/components/UIShell/SideNavHeader.js +0 -4
  525. package/lib/components/UIShell/SideNavIcon.js +0 -3
  526. package/lib/components/UIShell/SideNavItem.js +0 -3
  527. package/lib/components/UIShell/SideNavItems.js +2 -6
  528. package/lib/components/UIShell/SideNavLink.js +3 -7
  529. package/lib/components/UIShell/SideNavLinkText.js +0 -2
  530. package/lib/components/UIShell/SideNavMenu.js +0 -16
  531. package/lib/components/UIShell/SideNavMenuItem.js +0 -2
  532. package/lib/components/UIShell/SideNavSwitcher.js +2 -5
  533. package/lib/components/UIShell/SkipToContent.d.ts +32 -0
  534. package/lib/components/UIShell/SkipToContent.js +8 -15
  535. package/lib/components/UIShell/Switcher.js +0 -2
  536. package/lib/components/UIShell/SwitcherDivider.js +0 -1
  537. package/lib/components/UIShell/SwitcherItem.js +0 -3
  538. package/lib/components/UnorderedList/UnorderedList.d.ts +34 -0
  539. package/lib/components/UnorderedList/UnorderedList.js +6 -16
  540. package/lib/components/UnorderedList/index.d.ts +7 -0
  541. package/lib/index.js +42 -43
  542. package/lib/internal/ClickListener.js +3 -13
  543. package/lib/internal/FloatingMenu.js +57 -63
  544. package/lib/internal/OptimizedResize.js +6 -12
  545. package/lib/internal/Selection.js +2 -25
  546. package/lib/internal/createClassWrapper.js +0 -2
  547. package/lib/internal/deprecateFieldOnObject.js +0 -4
  548. package/lib/internal/focus/index.js +0 -1
  549. package/lib/internal/keyboard/keys.js +2 -1
  550. package/lib/internal/keyboard/match.js +1 -6
  551. package/lib/internal/keyboard/navigation.js +8 -7
  552. package/lib/internal/useAnnouncer.js +0 -1
  553. package/lib/internal/useAttachedMenu.js +1 -9
  554. package/lib/internal/useControllableState.js +6 -13
  555. package/lib/internal/useDelayedState.js +2 -4
  556. package/lib/internal/useEffectOnce.js +0 -1
  557. package/lib/internal/useEvent.js +61 -2
  558. package/lib/internal/useId.js +2 -5
  559. package/lib/internal/useIsomorphicEffect.js +1 -0
  560. package/lib/internal/useMergedRefs.js +2 -2
  561. package/lib/internal/useNoInteractiveChildren.js +2 -13
  562. package/lib/internal/useNormalizedInputProps.js +0 -3
  563. package/lib/internal/useSavedCallback.js +0 -1
  564. package/lib/internal/warning.js +0 -3
  565. package/lib/internal/wrapFocus.js +1 -8
  566. package/lib/prop-types/deprecate.js +2 -5
  567. package/lib/prop-types/isRequiredOneOf.js +2 -5
  568. package/lib/prop-types/requiredIfGivenPropIsTruthy.js +0 -2
  569. package/lib/tools/array.js +0 -3
  570. package/lib/tools/events.js +0 -3
  571. package/lib/tools/mergeRefs.js +0 -2
  572. package/lib/tools/wrapComponent.js +2 -5
  573. package/package.json +9 -9
  574. package/es/components/Tab/Tab.js +0 -185
  575. package/es/components/Tab/index.js +0 -14
  576. package/es/components/TimePickerSelect/index.js +0 -13
  577. package/lib/components/Form/index.js +0 -17
  578. package/lib/components/Tab/Tab.js +0 -214
  579. package/lib/components/Tab/index.js +0 -39
  580. package/lib/components/TimePickerSelect/index.js +0 -38
@@ -6,7 +6,7 @@
6
6
  */
7
7
 
8
8
  import { extends as _extends } from '../../_virtual/_rollupPluginBabelHelpers.js';
9
- import { ChevronLeft, ChevronRight } from '@carbon/icons-react';
9
+ import { ChevronLeft, ChevronRight, Close } from '@carbon/icons-react';
10
10
  import cx from 'classnames';
11
11
  import debounce from 'lodash.debounce';
12
12
  import PropTypes from 'prop-types';
@@ -22,28 +22,33 @@ import { getInteractiveContent } from '../../internal/useNoInteractiveChildren.j
22
22
  import { usePrefix } from '../../internal/usePrefix.js';
23
23
  import { usePressable } from './usePressable.js';
24
24
  import deprecate from '../../prop-types/deprecate.js';
25
+ import { useEvent } from '../../internal/useEvent.js';
25
26
  import { matches, match } from '../../internal/keyboard/match.js';
26
- import { ArrowRight, ArrowLeft, Home, End } from '../../internal/keyboard/keys.js';
27
+ import { ArrowRight, ArrowLeft, Home, End, Delete } from '../../internal/keyboard/keys.js';
27
28
 
28
- var _ChevronLeft, _ChevronRight;
29
+ var _ChevronLeft, _ChevronRight, _Close;
29
30
 
30
- const TabsContext = /*#__PURE__*/React__default.createContext(); // Used to keep track of position in a tablist
31
+ // Used to manage the overall state of the Tabs
32
+ const TabsContext = /*#__PURE__*/React__default.createContext();
31
33
 
32
- const TabContext = /*#__PURE__*/React__default.createContext(); // Used to keep track of position in a list of tab panels
34
+ // Used to keep track of position in a tablist
35
+ const TabContext = /*#__PURE__*/React__default.createContext();
33
36
 
37
+ // Used to keep track of position in a list of tab panels
34
38
  const TabPanelContext = /*#__PURE__*/React__default.createContext();
35
-
36
39
  function Tabs(_ref) {
37
40
  let {
38
41
  children,
39
42
  defaultSelectedIndex = 0,
40
43
  onChange,
41
- selectedIndex: controlledSelectedIndex
44
+ selectedIndex: controlledSelectedIndex,
45
+ dismissable,
46
+ onTabCloseRequest
42
47
  } = _ref;
43
- const baseId = useId('ccs'); // The active index is used to track the element which has focus in our tablist
44
-
45
- const [activeIndex, setActiveIndex] = useState(defaultSelectedIndex); // The selected index is used for the tab/panel pairing which is "visible"
46
-
48
+ const baseId = useId('ccs');
49
+ // The active index is used to track the element which has focus in our tablist
50
+ const [activeIndex, setActiveIndex] = useState(defaultSelectedIndex);
51
+ // The selected index is used for the tab/panel pairing which is "visible"
47
52
  const [selectedIndex, setSelectedIndex] = useControllableState({
48
53
  value: controlledSelectedIndex,
49
54
  defaultValue: defaultSelectedIndex,
@@ -59,6 +64,8 @@ function Tabs(_ref) {
59
64
  baseId,
60
65
  activeIndex,
61
66
  defaultSelectedIndex,
67
+ dismissable,
68
+ onTabCloseRequest,
62
69
  setActiveIndex,
63
70
  selectedIndex,
64
71
  setSelectedIndex
@@ -67,32 +74,43 @@ function Tabs(_ref) {
67
74
  value: value
68
75
  }, children);
69
76
  }
70
-
71
77
  Tabs.propTypes = {
72
78
  /**
73
79
  * Provide child elements to be rendered inside of the `Tabs`.
74
80
  * These elements should render either `TabsList` or `TabsPanels`
75
81
  */
76
82
  children: PropTypes.node,
77
-
78
83
  /**
79
84
  * Specify which content tab should be initially selected when the component
80
85
  * is first rendered
81
86
  */
82
87
  defaultSelectedIndex: PropTypes.number,
83
-
88
+ /**
89
+ * Whether the render Tab children should be dismissable.
90
+ */
91
+ dismissable: PropTypes.bool,
84
92
  /**
85
93
  * Provide an optional function which is called whenever the state of the
86
94
  * `Tabs` changes
87
95
  */
88
96
  onChange: PropTypes.func,
89
-
97
+ /**
98
+ * If specifying the `onTabCloseRequest` prop, provide a callback function
99
+ * responsible for removing the tab when close button is pressed on one of the Tab elements
100
+ */
101
+ onTabCloseRequest: props => {
102
+ if (props.dismissable && !props.onTabCloseRequest) {
103
+ return new Error('dismissable property specified without also providing an onTabCloseRequest property.');
104
+ }
105
+ return undefined;
106
+ },
90
107
  /**
91
108
  * Control which content panel is currently selected. This puts the component
92
109
  * in a controlled mode and should be used along with `onChange`
93
110
  */
94
111
  selectedIndex: PropTypes.number
95
112
  };
113
+
96
114
  /**
97
115
  * Get the next index for a given keyboard event given a count of the total
98
116
  * items and the current index
@@ -101,7 +119,6 @@ Tabs.propTypes = {
101
119
  * @param {number} index
102
120
  * @returns {number}
103
121
  */
104
-
105
122
  function getNextIndex(event, total, index) {
106
123
  if (match(event, ArrowRight)) {
107
124
  return (index + 1) % total;
@@ -113,7 +130,6 @@ function getNextIndex(event, total, index) {
113
130
  return total - 1;
114
131
  }
115
132
  }
116
-
117
133
  function TabList(_ref2) {
118
134
  let {
119
135
  activation = 'automatic',
@@ -133,7 +149,8 @@ function TabList(_ref2) {
133
149
  activeIndex,
134
150
  selectedIndex,
135
151
  setSelectedIndex,
136
- setActiveIndex
152
+ setActiveIndex,
153
+ dismissable
137
154
  } = React__default.useContext(TabsContext);
138
155
  const prefix = usePrefix();
139
156
  const ref = useRef(null);
@@ -141,25 +158,26 @@ function TabList(_ref2) {
141
158
  const nextButton = useRef(null);
142
159
  const [isScrollable, setIsScrollable] = useState(false);
143
160
  const [scrollLeft, setScrollLeft] = useState(null);
144
- const hasSecondaryLabelTabs = contained && !!React__default.Children.toArray(children).filter(child => child.props.secondaryLabel).length;
145
- const className = cx(`${prefix}--tabs`, customClassName, {
146
- [`${prefix}--tabs--contained`]: contained,
147
- [`${prefix}--tabs--light`]: light,
148
- [`${prefix}--tabs__icon--default`]: iconSize === 'default',
149
- [`${prefix}--tabs__icon--lg`]: iconSize === 'lg',
150
- [`${prefix}--tabs--tall`]: hasSecondaryLabelTabs
151
- }); // Previous Button
161
+
162
+ // Previous Button
152
163
  // VISIBLE IF:
153
164
  // SCROLLABLE
154
165
  // AND SCROLL_LEFT > 0
155
-
156
166
  const buttonWidth = 44;
157
- const isPreviousButtonVisible = ref.current ? isScrollable && scrollLeft > 0 : false; // Next Button
167
+ // Next Button
158
168
  // VISIBLE IF:
159
169
  // SCROLLABLE
160
170
  // AND SCROLL_LEFT + CLIENT_WIDTH < SCROLL_WIDTH
161
-
162
- const isNextButtonVisible = ref.current ? scrollLeft + buttonWidth + ref.current.clientWidth < ref.current.scrollWidth : false;
171
+ const [isNextButtonVisible, setIsNextButtonVisible] = useState(ref.current ? scrollLeft + buttonWidth + ref.current.clientWidth < ref.current.scrollWidth : false);
172
+ const hasSecondaryLabelTabs = contained && !!React__default.Children.toArray(children).filter(child => child.props.secondaryLabel).length;
173
+ const className = cx(`${prefix}--tabs`, customClassName, {
174
+ [`${prefix}--tabs--contained`]: contained,
175
+ [`${prefix}--tabs--light`]: light,
176
+ [`${prefix}--tabs__icon--default`]: iconSize === 'default',
177
+ [`${prefix}--tabs__icon--lg`]: iconSize === 'lg',
178
+ [`${prefix}--tabs--tall`]: hasSecondaryLabelTabs
179
+ });
180
+ const isPreviousButtonVisible = ref.current ? isScrollable && scrollLeft > 0 : false;
163
181
  const previousButtonClasses = cx(`${prefix}--tab--overflow-nav-button`, `${prefix}--tab--overflow-nav-button--previous`, {
164
182
  [`${prefix}--tab--overflow-nav-button--hidden`]: !isPreviousButtonVisible
165
183
  });
@@ -172,7 +190,6 @@ function TabList(_ref2) {
172
190
  setScrollLeft(event.target.scrollLeft);
173
191
  }, scrollDebounceWait);
174
192
  }, [scrollDebounceWait]);
175
-
176
193
  function onKeyDown(event) {
177
194
  if (matches(event, [ArrowRight, ArrowLeft, Home, End])) {
178
195
  event.preventDefault();
@@ -181,20 +198,16 @@ function TabList(_ref2) {
181
198
  });
182
199
  const currentIndex = activeTabs.indexOf(tabs.current[activation === 'automatic' ? selectedIndex : activeIndex]);
183
200
  const nextIndex = tabs.current.indexOf(activeTabs[getNextIndex(event, activeTabs.length, currentIndex)]);
184
-
185
201
  if (activation === 'automatic') {
186
202
  setSelectedIndex(nextIndex);
187
203
  } else if (activation === 'manual') {
188
204
  setActiveIndex(nextIndex);
189
205
  }
190
-
191
206
  tabs.current[nextIndex].focus();
192
207
  }
193
208
  }
194
-
195
209
  useEffectOnce(() => {
196
210
  const tab = tabs.current[selectedIndex];
197
-
198
211
  if (scrollIntoView && tab) {
199
212
  tab.scrollIntoView({
200
213
  block: 'nearest',
@@ -202,12 +215,19 @@ function TabList(_ref2) {
202
215
  });
203
216
  }
204
217
  });
218
+ useEffect(() => {
219
+ setIsNextButtonVisible(ref.current ? scrollLeft + buttonWidth + ref.current.clientWidth < ref.current.scrollWidth : false);
220
+ if (dismissable) {
221
+ if (ref.current) {
222
+ setIsScrollable(ref.current.scrollWidth > ref.current.clientWidth);
223
+ }
224
+ }
225
+ }, [scrollLeft, children, dismissable]);
205
226
  useEffectOnce(() => {
206
227
  if (tabs.current[selectedIndex].disabled) {
207
228
  const activeTabs = tabs.current.filter(tab => {
208
229
  return !tab.disabled;
209
230
  });
210
-
211
231
  if (activeTabs.length > 0) {
212
232
  const tab = activeTabs[0];
213
233
  setSelectedIndex(tabs.current.indexOf(tab));
@@ -218,21 +238,20 @@ function TabList(_ref2) {
218
238
  if (ref.current) {
219
239
  setIsScrollable(ref.current.scrollWidth > ref.current.clientWidth);
220
240
  }
221
-
222
241
  function handler() {
223
242
  if (ref.current) {
224
243
  setIsScrollable(ref.current.scrollWidth > ref.current.clientWidth);
225
244
  }
226
245
  }
227
-
228
246
  const debouncedHandler = debounce(handler, 200);
229
247
  window.addEventListener('resize', debouncedHandler);
230
248
  return () => {
231
249
  debouncedHandler.cancel();
232
250
  window.removeEventListener('resize', debouncedHandler);
233
251
  };
234
- }, []); // updates scroll location for all scroll behavior.
252
+ }, []);
235
253
 
254
+ // updates scroll location for all scroll behavior.
236
255
  useIsomorphicEffect(() => {
237
256
  if (scrollLeft !== null) {
238
257
  ref.current.scrollLeft = scrollLeft;
@@ -242,67 +261,63 @@ function TabList(_ref2) {
242
261
  if (!isScrollable) {
243
262
  return;
244
263
  }
245
-
246
264
  const tab = activation === 'manual' ? tabs.current[activeIndex] : tabs.current[selectedIndex];
247
-
248
265
  if (tab) {
249
266
  // The width of the "scroll buttons"
267
+
250
268
  // The start and end position of the selected tab
251
269
  const {
252
270
  width: tabWidth
253
271
  } = tab.getBoundingClientRect();
254
272
  const start = tab.offsetLeft;
255
- const end = tab.offsetLeft + tabWidth; // The start and end of the visible area for the tabs
273
+ const end = tab.offsetLeft + tabWidth;
256
274
 
275
+ // The start and end of the visible area for the tabs
257
276
  const visibleStart = ref.current.scrollLeft + buttonWidth;
258
- const visibleEnd = ref.current.scrollLeft + ref.current.clientWidth - buttonWidth; // The beginning of the tab is clipped and not visible
277
+ const visibleEnd = ref.current.scrollLeft + ref.current.clientWidth - buttonWidth;
259
278
 
279
+ // The beginning of the tab is clipped and not visible
260
280
  if (start < visibleStart) {
261
281
  setScrollLeft(start - buttonWidth);
262
- } // The end of teh tab is clipped and not visible
263
-
282
+ }
264
283
 
284
+ // The end of the tab is clipped and not visible
265
285
  if (end > visibleEnd) {
266
286
  setScrollLeft(end + buttonWidth - ref.current.clientWidth);
267
287
  }
268
288
  }
269
- }, [activation, activeIndex, selectedIndex, isScrollable]);
289
+ }, [activation, activeIndex, selectedIndex, isScrollable, children]);
270
290
  usePressable(previousButton, {
271
291
  onPress(_ref3) {
272
292
  let {
273
293
  longPress
274
294
  } = _ref3;
275
-
276
295
  if (!longPress) {
277
296
  setScrollLeft(Math.max(scrollLeft - ref.current.scrollWidth / tabs.current.length * 1.5, 0));
278
297
  }
279
298
  },
280
-
281
299
  onLongPress() {
282
300
  return createLongPressBehavior(ref, 'backward', setScrollLeft);
283
301
  }
284
-
285
302
  });
286
303
  usePressable(nextButton, {
287
304
  onPress(_ref4) {
288
305
  let {
289
306
  longPress
290
307
  } = _ref4;
291
-
292
308
  if (!longPress) {
293
309
  setScrollLeft(Math.min(scrollLeft + ref.current.scrollWidth / tabs.current.length * 1.5, ref.current.scrollWidth - ref.current.clientWidth));
294
310
  }
295
311
  },
296
-
297
312
  onLongPress() {
298
313
  return createLongPressBehavior(ref, 'forward', setScrollLeft);
299
314
  }
300
-
301
315
  });
302
316
  return /*#__PURE__*/React__default.createElement("div", {
303
317
  className: className
304
318
  }, /*#__PURE__*/React__default.createElement("button", _extends({
305
319
  "aria-hidden": "true",
320
+ tabIndex: "-1",
306
321
  "aria-label": "Scroll left",
307
322
  ref: previousButton,
308
323
  className: previousButtonClasses,
@@ -318,7 +333,8 @@ function TabList(_ref2) {
318
333
  return /*#__PURE__*/React__default.createElement(TabContext.Provider, {
319
334
  value: {
320
335
  index,
321
- hasSecondaryLabel: hasSecondaryLabelTabs
336
+ hasSecondaryLabel: hasSecondaryLabelTabs,
337
+ contained
322
338
  }
323
339
  }, /*#__PURE__*/React__default.cloneElement(child, {
324
340
  ref: node => {
@@ -327,75 +343,66 @@ function TabList(_ref2) {
327
343
  }));
328
344
  })), /*#__PURE__*/React__default.createElement("button", _extends({
329
345
  "aria-hidden": "true",
346
+ tabIndex: "-1",
330
347
  "aria-label": "Scroll right",
331
348
  ref: nextButton,
332
349
  className: nextButtonClasses,
333
350
  type: "button"
334
351
  }, rightOverflowButtonProps), _ChevronRight || (_ChevronRight = /*#__PURE__*/React__default.createElement(ChevronRight, null))));
335
352
  }
336
-
337
353
  TabList.propTypes = {
338
354
  /**
339
355
  * Specify whether the content tab should be activated automatically or
340
356
  * manually
341
357
  */
342
358
  activation: PropTypes.oneOf(['automatic', 'manual']),
343
-
344
359
  /**
345
360
  * Provide an accessible label to be read when a user interacts with this
346
361
  * component
347
362
  */
348
363
  'aria-label': PropTypes.string.isRequired,
349
-
350
364
  /**
351
365
  * Provide child elements to be rendered inside of `ContentTabs`.
352
366
  * These elements should render a `ContentTab`
353
367
  */
354
368
  children: PropTypes.node,
355
-
356
369
  /**
357
370
  * Specify an optional className to be added to the container node
358
371
  */
359
372
  className: PropTypes.string,
360
-
361
373
  /**
362
374
  * Specify whether component is contained type
363
375
  */
364
376
  contained: PropTypes.bool,
365
-
366
377
  /**
367
378
  * If using `IconTab`, specify the size of the icon being used.
368
379
  */
369
380
  iconSize: PropTypes.oneOf(['default', 'lg']),
370
-
371
381
  /**
372
382
  * Provide the props that describe the left overflow button
373
383
  */
374
384
  leftOverflowButtonProps: PropTypes.object,
375
-
376
385
  /**
377
386
  * Specify whether or not to use the light component variant
378
387
  */
379
388
  light: deprecate(PropTypes.bool, 'The `light` prop for `TabList` has ' + 'been deprecated in favor of the new `Layer` component. It will be removed in the next major release.'),
380
-
381
389
  /**
382
390
  * Provide the props that describe the right overflow button
383
391
  */
384
392
  rightOverflowButtonProps: PropTypes.object,
385
-
386
393
  /**
387
394
  * Optionally provide a delay (in milliseconds) passed to the lodash
388
395
  * debounce of the onScroll handler. This will impact the responsiveness
389
396
  * of scroll arrow buttons rendering when scrolling to the first or last tab.
390
397
  */
391
398
  scrollDebounceWait: PropTypes.number,
392
-
393
399
  /**
394
400
  * Choose whether or not to automatically scroll to newly selected tabs
395
401
  * on component rerender
396
402
  */
397
403
  scrollIntoView: PropTypes.bool
398
404
  };
405
+
399
406
  /**
400
407
  * Helper function to setup the behavior when a button is "long pressed". This
401
408
  * function will take a ref to the tablist, a direction, and a setter for
@@ -410,7 +417,6 @@ TabList.propTypes = {
410
417
  * @param {Function} setScrollLeft
411
418
  * @returns {Function}
412
419
  */
413
-
414
420
  function createLongPressBehavior(ref, direction, setScrollLeft) {
415
421
  // We manually override the scroll behavior to be "auto". If it is set as
416
422
  // smooth, this animation does not update correctly
@@ -418,27 +424,24 @@ function createLongPressBehavior(ref, direction, setScrollLeft) {
418
424
  ref.current.style['scroll-behavior'] = 'auto';
419
425
  const scrollDelta = direction === 'forward' ? 5 : -5;
420
426
  let frameId = null;
421
-
422
427
  function tick() {
423
428
  ref.current.scrollLeft = ref.current.scrollLeft + scrollDelta;
424
429
  frameId = requestAnimationFrame(tick);
425
430
  }
426
-
427
431
  frameId = requestAnimationFrame(tick);
428
432
  return () => {
429
433
  // Restore the previous scroll behavior
430
- ref.current.style['scroll-behavior'] = defaultScrollBehavior; // Make sure that our `scrollLeft` value is in sync with the existing
431
- // `ref` after our requestAnimationFrame loop above
434
+ ref.current.style['scroll-behavior'] = defaultScrollBehavior;
432
435
 
436
+ // Make sure that our `scrollLeft` value is in sync with the existing
437
+ // `ref` after our requestAnimationFrame loop above
433
438
  setScrollLeft(ref.current.scrollLeft);
434
-
435
439
  if (frameId) {
436
440
  cancelAnimationFrame(frameId);
437
441
  }
438
442
  };
439
443
  }
440
-
441
- const Tab = /*#__PURE__*/React__default.forwardRef(function Tab(_ref5, ref) {
444
+ const Tab = /*#__PURE__*/React__default.forwardRef(function Tab(_ref5, forwardRef) {
442
445
  let {
443
446
  as: BaseComponent = 'button',
444
447
  children,
@@ -454,18 +457,67 @@ const Tab = /*#__PURE__*/React__default.forwardRef(function Tab(_ref5, ref) {
454
457
  const {
455
458
  selectedIndex,
456
459
  setSelectedIndex,
457
- baseId
460
+ baseId,
461
+ dismissable,
462
+ onTabCloseRequest
458
463
  } = React__default.useContext(TabsContext);
459
464
  const {
460
465
  index,
461
- hasSecondaryLabel
466
+ hasSecondaryLabel,
467
+ contained
462
468
  } = React__default.useContext(TabContext);
469
+ const dismissIconRef = useRef(null);
470
+ const tabRef = useRef(null);
471
+ const ref = useMergedRefs([forwardRef, tabRef]);
472
+ const [ignoreHover, setIgnoreHover] = useState(false);
463
473
  const id = `${baseId}-tab-${index}`;
464
474
  const panelId = `${baseId}-tabpanel-${index}`;
465
475
  const className = cx(`${prefix}--tabs__nav-item`, `${prefix}--tabs__nav-link`, customClassName, {
466
476
  [`${prefix}--tabs__nav-item--selected`]: selectedIndex === index,
467
- [`${prefix}--tabs__nav-item--disabled`]: disabled
477
+ [`${prefix}--tabs__nav-item--disabled`]: disabled,
478
+ [`${prefix}--tabs__nav-item--hover-off`]: ignoreHover
468
479
  });
480
+ const onDismissIconMouseEnter = evt => {
481
+ if (contained) {
482
+ evt.stopPropagation();
483
+ setIgnoreHover(true);
484
+ tabRef.current.classList.add(`${prefix}--tabs__nav-item--hover-off`);
485
+ }
486
+ };
487
+ const onDismissIconMouseLeave = () => {
488
+ if (contained) {
489
+ tabRef.current.classList.remove(`${prefix}--tabs__nav-item--hover-off`);
490
+ setIgnoreHover(false);
491
+ }
492
+ };
493
+ useEvent(dismissIconRef, 'mouseover', onDismissIconMouseEnter);
494
+ useEvent(dismissIconRef, 'mouseleave', onDismissIconMouseLeave);
495
+ const handleClose = evt => {
496
+ evt.stopPropagation();
497
+ onTabCloseRequest?.(index);
498
+ };
499
+ const handleKeyDown = event => {
500
+ if (dismissable && match(event, Delete)) {
501
+ handleClose(event);
502
+ }
503
+ onKeyDown?.(event);
504
+ };
505
+ const DismissIcon =
506
+ /*#__PURE__*/
507
+ // eslint-disable-next-line jsx-a11y/click-events-have-key-events
508
+ React__default.createElement("div", {
509
+ role: "button",
510
+ tabIndex: -1,
511
+ "aria-hidden": true,
512
+ className: cx(`${prefix}--tabs__nav-item--close-icon`, {
513
+ [`${prefix}--visually-hidden`]: !dismissable
514
+ }),
515
+ onClick: handleClose,
516
+ "aria-label": "Close tab",
517
+ title: "Close tab",
518
+ ref: dismissIconRef
519
+ }, _Close || (_Close = /*#__PURE__*/React__default.createElement(Close, null)));
520
+ const hasIcon = Icon || dismissable;
469
521
  return /*#__PURE__*/React__default.createElement(BaseComponent, _extends({}, rest, {
470
522
  "aria-controls": panelId,
471
523
  "aria-disabled": disabled,
@@ -479,23 +531,23 @@ const Tab = /*#__PURE__*/React__default.forwardRef(function Tab(_ref5, ref) {
479
531
  if (disabled) {
480
532
  return;
481
533
  }
482
-
483
534
  setSelectedIndex(index);
484
-
485
535
  if (onClick) {
486
536
  onClick(evt);
487
537
  }
488
538
  },
489
- onKeyDown: onKeyDown,
539
+ onKeyDown: handleKeyDown,
490
540
  tabIndex: selectedIndex === index ? '0' : '-1',
491
541
  type: "button"
492
542
  }), /*#__PURE__*/React__default.createElement("div", {
493
543
  className: `${prefix}--tabs__nav-item-label-wrapper`
494
544
  }, /*#__PURE__*/React__default.createElement("span", {
495
545
  className: `${prefix}--tabs__nav-item-label`
496
- }, children), Icon && /*#__PURE__*/React__default.createElement("div", {
497
- className: `${prefix}--tabs__nav-item--icon`
498
- }, /*#__PURE__*/React__default.createElement(Icon, {
546
+ }, children), /*#__PURE__*/React__default.createElement("div", {
547
+ className: cx(`${prefix}--tabs__nav-item--icon`, {
548
+ [`${prefix}--visually-hidden`]: !hasIcon
549
+ })
550
+ }, DismissIcon, !dismissable && hasIcon && /*#__PURE__*/React__default.createElement(Icon, {
499
551
  size: 16
500
552
  }))), hasSecondaryLabel && /*#__PURE__*/React__default.createElement("div", {
501
553
  className: `${prefix}--tabs__nav-item-secondary-label`
@@ -506,45 +558,37 @@ Tab.propTypes = {
506
558
  * Provide a custom element to render instead of the default button
507
559
  */
508
560
  as: PropTypes.oneOfType([PropTypes.string, PropTypes.elementType]),
509
-
510
561
  /**
511
562
  * Provide child elements to be rendered inside of `Tab`.
512
563
  */
513
564
  children: PropTypes.node,
514
-
515
565
  /**
516
566
  * Specify an optional className to be added to your Tab
517
567
  */
518
568
  className: PropTypes.string,
519
-
520
569
  /**
521
570
  * Whether your Tab is disabled.
522
571
  */
523
572
  disabled: PropTypes.bool,
524
-
525
573
  /**
526
574
  * Provide a handler that is invoked when a user clicks on the control
527
575
  */
528
576
  onClick: PropTypes.func,
529
-
530
577
  /**
531
578
  * Provide a handler that is invoked on the key down event for the control
532
579
  */
533
580
  onKeyDown: PropTypes.func,
534
-
535
581
  /*
536
582
  * An optional parameter to allow overriding the anchor rendering.
537
583
  * Useful for using Tab along with react-router or other client
538
584
  * side router libraries.
539
585
  **/
540
586
  renderButton: PropTypes.func,
541
-
542
587
  /**
543
588
  * Optional prop to render an icon next to the label.
544
589
  * Can be a React component class
545
590
  */
546
591
  renderIcon: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
547
-
548
592
  /*
549
593
  * An optional label to render under the primary tab label.
550
594
  /* This prop is only useful for conained tabs
@@ -580,22 +624,18 @@ IconTab.propTypes = {
580
624
  * Provide an icon to be rendered inside of `IconTab` as the visual label for Tab.
581
625
  */
582
626
  children: PropTypes.node,
583
-
584
627
  /**
585
628
  * Specify an optional className to be added to your Tab
586
629
  */
587
630
  className: PropTypes.string,
588
-
589
631
  /**
590
632
  * Specify whether the tooltip for the icon should be open when it first renders
591
633
  */
592
634
  defaultOpen: PropTypes.bool,
593
-
594
635
  /**
595
636
  * Specify the duration in milliseconds to delay before displaying the tooltip for the icon.
596
637
  */
597
638
  enterDelayMs: PropTypes.number,
598
-
599
639
  /**
600
640
  * Provide the label to be rendered inside of the Tooltip. The label will use
601
641
  * `aria-labelledby` and will fully describe the child node that is provided.
@@ -603,7 +643,6 @@ IconTab.propTypes = {
603
643
  * announced to the screen reader.
604
644
  */
605
645
  label: PropTypes.node.isRequired,
606
-
607
646
  /**
608
647
  * Specify the duration in milliseconds to delay before hiding the tooltip
609
648
  */
@@ -634,27 +673,23 @@ const TabPanel = /*#__PURE__*/React__default.forwardRef(function TabPanel(_ref7,
634
673
  if (!panel.current) {
635
674
  return;
636
675
  }
637
-
638
676
  const content = getInteractiveContent(panel.current);
639
-
640
677
  if (content) {
641
678
  setInteractiveContent(true);
642
679
  setTabIndex('-1');
643
680
  }
644
- }); // tabindex should only be 0 if no interactive content in children
681
+ });
645
682
 
683
+ // tabindex should only be 0 if no interactive content in children
646
684
  useEffect(() => {
647
685
  if (!panel.current) {
648
686
  return;
649
687
  }
650
-
651
688
  const {
652
689
  current: node
653
690
  } = panel;
654
-
655
691
  function callback() {
656
692
  const content = getInteractiveContent(node);
657
-
658
693
  if (content) {
659
694
  setInteractiveContent(true);
660
695
  setTabIndex('-1');
@@ -663,7 +698,6 @@ const TabPanel = /*#__PURE__*/React__default.forwardRef(function TabPanel(_ref7,
663
698
  setTabIndex('0');
664
699
  }
665
700
  }
666
-
667
701
  const observer = new MutationObserver(callback);
668
702
  observer.observe(node, {
669
703
  childList: true,
@@ -688,13 +722,11 @@ TabPanel.propTypes = {
688
722
  * Provide child elements to be rendered inside of `TabPanel`.
689
723
  */
690
724
  children: PropTypes.node,
691
-
692
725
  /**
693
726
  * Specify an optional className to be added to TabPanel.
694
727
  */
695
728
  className: PropTypes.string
696
729
  };
697
-
698
730
  function TabPanels(_ref8) {
699
731
  let {
700
732
  children
@@ -705,7 +737,6 @@ function TabPanels(_ref8) {
705
737
  }, child);
706
738
  });
707
739
  }
708
-
709
740
  TabPanels.propTypes = {
710
741
  /**
711
742
  * Provide child elements to be rendered inside of `TabPanels`.