@carbon/react 1.103.0 → 1.104.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 (769) hide show
  1. package/.playwright/INTERNAL_AVT_REPORT_DO_NOT_USE.json +990 -1245
  2. package/es/_virtual/_rolldown/runtime.js +25 -0
  3. package/es/components/AILabel/index.d.ts +29 -2
  4. package/es/components/AILabel/index.js +114 -169
  5. package/es/components/AISkeleton/AISkeletonIcon.js +23 -27
  6. package/es/components/AISkeleton/AISkeletonPlaceholder.js +19 -27
  7. package/es/components/AISkeleton/AISkeletonText.js +26 -39
  8. package/es/components/Accordion/Accordion.Skeleton.js +55 -79
  9. package/es/components/Accordion/Accordion.js +43 -61
  10. package/es/components/Accordion/AccordionItem.js +102 -156
  11. package/es/components/Accordion/AccordionProvider.js +18 -15
  12. package/es/components/AspectRatio/AspectRatio.js +41 -47
  13. package/es/components/BadgeIndicator/index.js +28 -33
  14. package/es/components/Breadcrumb/Breadcrumb.Skeleton.js +39 -50
  15. package/es/components/Breadcrumb/Breadcrumb.js +39 -51
  16. package/es/components/Breadcrumb/BreadcrumbItem.js +80 -83
  17. package/es/components/Button/Button.Skeleton.js +49 -58
  18. package/es/components/Button/Button.d.ts +1 -1
  19. package/es/components/Button/Button.js +146 -240
  20. package/es/components/Button/ButtonBase.js +82 -104
  21. package/es/components/Button/index.js +13 -6
  22. package/es/components/ButtonSet/ButtonSet.js +74 -98
  23. package/es/components/ButtonSet/index.js +12 -4
  24. package/es/components/ChatButton/ChatButton.Skeleton.js +27 -27
  25. package/es/components/ChatButton/ChatButton.js +64 -79
  26. package/es/components/Checkbox/Checkbox.Skeleton.js +26 -25
  27. package/es/components/Checkbox/Checkbox.js +116 -195
  28. package/es/components/Checkbox/index.js +13 -5
  29. package/es/components/CheckboxGroup/CheckboxGroup.js +100 -148
  30. package/es/components/ClassPrefix/index.js +21 -17
  31. package/es/components/CodeSnippet/CodeSnippet.Skeleton.js +45 -42
  32. package/es/components/CodeSnippet/CodeSnippet.js +210 -299
  33. package/es/components/ComboBox/ComboBox.js +621 -970
  34. package/es/components/ComboBox/index.js +12 -4
  35. package/es/components/ComboButton/index.js +172 -208
  36. package/es/components/ComposedModal/ComposedModal.js +311 -450
  37. package/es/components/ComposedModal/ComposedModalPresence.js +47 -42
  38. package/es/components/ComposedModal/ModalFooter.js +127 -207
  39. package/es/components/ComposedModal/ModalHeader.js +71 -101
  40. package/es/components/ComposedModal/useComposedModalState.js +21 -15
  41. package/es/components/ContainedList/ContainedList.js +67 -102
  42. package/es/components/ContainedList/ContainedListItem/ContainedListItem.js +49 -67
  43. package/es/components/ContainedList/ContainedListItem/index.js +12 -4
  44. package/es/components/ContainedList/index.js +15 -12
  45. package/es/components/ContentSwitcher/ContentSwitcher.js +108 -140
  46. package/es/components/ContextMenu/useContextMenu.js +41 -36
  47. package/es/components/Copy/Copy.js +97 -117
  48. package/es/components/Copy/index.js +12 -4
  49. package/es/components/CopyButton/CopyButton.js +81 -94
  50. package/es/components/CopyButton/index.js +12 -4
  51. package/es/components/DangerButton/DangerButton.js +11 -9
  52. package/es/components/DataTable/DataTable.d.ts +11 -11
  53. package/es/components/DataTable/DataTable.js +448 -630
  54. package/es/components/DataTable/Table.js +111 -156
  55. package/es/components/DataTable/TableActionList.js +14 -6
  56. package/es/components/DataTable/TableBatchAction.js +25 -34
  57. package/es/components/DataTable/TableBatchActions.js +78 -113
  58. package/es/components/DataTable/TableBody.js +26 -19
  59. package/es/components/DataTable/TableCell.js +31 -46
  60. package/es/components/DataTable/TableContainer.js +75 -82
  61. package/es/components/DataTable/TableContext.js +14 -6
  62. package/es/components/DataTable/TableDecoratorRow.js +30 -36
  63. package/es/components/DataTable/TableExpandHeader.js +53 -90
  64. package/es/components/DataTable/TableExpandRow.js +82 -119
  65. package/es/components/DataTable/TableExpandedRow.js +45 -51
  66. package/es/components/DataTable/TableHead.js +7 -5
  67. package/es/components/DataTable/TableHeader.js +138 -181
  68. package/es/components/DataTable/TableRow.d.ts +1 -1
  69. package/es/components/DataTable/TableRow.js +42 -76
  70. package/es/components/DataTable/TableSelectAll.js +42 -70
  71. package/es/components/DataTable/TableSelectRow.js +63 -98
  72. package/es/components/DataTable/TableSlugRow.js +35 -43
  73. package/es/components/DataTable/TableToolbar.js +33 -45
  74. package/es/components/DataTable/TableToolbarAction.js +25 -20
  75. package/es/components/DataTable/TableToolbarContent.js +14 -6
  76. package/es/components/DataTable/TableToolbarMenu.js +35 -46
  77. package/es/components/DataTable/TableToolbarSearch.js +97 -187
  78. package/es/components/DataTable/state/getDerivedStateFromProps.js +38 -43
  79. package/es/components/DataTable/state/sortStates.js +11 -9
  80. package/es/components/DataTable/state/sorting.js +53 -72
  81. package/es/components/DataTable/tools/cells.js +15 -7
  82. package/es/components/DataTable/tools/denormalize.js +27 -19
  83. package/es/components/DataTable/tools/filter.js +21 -22
  84. package/es/components/DataTable/tools/normalize.js +57 -72
  85. package/es/components/DataTable/tools/sorting.js +50 -71
  86. package/es/components/DataTableSkeleton/DataTableSkeleton.js +66 -94
  87. package/es/components/DatePicker/DatePicker.Skeleton.js +44 -51
  88. package/es/components/DatePicker/DatePicker.js +485 -752
  89. package/es/components/DatePicker/DatePickerLocales.js +75 -126
  90. package/es/components/DatePicker/index.js +13 -5
  91. package/es/components/DatePicker/plugins/appendToPlugin.js +31 -45
  92. package/es/components/DatePicker/plugins/fixEventsPlugin.js +127 -171
  93. package/es/components/DatePicker/plugins/rangePlugin.js +40 -48
  94. package/es/components/DatePicker/utils.js +11 -3
  95. package/es/components/DatePickerInput/DatePickerInput.js +179 -289
  96. package/es/components/DatePickerInput/index.js +12 -4
  97. package/es/components/Dialog/Dialog.js +303 -574
  98. package/es/components/Dialog/index.js +18 -2
  99. package/es/components/Dropdown/Dropdown.Skeleton.js +26 -38
  100. package/es/components/Dropdown/Dropdown.js +344 -535
  101. package/es/components/Dropdown/index.js +13 -5
  102. package/es/components/ErrorBoundary/ErrorBoundary.js +36 -58
  103. package/es/components/ErrorBoundary/ErrorBoundaryContext.js +14 -9
  104. package/es/components/ExpandableSearch/ExpandableSearch.js +60 -69
  105. package/es/components/ExpandableSearch/index.js +12 -4
  106. package/es/components/FeatureFlags/index.d.ts +11 -2
  107. package/es/components/FeatureFlags/index.js +79 -77
  108. package/es/components/FileUploader/FileUploader.Skeleton.js +35 -30
  109. package/es/components/FileUploader/FileUploader.js +269 -343
  110. package/es/components/FileUploader/FileUploaderButton.js +110 -160
  111. package/es/components/FileUploader/FileUploaderDropContainer.js +144 -221
  112. package/es/components/FileUploader/FileUploaderItem.js +138 -157
  113. package/es/components/FileUploader/Filename.d.ts +1 -1
  114. package/es/components/FileUploader/Filename.js +53 -72
  115. package/es/components/FluidComboBox/FluidComboBox.Skeleton.js +26 -28
  116. package/es/components/FluidComboBox/FluidComboBox.js +54 -105
  117. package/es/components/FluidDatePicker/FluidDatePicker.Skeleton.js +56 -53
  118. package/es/components/FluidDatePicker/FluidDatePicker.js +46 -68
  119. package/es/components/FluidDatePickerInput/FluidDatePickerInput.js +23 -16
  120. package/es/components/FluidDropdown/FluidDropdown.Skeleton.js +26 -28
  121. package/es/components/FluidDropdown/FluidDropdown.js +55 -111
  122. package/es/components/FluidForm/FluidForm.js +29 -31
  123. package/es/components/FluidForm/FormContext.js +12 -6
  124. package/es/components/FluidMultiSelect/FluidMultiSelect.Skeleton.js +26 -28
  125. package/es/components/FluidMultiSelect/FluidMultiSelect.js +67 -197
  126. package/es/components/FluidNumberInput/FluidNumberInput.Skeleton.js +27 -30
  127. package/es/components/FluidNumberInput/FluidNumberInput.js +63 -147
  128. package/es/components/FluidSearch/FluidSearch.Skeleton.js +27 -30
  129. package/es/components/FluidSearch/FluidSearch.js +41 -84
  130. package/es/components/FluidSelect/FluidSelect.Skeleton.js +26 -28
  131. package/es/components/FluidSelect/FluidSelect.js +40 -76
  132. package/es/components/FluidSelect/index.js +13 -5
  133. package/es/components/FluidTextArea/FluidTextArea.Skeleton.js +27 -30
  134. package/es/components/FluidTextArea/FluidTextArea.js +48 -112
  135. package/es/components/FluidTextInput/FluidPasswordInput.js +44 -99
  136. package/es/components/FluidTextInput/FluidTextInput.Skeleton.js +27 -30
  137. package/es/components/FluidTextInput/FluidTextInput.js +49 -104
  138. package/es/components/FluidTextInput/index.js +14 -6
  139. package/es/components/FluidTimePicker/FluidTimePicker.Skeleton.js +30 -33
  140. package/es/components/FluidTimePicker/FluidTimePicker.js +68 -115
  141. package/es/components/FluidTimePickerSelect/FluidTimePickerSelect.js +28 -47
  142. package/es/components/Form/Form.js +23 -25
  143. package/es/components/FormGroup/FormGroup.js +45 -67
  144. package/es/components/FormItem/FormItem.js +23 -25
  145. package/es/components/FormLabel/FormLabel.js +28 -34
  146. package/es/components/Grid/CSSGrid.d.ts +1 -1
  147. package/es/components/Grid/CSSGrid.js +85 -127
  148. package/es/components/Grid/Column.js +192 -324
  149. package/es/components/Grid/ColumnHang.js +28 -36
  150. package/es/components/Grid/FlexGrid.js +40 -60
  151. package/es/components/Grid/Grid.js +29 -42
  152. package/es/components/Grid/GridContext.js +36 -42
  153. package/es/components/Grid/Row.js +31 -49
  154. package/es/components/Heading/index.js +36 -51
  155. package/es/components/Icon/Icon.Skeleton.js +21 -21
  156. package/es/components/IconButton/index.js +117 -178
  157. package/es/components/IconIndicator/index.d.ts +1 -1
  158. package/es/components/IconIndicator/index.js +59 -60
  159. package/es/components/IdPrefix/index.js +21 -17
  160. package/es/components/InlineCheckbox/InlineCheckbox.js +69 -113
  161. package/es/components/InlineCheckbox/index.js +12 -4
  162. package/es/components/InlineLoading/InlineLoading.js +83 -100
  163. package/es/components/InlineLoading/index.js +12 -4
  164. package/es/components/Layer/LayerContext.js +12 -4
  165. package/es/components/Layer/LayerLevel.js +20 -4
  166. package/es/components/Layer/index.js +54 -66
  167. package/es/components/Layout/index.js +77 -109
  168. package/es/components/LayoutDirection/LayoutDirection.d.ts +1 -1
  169. package/es/components/LayoutDirection/LayoutDirection.js +33 -37
  170. package/es/components/LayoutDirection/LayoutDirectionContext.js +12 -6
  171. package/es/components/LayoutDirection/useLayoutDirection.js +15 -7
  172. package/es/components/Link/Link.js +63 -108
  173. package/es/components/Link/index.js +12 -4
  174. package/es/components/ListBox/ListBox.js +78 -126
  175. package/es/components/ListBox/ListBoxField.js +24 -43
  176. package/es/components/ListBox/ListBoxMenu.js +36 -42
  177. package/es/components/ListBox/ListBoxMenuIcon.js +39 -40
  178. package/es/components/ListBox/ListBoxMenuItem.js +67 -88
  179. package/es/components/ListBox/ListBoxPropTypes.js +17 -5
  180. package/es/components/ListBox/ListBoxSelection.js +71 -96
  181. package/es/components/ListBox/index.js +16 -14
  182. package/es/components/ListBox/next/ListBoxSelection.js +79 -117
  183. package/es/components/ListBox/next/ListBoxTrigger.js +44 -48
  184. package/es/components/ListItem/ListItem.js +25 -28
  185. package/es/components/Loading/Loading.js +64 -73
  186. package/es/components/Loading/index.js +12 -4
  187. package/es/components/Menu/Menu.js +220 -363
  188. package/es/components/Menu/MenuContext.d.ts +1 -1
  189. package/es/components/Menu/MenuContext.js +41 -38
  190. package/es/components/Menu/MenuItem.js +282 -413
  191. package/es/components/MenuButton/index.js +134 -195
  192. package/es/components/Modal/Modal.js +500 -660
  193. package/es/components/Modal/ModalPresence.js +39 -37
  194. package/es/components/Modal/index.js +13 -5
  195. package/es/components/ModalWrapper/ModalWrapper.d.ts +2 -2
  196. package/es/components/ModalWrapper/ModalWrapper.js +106 -130
  197. package/es/components/MultiSelect/FilterableMultiSelect.js +605 -918
  198. package/es/components/MultiSelect/MultiSelect.js +454 -716
  199. package/es/components/MultiSelect/MultiSelectPropTypes.js +13 -30
  200. package/es/components/MultiSelect/filter.js +14 -9
  201. package/es/components/MultiSelect/tools/sorting.js +21 -34
  202. package/es/components/Notification/Notification.js +508 -785
  203. package/es/components/NumberInput/NumberFormatPropTypes.js +69 -30
  204. package/es/components/NumberInput/NumberInput.Skeleton.js +29 -33
  205. package/es/components/NumberInput/NumberInput.js +565 -947
  206. package/es/components/OrderedList/OrderedList.js +31 -44
  207. package/es/components/OverflowMenu/OverflowMenu.js +335 -450
  208. package/es/components/OverflowMenu/index.js +25 -16
  209. package/es/components/OverflowMenu/next/index.js +154 -186
  210. package/es/components/OverflowMenuItem/OverflowMenuItem.js +100 -160
  211. package/es/components/OverflowMenuItem/index.js +12 -4
  212. package/es/components/OverflowMenuV2/index.js +15 -13
  213. package/es/components/PageHeader/PageHeader.js +297 -442
  214. package/es/components/PageHeader/index.js +24 -2
  215. package/es/components/Pagination/Pagination.Skeleton.js +34 -35
  216. package/es/components/Pagination/Pagination.d.ts +1 -1
  217. package/es/components/Pagination/Pagination.js +251 -356
  218. package/es/components/Pagination/experimental/PageSelector.js +38 -54
  219. package/es/components/Pagination/experimental/Pagination-story.d.ts +114 -0
  220. package/es/components/Pagination/experimental/Pagination.js +144 -196
  221. package/es/components/PaginationNav/PaginationNav.js +320 -426
  222. package/es/components/Popover/index.js +318 -437
  223. package/es/components/PrimaryButton/PrimaryButton.js +11 -9
  224. package/es/components/ProgressBar/ProgressBar.js +117 -143
  225. package/es/components/ProgressIndicator/ProgressIndicator.Skeleton.js +42 -38
  226. package/es/components/ProgressIndicator/ProgressIndicator.js +146 -243
  227. package/es/components/RadioButton/RadioButton.Skeleton.js +23 -25
  228. package/es/components/RadioButton/RadioButton.js +101 -174
  229. package/es/components/RadioButton/index.js +12 -4
  230. package/es/components/RadioButtonGroup/RadioButtonGroup.js +135 -207
  231. package/es/components/RadioTile/RadioTile.js +104 -168
  232. package/es/components/RadioTile/index.js +12 -4
  233. package/es/components/Search/Search.Skeleton.js +28 -33
  234. package/es/components/Search/Search.js +182 -278
  235. package/es/components/Search/index.js +13 -5
  236. package/es/components/Search/utils.js +11 -3
  237. package/es/components/SecondaryButton/SecondaryButton.js +11 -9
  238. package/es/components/Select/Select.Skeleton.js +27 -30
  239. package/es/components/Select/Select.js +178 -257
  240. package/es/components/Select/index.js +13 -5
  241. package/es/components/SelectItem/SelectItem.js +33 -48
  242. package/es/components/SelectItem/index.js +12 -4
  243. package/es/components/SelectItemGroup/SelectItemGroup.js +27 -37
  244. package/es/components/ShapeIndicator/index.d.ts +1 -1
  245. package/es/components/ShapeIndicator/index.js +74 -80
  246. package/es/components/SkeletonIcon/SkeletonIcon.js +21 -24
  247. package/es/components/SkeletonPlaceholder/SkeletonPlaceholder.js +15 -24
  248. package/es/components/SkeletonText/SkeletonText.js +67 -81
  249. package/es/components/SkeletonText/index.js +12 -4
  250. package/es/components/Slider/Slider.Skeleton.js +68 -91
  251. package/es/components/Slider/Slider.js +864 -1315
  252. package/es/components/Slider/SliderHandles.js +73 -66
  253. package/es/components/Stack/HStack.js +19 -11
  254. package/es/components/Stack/Stack.js +56 -80
  255. package/es/components/Stack/VStack.js +19 -11
  256. package/es/components/StructuredList/StructuredList.Skeleton.js +55 -48
  257. package/es/components/StructuredList/StructuredList.js +178 -317
  258. package/es/components/Switch/IconSwitch.js +99 -145
  259. package/es/components/Switch/Switch.js +66 -99
  260. package/es/components/TabContent/TabContent.js +28 -34
  261. package/es/components/Tabs/Tabs.Skeleton.js +41 -36
  262. package/es/components/Tabs/Tabs.js +732 -1149
  263. package/es/components/Tabs/usePressable.js +97 -112
  264. package/es/components/Tag/DismissibleTag.js +119 -156
  265. package/es/components/Tag/OperationalTag.js +91 -111
  266. package/es/components/Tag/SelectableTag.js +94 -129
  267. package/es/components/Tag/Tag.Skeleton.js +26 -30
  268. package/es/components/Tag/Tag.js +152 -200
  269. package/es/components/Tag/isEllipsisActive.js +13 -8
  270. package/es/components/Text/Text.js +66 -79
  271. package/es/components/Text/TextDirection.js +36 -37
  272. package/es/components/Text/TextDirectionContext.js +14 -8
  273. package/es/components/Text/createTextComponent.js +21 -20
  274. package/es/components/TextArea/TextArea.Skeleton.js +25 -29
  275. package/es/components/TextArea/TextArea.js +315 -422
  276. package/es/components/TextArea/index.js +13 -5
  277. package/es/components/TextInput/ControlledPasswordInput.js +133 -198
  278. package/es/components/TextInput/PasswordInput.js +196 -303
  279. package/es/components/TextInput/TextInput.Skeleton.js +24 -28
  280. package/es/components/TextInput/TextInput.js +219 -317
  281. package/es/components/TextInput/index.js +13 -5
  282. package/es/components/TextInput/util.js +21 -25
  283. package/es/components/Theme/index.js +79 -95
  284. package/es/components/Tile/Tile.js +394 -593
  285. package/es/components/TileGroup/TileGroup.js +70 -111
  286. package/es/components/TimePicker/TimePicker.d.ts +1 -1
  287. package/es/components/TimePicker/TimePicker.js +148 -247
  288. package/es/components/TimePickerSelect/TimePickerSelect.js +43 -58
  289. package/es/components/Toggle/Toggle.Skeleton.js +24 -22
  290. package/es/components/Toggle/Toggle.js +102 -171
  291. package/es/components/ToggleSmall/ToggleSmall.Skeleton.js +46 -51
  292. package/es/components/Toggletip/index.d.ts +2 -2
  293. package/es/components/Toggletip/index.js +170 -256
  294. package/es/components/Tooltip/DefinitionTooltip.js +98 -138
  295. package/es/components/Tooltip/Tooltip.js +188 -263
  296. package/es/components/TreeView/TreeContext.js +13 -5
  297. package/es/components/TreeView/TreeNode.js +361 -500
  298. package/es/components/TreeView/TreeView.js +164 -237
  299. package/es/components/UIShell/Content.js +23 -30
  300. package/es/components/UIShell/Header.js +25 -29
  301. package/es/components/UIShell/HeaderContainer.js +31 -40
  302. package/es/components/UIShell/HeaderGlobalAction.js +65 -90
  303. package/es/components/UIShell/HeaderGlobalBar.js +16 -9
  304. package/es/components/UIShell/HeaderMenu.js +141 -215
  305. package/es/components/UIShell/HeaderMenuButton.js +43 -66
  306. package/es/components/UIShell/HeaderMenuItem.js +49 -76
  307. package/es/components/UIShell/HeaderName.js +32 -44
  308. package/es/components/UIShell/HeaderNavigation.js +32 -37
  309. package/es/components/UIShell/HeaderPanel.js +74 -97
  310. package/es/components/UIShell/HeaderSideNavItems.js +27 -33
  311. package/es/components/UIShell/Link.js +29 -50
  312. package/es/components/UIShell/SideNav.js +132 -241
  313. package/es/components/UIShell/SideNavContext.js +21 -15
  314. package/es/components/UIShell/SideNavDetails.js +29 -34
  315. package/es/components/UIShell/SideNavDivider.js +21 -21
  316. package/es/components/UIShell/SideNavFooter.js +43 -52
  317. package/es/components/UIShell/SideNavHeader.js +26 -35
  318. package/es/components/UIShell/SideNavIcon.js +28 -33
  319. package/es/components/UIShell/SideNavItem.js +28 -33
  320. package/es/components/UIShell/SideNavItems.js +31 -40
  321. package/es/components/UIShell/SideNavLink.js +52 -79
  322. package/es/components/UIShell/SideNavLinkText.js +24 -25
  323. package/es/components/UIShell/SideNavMenu.js +102 -143
  324. package/es/components/UIShell/SideNavMenuItem.js +40 -52
  325. package/es/components/UIShell/SideNavSwitcher.js +59 -68
  326. package/es/components/UIShell/SkipToContent.js +28 -36
  327. package/es/components/UIShell/Switcher.js +69 -99
  328. package/es/components/UIShell/SwitcherDivider.js +16 -24
  329. package/es/components/UIShell/SwitcherItem.js +74 -114
  330. package/es/components/UnorderedList/UnorderedList.js +28 -37
  331. package/es/feature-flags.js +19 -10
  332. package/es/index.js +249 -242
  333. package/es/internal/FloatingMenu.js +246 -292
  334. package/es/internal/OptimizedResize.js +35 -46
  335. package/es/internal/Selection.js +99 -132
  336. package/es/internal/clamp.js +12 -4
  337. package/es/internal/defaultItemToString.js +15 -9
  338. package/es/internal/deprecateFieldOnObject.js +22 -14
  339. package/es/internal/environment.js +15 -7
  340. package/es/internal/getAnnouncement.js +16 -13
  341. package/es/internal/keyboard/keys.js +48 -48
  342. package/es/internal/keyboard/match.js +25 -42
  343. package/es/internal/keyboard/navigation.js +22 -27
  344. package/es/internal/noopFn.js +10 -2
  345. package/es/internal/useAttachedMenu.js +43 -51
  346. package/es/internal/useControllableState.js +43 -48
  347. package/es/internal/useDelayedState.js +30 -35
  348. package/es/internal/useEvent.js +39 -35
  349. package/es/internal/useId.js +51 -87
  350. package/es/internal/useIdPrefix.js +13 -5
  351. package/es/internal/useIsomorphicEffect.js +12 -4
  352. package/es/internal/useMatchMedia.js +29 -21
  353. package/es/internal/useMergedRefs.js +26 -22
  354. package/es/internal/useNoInteractiveChildren.js +70 -99
  355. package/es/internal/useNormalizedInputProps.js +47 -51
  356. package/es/internal/useOutsideClick.js +21 -24
  357. package/es/internal/useOverflowItems.js +89 -90
  358. package/es/internal/usePrefix.js +13 -5
  359. package/es/internal/usePresence.js +51 -54
  360. package/es/internal/usePresenceContext.js +35 -35
  361. package/es/internal/usePreviousValue.js +26 -18
  362. package/es/internal/useResizeObserver.js +57 -66
  363. package/es/internal/useSavedCallback.js +24 -17
  364. package/es/internal/utils.js +17 -9
  365. package/es/internal/warning.js +17 -22
  366. package/es/internal/wrapFocus.js +77 -98
  367. package/es/prop-types/AriaPropTypes.js +14 -6
  368. package/es/prop-types/deprecate.js +30 -27
  369. package/es/prop-types/deprecateComponent.js +17 -8
  370. package/es/prop-types/deprecateValuesWithin.js +18 -21
  371. package/es/prop-types/isRequiredOneOf.js +21 -24
  372. package/es/prop-types/requiredIfGivenPropIsTruthy.js +14 -14
  373. package/es/tools/events.js +17 -21
  374. package/es/tools/mapPopoverAlign.js +19 -18
  375. package/es/tools/mergeRefs.js +14 -17
  376. package/es/tools/setupGetInstanceId.js +16 -8
  377. package/es/tools/toggleClass.js +17 -9
  378. package/es/tools/wrapComponent.js +34 -39
  379. package/icons/index.d.ts +2 -1
  380. package/icons/index.esm.js +2 -2
  381. package/icons/index.js +7 -10
  382. package/lib/_virtual/_rolldown/runtime.js +50 -0
  383. package/lib/components/AILabel/index.d.ts +29 -2
  384. package/lib/components/AILabel/index.js +118 -171
  385. package/lib/components/AISkeleton/AISkeletonIcon.js +27 -31
  386. package/lib/components/AISkeleton/AISkeletonPlaceholder.js +29 -31
  387. package/lib/components/AISkeleton/AISkeletonText.js +30 -43
  388. package/lib/components/Accordion/Accordion.Skeleton.js +59 -84
  389. package/lib/components/Accordion/Accordion.js +47 -65
  390. package/lib/components/Accordion/AccordionItem.js +106 -160
  391. package/lib/components/Accordion/AccordionProvider.js +20 -17
  392. package/lib/components/AspectRatio/AspectRatio.js +45 -51
  393. package/lib/components/BadgeIndicator/index.js +33 -39
  394. package/lib/components/Breadcrumb/Breadcrumb.Skeleton.js +43 -55
  395. package/lib/components/Breadcrumb/Breadcrumb.js +43 -55
  396. package/lib/components/Breadcrumb/BreadcrumbItem.js +84 -87
  397. package/lib/components/Button/Button.Skeleton.js +53 -63
  398. package/lib/components/Button/Button.d.ts +1 -1
  399. package/lib/components/Button/Button.js +149 -244
  400. package/lib/components/Button/ButtonBase.js +85 -108
  401. package/lib/components/Button/index.js +13 -15
  402. package/lib/components/ButtonSet/ButtonSet.js +78 -102
  403. package/lib/components/ButtonSet/index.js +12 -9
  404. package/lib/components/ChatButton/ChatButton.Skeleton.js +31 -31
  405. package/lib/components/ChatButton/ChatButton.js +68 -83
  406. package/lib/components/Checkbox/Checkbox.Skeleton.js +30 -30
  407. package/lib/components/Checkbox/Checkbox.js +119 -198
  408. package/lib/components/Checkbox/index.js +13 -11
  409. package/lib/components/CheckboxGroup/CheckboxGroup.js +104 -152
  410. package/lib/components/ClassPrefix/index.js +24 -19
  411. package/lib/components/CodeSnippet/CodeSnippet.Skeleton.js +49 -47
  412. package/lib/components/CodeSnippet/CodeSnippet.js +215 -303
  413. package/lib/components/ComboBox/ComboBox.js +626 -974
  414. package/lib/components/ComboBox/index.js +12 -9
  415. package/lib/components/ComboButton/index.js +176 -210
  416. package/lib/components/ComposedModal/ComposedModal.js +315 -454
  417. package/lib/components/ComposedModal/ComposedModalPresence.js +49 -44
  418. package/lib/components/ComposedModal/ModalFooter.js +131 -209
  419. package/lib/components/ComposedModal/ModalHeader.js +75 -103
  420. package/lib/components/ComposedModal/useComposedModalState.js +22 -17
  421. package/lib/components/ContainedList/ContainedList.js +77 -106
  422. package/lib/components/ContainedList/ContainedListItem/ContainedListItem.js +59 -71
  423. package/lib/components/ContainedList/ContainedListItem/index.js +12 -9
  424. package/lib/components/ContainedList/index.js +18 -15
  425. package/lib/components/ContentSwitcher/ContentSwitcher.js +112 -142
  426. package/lib/components/ContextMenu/useContextMenu.js +42 -40
  427. package/lib/components/Copy/Copy.js +101 -121
  428. package/lib/components/Copy/index.js +12 -9
  429. package/lib/components/CopyButton/CopyButton.js +85 -98
  430. package/lib/components/CopyButton/index.js +12 -9
  431. package/lib/components/DangerButton/DangerButton.js +19 -13
  432. package/lib/components/DataTable/DataTable.d.ts +11 -11
  433. package/lib/components/DataTable/DataTable.js +474 -655
  434. package/lib/components/DataTable/Table.js +115 -161
  435. package/lib/components/DataTable/TableActionList.js +15 -11
  436. package/lib/components/DataTable/TableBatchAction.js +28 -38
  437. package/lib/components/DataTable/TableBatchActions.js +82 -117
  438. package/lib/components/DataTable/TableBody.js +29 -23
  439. package/lib/components/DataTable/TableCell.js +35 -50
  440. package/lib/components/DataTable/TableContainer.js +79 -86
  441. package/lib/components/DataTable/TableContext.js +15 -8
  442. package/lib/components/DataTable/TableDecoratorRow.js +34 -40
  443. package/lib/components/DataTable/TableExpandHeader.js +57 -94
  444. package/lib/components/DataTable/TableExpandRow.js +86 -123
  445. package/lib/components/DataTable/TableExpandedRow.js +49 -55
  446. package/lib/components/DataTable/TableHead.js +8 -10
  447. package/lib/components/DataTable/TableHeader.js +142 -185
  448. package/lib/components/DataTable/TableRow.d.ts +1 -1
  449. package/lib/components/DataTable/TableRow.js +46 -80
  450. package/lib/components/DataTable/TableSelectAll.js +46 -74
  451. package/lib/components/DataTable/TableSelectRow.js +67 -102
  452. package/lib/components/DataTable/TableSlugRow.js +39 -47
  453. package/lib/components/DataTable/TableToolbar.js +37 -49
  454. package/lib/components/DataTable/TableToolbarAction.js +28 -24
  455. package/lib/components/DataTable/TableToolbarContent.js +15 -11
  456. package/lib/components/DataTable/TableToolbarMenu.js +39 -50
  457. package/lib/components/DataTable/TableToolbarSearch.js +101 -191
  458. package/lib/components/DataTable/state/getDerivedStateFromProps.js +38 -47
  459. package/lib/components/DataTable/state/sortStates.js +11 -10
  460. package/lib/components/DataTable/state/sorting.js +54 -76
  461. package/lib/components/DataTable/tools/cells.js +15 -8
  462. package/lib/components/DataTable/tools/denormalize.js +27 -22
  463. package/lib/components/DataTable/tools/filter.js +21 -23
  464. package/lib/components/DataTable/tools/normalize.js +57 -76
  465. package/lib/components/DataTable/tools/sorting.js +50 -75
  466. package/lib/components/DataTableSkeleton/DataTableSkeleton.js +70 -98
  467. package/lib/components/DatePicker/DatePicker.Skeleton.js +48 -56
  468. package/lib/components/DatePicker/DatePicker.js +491 -756
  469. package/lib/components/DatePicker/DatePickerLocales.js +75 -127
  470. package/lib/components/DatePicker/index.js +13 -11
  471. package/lib/components/DatePicker/plugins/appendToPlugin.js +31 -46
  472. package/lib/components/DatePicker/plugins/fixEventsPlugin.js +127 -175
  473. package/lib/components/DatePicker/plugins/rangePlugin.js +42 -50
  474. package/lib/components/DatePicker/utils.js +11 -4
  475. package/lib/components/DatePickerInput/DatePickerInput.js +183 -293
  476. package/lib/components/DatePickerInput/index.js +12 -9
  477. package/lib/components/Dialog/Dialog.js +307 -576
  478. package/lib/components/Dialog/index.js +21 -13
  479. package/lib/components/Dropdown/Dropdown.Skeleton.js +30 -43
  480. package/lib/components/Dropdown/Dropdown.js +348 -539
  481. package/lib/components/Dropdown/index.js +13 -11
  482. package/lib/components/ErrorBoundary/ErrorBoundary.js +39 -62
  483. package/lib/components/ErrorBoundary/ErrorBoundaryContext.js +15 -11
  484. package/lib/components/ExpandableSearch/ExpandableSearch.js +63 -73
  485. package/lib/components/ExpandableSearch/index.js +12 -9
  486. package/lib/components/FeatureFlags/index.d.ts +11 -2
  487. package/lib/components/FeatureFlags/index.js +82 -79
  488. package/lib/components/FileUploader/FileUploader.Skeleton.js +39 -35
  489. package/lib/components/FileUploader/FileUploader.js +273 -347
  490. package/lib/components/FileUploader/FileUploaderButton.js +114 -164
  491. package/lib/components/FileUploader/FileUploaderDropContainer.js +148 -225
  492. package/lib/components/FileUploader/FileUploaderItem.js +142 -161
  493. package/lib/components/FileUploader/Filename.d.ts +1 -1
  494. package/lib/components/FileUploader/Filename.js +56 -76
  495. package/lib/components/FluidComboBox/FluidComboBox.Skeleton.js +30 -32
  496. package/lib/components/FluidComboBox/FluidComboBox.js +58 -109
  497. package/lib/components/FluidDatePicker/FluidDatePicker.Skeleton.js +60 -57
  498. package/lib/components/FluidDatePicker/FluidDatePicker.js +50 -72
  499. package/lib/components/FluidDatePickerInput/FluidDatePickerInput.js +25 -20
  500. package/lib/components/FluidDropdown/FluidDropdown.Skeleton.js +30 -32
  501. package/lib/components/FluidDropdown/FluidDropdown.js +59 -115
  502. package/lib/components/FluidForm/FluidForm.js +33 -35
  503. package/lib/components/FluidForm/FormContext.js +13 -8
  504. package/lib/components/FluidMultiSelect/FluidMultiSelect.Skeleton.js +30 -32
  505. package/lib/components/FluidMultiSelect/FluidMultiSelect.js +71 -201
  506. package/lib/components/FluidNumberInput/FluidNumberInput.Skeleton.js +31 -34
  507. package/lib/components/FluidNumberInput/FluidNumberInput.js +67 -151
  508. package/lib/components/FluidSearch/FluidSearch.Skeleton.js +31 -34
  509. package/lib/components/FluidSearch/FluidSearch.js +45 -88
  510. package/lib/components/FluidSelect/FluidSelect.Skeleton.js +30 -32
  511. package/lib/components/FluidSelect/FluidSelect.js +44 -80
  512. package/lib/components/FluidSelect/index.js +13 -11
  513. package/lib/components/FluidTextArea/FluidTextArea.Skeleton.js +31 -34
  514. package/lib/components/FluidTextArea/FluidTextArea.js +52 -116
  515. package/lib/components/FluidTextInput/FluidPasswordInput.js +48 -103
  516. package/lib/components/FluidTextInput/FluidTextInput.Skeleton.js +31 -34
  517. package/lib/components/FluidTextInput/FluidTextInput.js +53 -108
  518. package/lib/components/FluidTextInput/index.js +14 -13
  519. package/lib/components/FluidTimePicker/FluidTimePicker.Skeleton.js +34 -37
  520. package/lib/components/FluidTimePicker/FluidTimePicker.js +72 -119
  521. package/lib/components/FluidTimePickerSelect/FluidTimePickerSelect.js +31 -51
  522. package/lib/components/Form/Form.js +27 -29
  523. package/lib/components/FormGroup/FormGroup.js +49 -71
  524. package/lib/components/FormItem/FormItem.js +27 -29
  525. package/lib/components/FormLabel/FormLabel.js +32 -38
  526. package/lib/components/Grid/CSSGrid.d.ts +1 -1
  527. package/lib/components/Grid/CSSGrid.js +89 -129
  528. package/lib/components/Grid/Column.js +196 -328
  529. package/lib/components/Grid/ColumnHang.js +32 -38
  530. package/lib/components/Grid/FlexGrid.js +44 -62
  531. package/lib/components/Grid/Grid.js +32 -44
  532. package/lib/components/Grid/GridContext.js +39 -44
  533. package/lib/components/Grid/Row.js +35 -53
  534. package/lib/components/Heading/index.js +39 -53
  535. package/lib/components/Icon/Icon.Skeleton.js +25 -23
  536. package/lib/components/IconButton/index.js +121 -180
  537. package/lib/components/IconIndicator/index.d.ts +1 -1
  538. package/lib/components/IconIndicator/index.js +63 -63
  539. package/lib/components/IdPrefix/index.js +24 -19
  540. package/lib/components/InlineCheckbox/InlineCheckbox.js +72 -117
  541. package/lib/components/InlineCheckbox/index.js +12 -9
  542. package/lib/components/InlineLoading/InlineLoading.js +87 -104
  543. package/lib/components/InlineLoading/index.js +12 -9
  544. package/lib/components/Layer/LayerContext.js +14 -6
  545. package/lib/components/Layer/LayerLevel.js +20 -6
  546. package/lib/components/Layer/index.js +58 -68
  547. package/lib/components/Layout/index.js +81 -111
  548. package/lib/components/LayoutDirection/LayoutDirection.d.ts +1 -1
  549. package/lib/components/LayoutDirection/LayoutDirection.js +36 -40
  550. package/lib/components/LayoutDirection/LayoutDirectionContext.js +14 -8
  551. package/lib/components/LayoutDirection/useLayoutDirection.js +16 -9
  552. package/lib/components/Link/Link.js +67 -112
  553. package/lib/components/Link/index.js +12 -9
  554. package/lib/components/ListBox/ListBox.js +82 -130
  555. package/lib/components/ListBox/ListBoxField.js +33 -47
  556. package/lib/components/ListBox/ListBoxMenu.js +39 -46
  557. package/lib/components/ListBox/ListBoxMenuIcon.js +43 -44
  558. package/lib/components/ListBox/ListBoxMenuItem.js +71 -92
  559. package/lib/components/ListBox/ListBoxPropTypes.js +21 -9
  560. package/lib/components/ListBox/ListBoxSelection.js +75 -100
  561. package/lib/components/ListBox/index.js +17 -21
  562. package/lib/components/ListBox/next/ListBoxSelection.js +83 -121
  563. package/lib/components/ListBox/next/ListBoxTrigger.js +48 -52
  564. package/lib/components/ListItem/ListItem.js +29 -32
  565. package/lib/components/Loading/Loading.js +68 -77
  566. package/lib/components/Loading/index.js +12 -9
  567. package/lib/components/Menu/Menu.js +224 -365
  568. package/lib/components/Menu/MenuContext.d.ts +1 -1
  569. package/lib/components/Menu/MenuContext.js +42 -40
  570. package/lib/components/Menu/MenuItem.js +286 -415
  571. package/lib/components/MenuButton/index.js +138 -197
  572. package/lib/components/Modal/Modal.js +504 -665
  573. package/lib/components/Modal/ModalPresence.js +41 -39
  574. package/lib/components/Modal/index.js +13 -10
  575. package/lib/components/ModalWrapper/ModalWrapper.d.ts +2 -2
  576. package/lib/components/ModalWrapper/ModalWrapper.js +112 -134
  577. package/lib/components/MultiSelect/FilterableMultiSelect.js +611 -920
  578. package/lib/components/MultiSelect/MultiSelect.js +459 -718
  579. package/lib/components/MultiSelect/MultiSelectPropTypes.js +15 -32
  580. package/lib/components/MultiSelect/filter.js +14 -10
  581. package/lib/components/MultiSelect/tools/sorting.js +21 -35
  582. package/lib/components/Notification/Notification.js +514 -787
  583. package/lib/components/NumberInput/NumberFormatPropTypes.js +72 -33
  584. package/lib/components/NumberInput/NumberInput.Skeleton.js +33 -37
  585. package/lib/components/NumberInput/NumberInput.js +569 -950
  586. package/lib/components/OrderedList/OrderedList.js +35 -48
  587. package/lib/components/OverflowMenu/OverflowMenu.js +341 -454
  588. package/lib/components/OverflowMenu/index.js +27 -21
  589. package/lib/components/OverflowMenu/next/index.js +158 -188
  590. package/lib/components/OverflowMenuItem/OverflowMenuItem.js +104 -164
  591. package/lib/components/OverflowMenuItem/index.js +12 -9
  592. package/lib/components/OverflowMenuV2/index.js +25 -15
  593. package/lib/components/PageHeader/PageHeader.js +301 -444
  594. package/lib/components/PageHeader/index.js +27 -19
  595. package/lib/components/Pagination/Pagination.Skeleton.js +38 -37
  596. package/lib/components/Pagination/Pagination.d.ts +1 -1
  597. package/lib/components/Pagination/Pagination.js +256 -360
  598. package/lib/components/Pagination/experimental/PageSelector.js +48 -58
  599. package/lib/components/Pagination/experimental/Pagination-story.d.ts +114 -0
  600. package/lib/components/Pagination/experimental/Pagination.js +148 -200
  601. package/lib/components/PaginationNav/PaginationNav.js +324 -430
  602. package/lib/components/Popover/index.js +323 -440
  603. package/lib/components/PrimaryButton/PrimaryButton.js +19 -13
  604. package/lib/components/ProgressBar/ProgressBar.js +121 -147
  605. package/lib/components/ProgressIndicator/ProgressIndicator.Skeleton.js +46 -43
  606. package/lib/components/ProgressIndicator/ProgressIndicator.js +150 -245
  607. package/lib/components/RadioButton/RadioButton.Skeleton.js +27 -27
  608. package/lib/components/RadioButton/RadioButton.js +105 -178
  609. package/lib/components/RadioButton/index.js +12 -9
  610. package/lib/components/RadioButtonGroup/RadioButtonGroup.js +139 -211
  611. package/lib/components/RadioTile/RadioTile.js +108 -172
  612. package/lib/components/RadioTile/index.js +12 -9
  613. package/lib/components/Search/Search.Skeleton.js +32 -38
  614. package/lib/components/Search/Search.js +185 -281
  615. package/lib/components/Search/index.js +13 -11
  616. package/lib/components/Search/utils.js +11 -4
  617. package/lib/components/SecondaryButton/SecondaryButton.js +19 -13
  618. package/lib/components/Select/Select.Skeleton.js +31 -35
  619. package/lib/components/Select/Select.js +182 -261
  620. package/lib/components/Select/index.js +13 -11
  621. package/lib/components/SelectItem/SelectItem.js +37 -52
  622. package/lib/components/SelectItem/index.js +12 -9
  623. package/lib/components/SelectItemGroup/SelectItemGroup.js +31 -41
  624. package/lib/components/ShapeIndicator/index.d.ts +1 -1
  625. package/lib/components/ShapeIndicator/index.js +78 -83
  626. package/lib/components/SkeletonIcon/SkeletonIcon.js +25 -28
  627. package/lib/components/SkeletonPlaceholder/SkeletonPlaceholder.js +25 -28
  628. package/lib/components/SkeletonText/SkeletonText.js +71 -85
  629. package/lib/components/SkeletonText/index.js +12 -9
  630. package/lib/components/Slider/Slider.Skeleton.js +72 -95
  631. package/lib/components/Slider/Slider.js +868 -1319
  632. package/lib/components/Slider/SliderHandles.js +75 -68
  633. package/lib/components/Stack/HStack.js +22 -14
  634. package/lib/components/Stack/Stack.js +60 -82
  635. package/lib/components/Stack/VStack.js +22 -14
  636. package/lib/components/StructuredList/StructuredList.Skeleton.js +59 -52
  637. package/lib/components/StructuredList/StructuredList.js +182 -319
  638. package/lib/components/Switch/IconSwitch.js +103 -149
  639. package/lib/components/Switch/Switch.js +70 -103
  640. package/lib/components/TabContent/TabContent.js +32 -38
  641. package/lib/components/Tabs/Tabs.Skeleton.js +45 -41
  642. package/lib/components/Tabs/Tabs.js +738 -1153
  643. package/lib/components/Tabs/usePressable.js +98 -114
  644. package/lib/components/Tag/DismissibleTag.js +123 -160
  645. package/lib/components/Tag/OperationalTag.js +95 -115
  646. package/lib/components/Tag/SelectableTag.js +98 -133
  647. package/lib/components/Tag/Tag.Skeleton.js +30 -32
  648. package/lib/components/Tag/Tag.js +156 -204
  649. package/lib/components/Tag/isEllipsisActive.js +13 -9
  650. package/lib/components/Text/Text.js +69 -81
  651. package/lib/components/Text/TextDirection.js +39 -39
  652. package/lib/components/Text/TextDirectionContext.js +15 -10
  653. package/lib/components/Text/createTextComponent.js +29 -22
  654. package/lib/components/TextArea/TextArea.Skeleton.js +29 -34
  655. package/lib/components/TextArea/TextArea.js +319 -426
  656. package/lib/components/TextArea/index.js +13 -11
  657. package/lib/components/TextInput/ControlledPasswordInput.js +137 -202
  658. package/lib/components/TextInput/PasswordInput.js +200 -307
  659. package/lib/components/TextInput/TextInput.Skeleton.js +28 -33
  660. package/lib/components/TextInput/TextInput.js +223 -321
  661. package/lib/components/TextInput/index.js +13 -11
  662. package/lib/components/TextInput/util.js +21 -26
  663. package/lib/components/Theme/index.js +83 -97
  664. package/lib/components/Tile/Tile.js +398 -595
  665. package/lib/components/TileGroup/TileGroup.js +73 -113
  666. package/lib/components/TimePicker/TimePicker.d.ts +1 -1
  667. package/lib/components/TimePicker/TimePicker.js +152 -251
  668. package/lib/components/TimePickerSelect/TimePickerSelect.js +47 -62
  669. package/lib/components/Toggle/Toggle.Skeleton.js +28 -24
  670. package/lib/components/Toggle/Toggle.js +106 -176
  671. package/lib/components/ToggleSmall/ToggleSmall.Skeleton.js +50 -53
  672. package/lib/components/Toggletip/index.d.ts +2 -2
  673. package/lib/components/Toggletip/index.js +174 -258
  674. package/lib/components/Tooltip/DefinitionTooltip.js +102 -140
  675. package/lib/components/Tooltip/Tooltip.js +192 -265
  676. package/lib/components/TreeView/TreeContext.js +14 -7
  677. package/lib/components/TreeView/TreeNode.js +365 -504
  678. package/lib/components/TreeView/TreeView.js +169 -242
  679. package/lib/components/UIShell/Content.js +27 -34
  680. package/lib/components/UIShell/Header.js +29 -33
  681. package/lib/components/UIShell/HeaderContainer.js +34 -44
  682. package/lib/components/UIShell/HeaderGlobalAction.js +69 -94
  683. package/lib/components/UIShell/HeaderGlobalBar.js +17 -14
  684. package/lib/components/UIShell/HeaderMenu.js +146 -221
  685. package/lib/components/UIShell/HeaderMenuButton.js +47 -70
  686. package/lib/components/UIShell/HeaderMenuItem.js +53 -80
  687. package/lib/components/UIShell/HeaderName.js +36 -48
  688. package/lib/components/UIShell/HeaderNavigation.js +36 -41
  689. package/lib/components/UIShell/HeaderPanel.js +78 -101
  690. package/lib/components/UIShell/HeaderSideNavItems.js +31 -37
  691. package/lib/components/UIShell/Link.js +32 -54
  692. package/lib/components/UIShell/SideNav.js +136 -245
  693. package/lib/components/UIShell/SideNavContext.js +23 -17
  694. package/lib/components/UIShell/SideNavDetails.js +33 -38
  695. package/lib/components/UIShell/SideNavDivider.js +25 -25
  696. package/lib/components/UIShell/SideNavFooter.js +47 -56
  697. package/lib/components/UIShell/SideNavHeader.js +30 -39
  698. package/lib/components/UIShell/SideNavIcon.js +32 -37
  699. package/lib/components/UIShell/SideNavItem.js +32 -37
  700. package/lib/components/UIShell/SideNavItems.js +35 -44
  701. package/lib/components/UIShell/SideNavLink.js +56 -83
  702. package/lib/components/UIShell/SideNavLinkText.js +28 -29
  703. package/lib/components/UIShell/SideNavMenu.js +106 -148
  704. package/lib/components/UIShell/SideNavMenuItem.js +44 -56
  705. package/lib/components/UIShell/SideNavSwitcher.js +63 -72
  706. package/lib/components/UIShell/SkipToContent.js +32 -40
  707. package/lib/components/UIShell/Switcher.js +73 -103
  708. package/lib/components/UIShell/SwitcherDivider.js +26 -28
  709. package/lib/components/UIShell/SwitcherItem.js +78 -118
  710. package/lib/components/UnorderedList/UnorderedList.js +32 -41
  711. package/lib/feature-flags.js +21 -13
  712. package/lib/index.js +622 -602
  713. package/lib/internal/FloatingMenu.js +249 -296
  714. package/lib/internal/OptimizedResize.js +35 -47
  715. package/lib/internal/Selection.js +102 -134
  716. package/lib/internal/clamp.js +12 -5
  717. package/lib/internal/defaultItemToString.js +15 -10
  718. package/lib/internal/deprecateFieldOnObject.js +23 -16
  719. package/lib/internal/environment.js +15 -8
  720. package/lib/internal/getAnnouncement.js +16 -14
  721. package/lib/internal/keyboard/keys.js +48 -49
  722. package/lib/internal/keyboard/match.js +25 -43
  723. package/lib/internal/keyboard/navigation.js +22 -29
  724. package/lib/internal/noopFn.js +10 -3
  725. package/lib/internal/useAttachedMenu.js +44 -53
  726. package/lib/internal/useControllableState.js +44 -50
  727. package/lib/internal/useDelayedState.js +31 -37
  728. package/lib/internal/useEvent.js +40 -37
  729. package/lib/internal/useId.js +54 -91
  730. package/lib/internal/useIdPrefix.js +15 -7
  731. package/lib/internal/useIsomorphicEffect.js +13 -8
  732. package/lib/internal/useMatchMedia.js +30 -23
  733. package/lib/internal/useMergedRefs.js +27 -24
  734. package/lib/internal/useNoInteractiveChildren.js +73 -101
  735. package/lib/internal/useNormalizedInputProps.js +55 -53
  736. package/lib/internal/useOutsideClick.js +22 -26
  737. package/lib/internal/useOverflowItems.js +90 -94
  738. package/lib/internal/usePrefix.js +15 -7
  739. package/lib/internal/usePresence.js +52 -56
  740. package/lib/internal/usePresenceContext.js +36 -37
  741. package/lib/internal/usePreviousValue.js +27 -20
  742. package/lib/internal/useResizeObserver.js +58 -68
  743. package/lib/internal/useSavedCallback.js +25 -19
  744. package/lib/internal/utils.js +18 -11
  745. package/lib/internal/warning.js +24 -23
  746. package/lib/internal/wrapFocus.js +78 -100
  747. package/lib/prop-types/AriaPropTypes.js +17 -9
  748. package/lib/prop-types/deprecate.js +30 -29
  749. package/lib/prop-types/deprecateComponent.js +17 -10
  750. package/lib/prop-types/deprecateValuesWithin.js +18 -23
  751. package/lib/prop-types/isRequiredOneOf.js +21 -25
  752. package/lib/prop-types/requiredIfGivenPropIsTruthy.js +14 -15
  753. package/lib/tools/events.js +17 -22
  754. package/lib/tools/mapPopoverAlign.js +19 -19
  755. package/lib/tools/mergeRefs.js +14 -18
  756. package/lib/tools/setupGetInstanceId.js +16 -9
  757. package/lib/tools/toggleClass.js +17 -10
  758. package/lib/tools/wrapComponent.js +38 -43
  759. package/package.json +10 -16
  760. package/es/_virtual/_rollupPluginBabelHelpers.js +0 -40
  761. package/es/components/DataTable/stories/examples/TableToolbarFilter.d.ts +0 -54
  762. package/es/node_modules/es-toolkit/dist/compat/function/debounce.js +0 -55
  763. package/es/node_modules/es-toolkit/dist/compat/function/throttle.js +0 -23
  764. package/es/node_modules/es-toolkit/dist/function/debounce.js +0 -70
  765. package/lib/_virtual/_rollupPluginBabelHelpers.js +0 -45
  766. package/lib/components/DataTable/stories/examples/TableToolbarFilter.d.ts +0 -54
  767. package/lib/node_modules/es-toolkit/dist/compat/function/debounce.js +0 -57
  768. package/lib/node_modules/es-toolkit/dist/compat/function/throttle.js +0 -25
  769. package/lib/node_modules/es-toolkit/dist/function/debounce.js +0 -72
@@ -1,1197 +1,782 @@
1
1
  /**
2
- * Copyright IBM Corp. 2016, 2023
2
+ * Copyright IBM Corp. 2016, 2026
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.
6
6
  */
7
7
 
8
- 'use strict';
9
-
10
- var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelpers.js');
11
- var iconsReact = require('@carbon/icons-react');
12
- var layout = require('@carbon/layout');
13
- var cx = require('classnames');
14
- var PropTypes = require('prop-types');
15
- var React = require('react');
16
- require('../Grid/FlexGrid.js');
17
- var Grid = require('../Grid/Grid.js');
18
- require('../Grid/Row.js');
19
- require('../Grid/Column.js');
20
- require('../Grid/ColumnHang.js');
21
- require('../Grid/GridContext.js');
22
- require('../Tooltip/DefinitionTooltip.js');
23
- var Tooltip = require('../Tooltip/Tooltip.js');
24
- var useControllableState = require('../../internal/useControllableState.js');
25
- var useId = require('../../internal/useId.js');
26
- var useIsomorphicEffect = require('../../internal/useIsomorphicEffect.js');
27
- var useMergedRefs = require('../../internal/useMergedRefs.js');
28
- var usePrefix = require('../../internal/usePrefix.js');
29
- var keys = require('../../internal/keyboard/keys.js');
30
- var match = require('../../internal/keyboard/match.js');
31
- var usePressable = require('./usePressable.js');
32
- var deprecate = require('../../prop-types/deprecate.js');
33
- var useEvent = require('../../internal/useEvent.js');
34
- var useMatchMedia = require('../../internal/useMatchMedia.js');
35
- var Text = require('../Text/Text.js');
36
- require('../Text/TextDirection.js');
37
- var index = require('../BadgeIndicator/index.js');
38
- var utils = require('../../internal/utils.js');
39
- var debounce = require('../../node_modules/es-toolkit/dist/compat/function/debounce.js');
40
-
41
- var _ChevronLeft, _ChevronRight, _BadgeIndicator;
8
+ const require_runtime = require('../../_virtual/_rolldown/runtime.js');
9
+ const require_usePrefix = require('../../internal/usePrefix.js');
10
+ const require_Text = require('../Text/Text.js');
11
+ const require_keys = require('../../internal/keyboard/keys.js');
12
+ const require_match = require('../../internal/keyboard/match.js');
13
+ const require_useIsomorphicEffect = require('../../internal/useIsomorphicEffect.js');
14
+ const require_useId = require('../../internal/useId.js');
15
+ const require_deprecate = require('../../prop-types/deprecate.js');
16
+ const require_useMergedRefs = require('../../internal/useMergedRefs.js');
17
+ const require_useEvent = require('../../internal/useEvent.js');
18
+ const require_Tooltip = require('../Tooltip/Tooltip.js');
19
+ const require_index = require('../BadgeIndicator/index.js');
20
+ const require_utils = require('../../internal/utils.js');
21
+ const require_useControllableState = require('../../internal/useControllableState.js');
22
+ const require_Grid = require('../Grid/Grid.js');
23
+ const require_useMatchMedia = require('../../internal/useMatchMedia.js');
24
+ const require_usePressable = require('./usePressable.js');
25
+ let classnames = require("classnames");
26
+ classnames = require_runtime.__toESM(classnames);
27
+ let react = require("react");
28
+ react = require_runtime.__toESM(react);
29
+ let prop_types = require("prop-types");
30
+ prop_types = require_runtime.__toESM(prop_types);
31
+ let react_jsx_runtime = require("react/jsx-runtime");
32
+ let _carbon_icons_react = require("@carbon/icons-react");
33
+ let es_toolkit_compat = require("es-toolkit/compat");
34
+ let _carbon_layout = require("@carbon/layout");
35
+
36
+ //#region src/components/Tabs/Tabs.tsx
37
+ /**
38
+ * Copyright IBM Corp. 2016, 2026
39
+ *
40
+ * This source code is licensed under the Apache-2.0 license found in the
41
+ * LICENSE file in the root directory of this source tree.
42
+ */
42
43
  const verticalTabHeight = 64;
43
-
44
- // Used to manage the overall state of the Tabs
45
-
46
- const TabsContext = /*#__PURE__*/React.createContext({
47
- baseId: '',
48
- activeIndex: 0,
49
- defaultSelectedIndex: 0,
50
- dismissable: false,
51
- onTabCloseRequest() {},
52
- setActiveIndex() {},
53
- selectedIndex: 0,
54
- setSelectedIndex() {}
44
+ const TabsContext = react.default.createContext({
45
+ baseId: "",
46
+ activeIndex: 0,
47
+ defaultSelectedIndex: 0,
48
+ dismissable: false,
49
+ onTabCloseRequest() {},
50
+ setActiveIndex() {},
51
+ selectedIndex: 0,
52
+ setSelectedIndex() {}
55
53
  });
56
-
57
- // Used to keep track of position in a tablist
58
- const TabContext = /*#__PURE__*/React.createContext({
59
- index: 0,
60
- hasSecondaryLabel: false
54
+ const TabContext = react.default.createContext({
55
+ index: 0,
56
+ hasSecondaryLabel: false
61
57
  });
62
- const lgMediaQuery = `(min-width: ${layout.breakpoints.lg.width})`;
63
- const smMediaQuery = `(max-width: ${layout.breakpoints.md.width})`;
64
-
65
- // Used to keep track of position in a list of tab panels
66
- const TabPanelContext = /*#__PURE__*/React.createContext(0);
67
-
68
- /**
69
- * Tabs
70
- */
71
-
72
- function Tabs({
73
- children,
74
- defaultSelectedIndex = 0,
75
- onChange,
76
- selectedIndex: controlledSelectedIndex,
77
- dismissable,
78
- onTabCloseRequest
79
- }) {
80
- const baseId = useId.useId('ccs');
81
- if (dismissable && !onTabCloseRequest) {
82
- // eslint-disable-next-line no-console -- https://github.com/carbon-design-system/carbon/issues/20452
83
- console.error('dismissable property specified without also providing an onTabCloseRequest property.');
84
- }
85
- // The active index is used to track the element which has focus in our tablist
86
- const [activeIndex, setActiveIndex] = React.useState(defaultSelectedIndex);
87
- // The selected index is used for the tab/panel pairing which is "visible"
88
- const [selectedIndex, setSelectedIndex] = useControllableState.useControllableState({
89
- value: controlledSelectedIndex,
90
- defaultValue: defaultSelectedIndex,
91
- onChange: value => onChange?.({
92
- selectedIndex: value
93
- })
94
- });
95
- const value = {
96
- baseId,
97
- activeIndex,
98
- defaultSelectedIndex,
99
- dismissable,
100
- onTabCloseRequest,
101
- setActiveIndex,
102
- selectedIndex,
103
- setSelectedIndex
104
- };
105
- return /*#__PURE__*/React.createElement(TabsContext.Provider, {
106
- value: value
107
- }, children);
58
+ const lgMediaQuery = `(min-width: ${_carbon_layout.breakpoints.lg.width})`;
59
+ const smMediaQuery = `(max-width: ${_carbon_layout.breakpoints.md.width})`;
60
+ const TabPanelContext = react.default.createContext(0);
61
+ function Tabs({ children, defaultSelectedIndex = 0, onChange, selectedIndex: controlledSelectedIndex, dismissable, onTabCloseRequest }) {
62
+ const baseId = require_useId.useId("ccs");
63
+ if (dismissable && !onTabCloseRequest) console.error("dismissable property specified without also providing an onTabCloseRequest property.");
64
+ const [activeIndex, setActiveIndex] = (0, react.useState)(defaultSelectedIndex);
65
+ const [selectedIndex, setSelectedIndex] = require_useControllableState.useControllableState({
66
+ value: controlledSelectedIndex,
67
+ defaultValue: defaultSelectedIndex,
68
+ onChange: (value) => onChange?.({ selectedIndex: value })
69
+ });
70
+ const value = {
71
+ baseId,
72
+ activeIndex,
73
+ defaultSelectedIndex,
74
+ dismissable,
75
+ onTabCloseRequest,
76
+ setActiveIndex,
77
+ selectedIndex,
78
+ setSelectedIndex
79
+ };
80
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TabsContext.Provider, {
81
+ value,
82
+ children
83
+ });
108
84
  }
109
85
  Tabs.propTypes = {
110
- /**
111
- * Provide child elements to be rendered inside the `Tabs`.
112
- * These elements should render either `TabsList` or `TabsPanels`
113
- */
114
- children: PropTypes.node,
115
- /**
116
- * Specify which content tab should be initially selected when the component
117
- * is first rendered
118
- */
119
- defaultSelectedIndex: PropTypes.number,
120
- /**
121
- * Whether the render Tab children should be dismissable.
122
- */
123
- dismissable: PropTypes.bool,
124
- /**
125
- * Provide an optional function which is called whenever the state of the
126
- * `Tabs` changes
127
- */
128
- onChange: PropTypes.func,
129
- /**
130
- * If specifying the `onTabCloseRequest` prop, provide a callback function
131
- * responsible for removing the tab when close button is pressed on one of the Tab elements
132
- */
133
- onTabCloseRequest: props => {
134
- if (props.dismissable && !props.onTabCloseRequest) {
135
- return new Error('dismissable property specified without also providing an onTabCloseRequest property.');
136
- }
137
- return undefined;
138
- },
139
- /**
140
- * Control which content panel is currently selected. This puts the component
141
- * in a controlled mode and should be used along with `onChange`
142
- */
143
- selectedIndex: PropTypes.number
86
+ children: prop_types.default.node,
87
+ defaultSelectedIndex: prop_types.default.number,
88
+ dismissable: prop_types.default.bool,
89
+ onChange: prop_types.default.func,
90
+ onTabCloseRequest: (props) => {
91
+ if (props.dismissable && !props.onTabCloseRequest) return /* @__PURE__ */ new Error("dismissable property specified without also providing an onTabCloseRequest property.");
92
+ },
93
+ selectedIndex: prop_types.default.number
144
94
  };
145
- function TabsVertical({
146
- children,
147
- height,
148
- defaultSelectedIndex = 0,
149
- onChange,
150
- selectedIndex: controlledSelectedIndex,
151
- ...rest
152
- }) {
153
- const [selectedIndex, setSelectedIndex] = useControllableState.useControllableState({
154
- value: controlledSelectedIndex,
155
- defaultValue: defaultSelectedIndex,
156
- onChange: value => onChange?.({
157
- selectedIndex: value
158
- })
159
- });
160
- const props = {
161
- ...rest,
162
- selectedIndex,
163
- onChange: ({
164
- selectedIndex
165
- }) => setSelectedIndex(selectedIndex)
166
- };
167
- const isSm = useMatchMedia.useMatchMedia(smMediaQuery);
168
- if (!isSm) {
169
- return /*#__PURE__*/React.createElement(Grid.Grid, {
170
- style: {
171
- height: height
172
- }
173
- }, /*#__PURE__*/React.createElement(Tabs, props, children));
174
- }
175
- return /*#__PURE__*/React.createElement(Tabs, props, children);
95
+ function TabsVertical({ children, height, defaultSelectedIndex = 0, onChange, selectedIndex: controlledSelectedIndex, ...rest }) {
96
+ const [selectedIndex, setSelectedIndex] = require_useControllableState.useControllableState({
97
+ value: controlledSelectedIndex,
98
+ defaultValue: defaultSelectedIndex,
99
+ onChange: (value) => onChange?.({ selectedIndex: value })
100
+ });
101
+ const props = {
102
+ ...rest,
103
+ selectedIndex,
104
+ onChange: ({ selectedIndex }) => setSelectedIndex(selectedIndex)
105
+ };
106
+ if (!require_useMatchMedia.useMatchMedia(smMediaQuery)) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Grid.GridAsGridComponent, {
107
+ style: { height },
108
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Tabs, {
109
+ ...props,
110
+ children
111
+ })
112
+ });
113
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Tabs, {
114
+ ...props,
115
+ children
116
+ });
176
117
  }
177
118
  TabsVertical.propTypes = {
178
- /**
179
- * Provide child elements to be rendered inside the `TabsVertical`.
180
- * These elements should render either `TabsListVertical` or `TabsPanels`
181
- */
182
- children: PropTypes.node,
183
- /**
184
- * Specify which content tab should be initially selected when the component
185
- * is first rendered
186
- */
187
- defaultSelectedIndex: PropTypes.number,
188
- /**
189
- * Option to set a height style only if using vertical variation
190
- */
191
- height: PropTypes.string,
192
- /**
193
- * Provide an optional function which is called whenever the state of the
194
- * `Tabs` changes
195
- */
196
- onChange: PropTypes.func,
197
- /**
198
- * Control which content panel is currently selected. This puts the component
199
- * in a controlled mode and should be used along with `onChange`
200
- */
201
- selectedIndex: PropTypes.number
119
+ children: prop_types.default.node,
120
+ defaultSelectedIndex: prop_types.default.number,
121
+ height: prop_types.default.string,
122
+ onChange: prop_types.default.func,
123
+ selectedIndex: prop_types.default.number
202
124
  };
203
-
204
125
  /**
205
- * Get the next index for a given keyboard event
206
- * given a count of the total items and the current index
207
- */
126
+ * Get the next index for a given keyboard event
127
+ * given a count of the total items and the current index
128
+ */
208
129
  function getNextIndex(event, total, index) {
209
- switch (true) {
210
- case match.match(event, keys.ArrowRight):
211
- return (index + 1) % total;
212
- case match.match(event, keys.ArrowLeft):
213
- return (total + index - 1) % total;
214
- case match.match(event, keys.Home):
215
- return 0;
216
- case match.match(event, keys.End):
217
- return total - 1;
218
- default:
219
- return index;
220
- }
130
+ switch (true) {
131
+ case require_match.match(event, require_keys.ArrowRight): return (index + 1) % total;
132
+ case require_match.match(event, require_keys.ArrowLeft): return (total + index - 1) % total;
133
+ case require_match.match(event, require_keys.Home): return 0;
134
+ case require_match.match(event, require_keys.End): return total - 1;
135
+ default: return index;
136
+ }
221
137
  }
222
-
223
138
  /**
224
- * Get the next index for a given keyboard event
225
- * given a count of the total items and the current index
226
- */
139
+ * Get the next index for a given keyboard event
140
+ * given a count of the total items and the current index
141
+ */
227
142
  function getNextIndexVertical(event, total, index) {
228
- switch (true) {
229
- case match.match(event, keys.ArrowDown):
230
- return (index + 1) % total;
231
- case match.match(event, keys.ArrowUp):
232
- return (total + index - 1) % total;
233
- case match.match(event, keys.Home):
234
- return 0;
235
- case match.match(event, keys.End):
236
- return total - 1;
237
- default:
238
- return index;
239
- }
143
+ switch (true) {
144
+ case require_match.match(event, require_keys.ArrowDown): return (index + 1) % total;
145
+ case require_match.match(event, require_keys.ArrowUp): return (total + index - 1) % total;
146
+ case require_match.match(event, require_keys.Home): return 0;
147
+ case require_match.match(event, require_keys.End): return total - 1;
148
+ default: return index;
149
+ }
240
150
  }
241
-
242
- /**
243
- * TabList
244
- */
245
-
246
- function TabList({
247
- activation = 'automatic',
248
- 'aria-label': label,
249
- children,
250
- className: customClassName,
251
- contained = false,
252
- fullWidth = false,
253
- iconSize,
254
- leftOverflowButtonProps,
255
- light,
256
- rightOverflowButtonProps,
257
- scrollDebounceWait = 200,
258
- scrollIntoView,
259
- ...rest
260
- }) {
261
- const {
262
- activeIndex,
263
- selectedIndex,
264
- setSelectedIndex,
265
- setActiveIndex,
266
- dismissable
267
- } = React.useContext(TabsContext);
268
- const prefix = usePrefix.usePrefix();
269
- const ref = React.useRef(null);
270
- const previousButton = React.useRef(null);
271
- const nextButton = React.useRef(null);
272
- const [isScrollable, setIsScrollable] = React.useState(false);
273
- const [scrollLeft, setScrollLeft] = React.useState(0);
274
- const hasSecondaryLabelTabs = contained && React.Children.toArray(children).some(child => utils.isComponentElement(child, Tab) && typeof child.props.secondaryLabel !== 'undefined');
275
- const isLg = useMatchMedia.useMatchMedia(lgMediaQuery);
276
- const distributeWidth = fullWidth && contained && isLg && React.Children.toArray(children).length < 9;
277
- const className = cx(`${prefix}--tabs`, {
278
- [`${prefix}--tabs--contained`]: contained,
279
- [`${prefix}--tabs--light`]: light,
280
- [`${prefix}--tabs__icon--default`]: iconSize === 'default',
281
- [`${prefix}--tabs__icon--lg`]: iconSize === 'lg',
282
- // TODO: V12 - Remove this class
283
- [`${prefix}--layout--size-lg`]: iconSize === 'lg',
284
- [`${prefix}--tabs--tall`]: hasSecondaryLabelTabs,
285
- [`${prefix}--tabs--full-width`]: distributeWidth,
286
- [`${prefix}--tabs--dismissable`]: dismissable
287
- }, customClassName);
288
-
289
- // Previous Button
290
- // VISIBLE IF:
291
- // SCROLLABLE
292
- // AND SCROLL_LEFT > 0
293
- //
294
- // TODO: Hoist `buttonWidth` to a module level constant like
295
- // `verticalTabHeight`.
296
- const buttonWidth = 44;
297
- // Next Button
298
- // VISIBLE IF:
299
- // SCROLLABLE
300
- // AND SCROLL_LEFT + CLIENT_WIDTH < SCROLL_WIDTH
301
- const [isNextButtonVisible, setIsNextButtonVisible] = React.useState(ref.current ? scrollLeft + buttonWidth + ref.current.clientWidth < ref.current.scrollWidth : false);
302
- const isPreviousButtonVisible = ref.current ? isScrollable && scrollLeft > 0 : false;
303
- const previousButtonClasses = cx(`${prefix}--tab--overflow-nav-button`, `${prefix}--tab--overflow-nav-button--previous`, {
304
- [`${prefix}--tab--overflow-nav-button--hidden`]: !isPreviousButtonVisible
305
- });
306
- const nextButtonClasses = cx(`${prefix}--tab--overflow-nav-button`, `${prefix}--tab--overflow-nav-button--next`, {
307
- [`${prefix}--tab--overflow-nav-button--hidden`]: !isNextButtonVisible
308
- });
309
- const tabs = React.useRef([]);
310
- const debouncedOnScroll = React.useCallback(() => {
311
- const updateScroll = debounce.debounce(() => {
312
- if (ref.current) {
313
- setScrollLeft(ref.current.scrollLeft);
314
- }
315
- }, scrollDebounceWait);
316
- updateScroll();
317
- }, [scrollDebounceWait]);
318
- function onKeyDown(event) {
319
- if (match.matches(event, [keys.ArrowRight, keys.ArrowLeft, keys.Home, keys.End])) {
320
- event.preventDefault();
321
- const filteredTabs = tabs.current.filter(tab => tab !== null);
322
- const activeTabs = filteredTabs.filter(tab => !tab.disabled);
323
- const currentIndex = activeTabs.indexOf(tabs.current[activation === 'automatic' ? selectedIndex : activeIndex]);
324
- const nextIndex = tabs.current.indexOf(activeTabs[getNextIndex(event, activeTabs.length, currentIndex)]);
325
- if (activation === 'automatic') {
326
- setSelectedIndex(nextIndex);
327
- } else if (activation === 'manual') {
328
- setActiveIndex(nextIndex);
329
- }
330
- tabs.current[nextIndex]?.focus();
331
- }
332
- }
333
- function handleBlur({
334
- relatedTarget: currentActiveNode
335
- }) {
336
- if (ref.current?.contains(currentActiveNode)) {
337
- return;
338
- }
339
- // reset active index to selected tab index for manual activation
340
- if (activation === 'manual') {
341
- setActiveIndex(selectedIndex);
342
- }
343
- }
344
-
345
- /**
346
- * Scroll the tab into view if it is not already visible
347
- * @param tab - The tab to scroll into view
348
- * @returns {void}
349
- */
350
- function scrollTabIntoView(tab) {
351
- if (!isScrollable || !ref.current) {
352
- return;
353
- }
354
- if (tab) {
355
- // The width of the "scroll buttons"
356
- const {
357
- width: tabWidth
358
- } = tab.getBoundingClientRect();
359
-
360
- // The start and end position of the selected tab
361
- const start = tab.offsetLeft;
362
- const end = tab.offsetLeft + tabWidth;
363
-
364
- // The start and end of the visible area for the tabs
365
- const visibleStart = ref.current.scrollLeft + buttonWidth;
366
- const visibleEnd = ref.current.scrollLeft + ref.current.clientWidth - buttonWidth;
367
-
368
- // The beginning of the tab is clipped and not visible
369
- if (start < visibleStart) {
370
- setScrollLeft(start - buttonWidth);
371
- }
372
-
373
- // The end of the tab is clipped and not visible
374
- if (end > visibleEnd) {
375
- setScrollLeft(end + buttonWidth - ref.current.clientWidth);
376
- }
377
- }
378
- }
379
- React.useEffect(() => {
380
- const tab = tabs.current[selectedIndex];
381
- if (scrollIntoView && tab) {
382
- tab.scrollIntoView({
383
- block: 'nearest',
384
- inline: 'nearest'
385
- });
386
- }
387
- // eslint-disable-next-line react-hooks/exhaustive-deps -- https://github.com/carbon-design-system/carbon/issues/20452
388
- }, []);
389
- React.useEffect(() => {
390
- // adding 1 in calculation for firefox support
391
- setIsNextButtonVisible(ref.current ? scrollLeft + buttonWidth + ref.current.clientWidth + 1 < ref.current.scrollWidth : false);
392
- if (dismissable && ref.current) {
393
- // adding 1 in calculation for firefox support
394
- setIsScrollable(ref.current.scrollWidth > ref.current.clientWidth + 1);
395
- }
396
- }, [children, dismissable, scrollLeft]);
397
- React.useEffect(() => {
398
- if (tabs.current[selectedIndex]?.disabled) {
399
- const activeTabs = tabs.current.filter(tab => {
400
- return !tab.disabled;
401
- });
402
- if (activeTabs.length > 0) {
403
- const tab = activeTabs[0];
404
- setSelectedIndex(tabs.current.indexOf(tab));
405
- }
406
- }
407
- // eslint-disable-next-line react-hooks/exhaustive-deps -- https://github.com/carbon-design-system/carbon/issues/20452
408
- }, []);
409
- useIsomorphicEffect.default(() => {
410
- if (ref.current) {
411
- // adding 1 in calculation for firefox support
412
- setIsScrollable(ref.current.scrollWidth > ref.current.clientWidth + 1);
413
- }
414
- function handler() {
415
- if (ref.current) {
416
- // adding 1 in calculation for firefox support
417
- setIsScrollable(ref.current.scrollWidth > ref.current.clientWidth + 1);
418
- }
419
- }
420
- const debouncedHandler = debounce.debounce(handler, 200);
421
- window.addEventListener('resize', debouncedHandler);
422
- return () => {
423
- debouncedHandler.cancel();
424
- window.removeEventListener('resize', debouncedHandler);
425
- };
426
- }, []);
427
-
428
- // updates scroll location for all scroll behavior.
429
- useIsomorphicEffect.default(() => {
430
- if (scrollLeft !== null && ref.current) {
431
- ref.current.scrollLeft = scrollLeft;
432
- }
433
- }, [scrollLeft]);
434
-
435
- // scroll manual tabs when active index changes (focus outline movement)
436
- useIsomorphicEffect.default(() => {
437
- const tab = activation === 'manual' ? tabs.current[activeIndex] : tabs.current[selectedIndex];
438
- scrollTabIntoView(tab);
439
- }, [activation, activeIndex]);
440
-
441
- // scroll tabs when selected index changes
442
- useIsomorphicEffect.default(() => {
443
- const tab = tabs.current[selectedIndex];
444
- scrollTabIntoView(tab);
445
- }, [selectedIndex, isScrollable, children]);
446
- usePressable.usePressable(previousButton, {
447
- onPress({
448
- longPress
449
- }) {
450
- if (!longPress && ref.current) {
451
- setScrollLeft(Math.max(scrollLeft - ref.current.scrollWidth / tabs.current.length * 1.5, 0));
452
- }
453
- },
454
- onLongPress() {
455
- return createLongPressBehavior(ref, 'backward', setScrollLeft);
456
- }
457
- });
458
- usePressable.usePressable(nextButton, {
459
- onPress({
460
- longPress
461
- }) {
462
- if (!longPress && ref.current) {
463
- setScrollLeft(Math.min(scrollLeft + ref.current.scrollWidth / tabs.current.length * 1.5, ref.current.scrollWidth - ref.current.clientWidth));
464
- }
465
- },
466
- onLongPress() {
467
- return createLongPressBehavior(ref, 'forward', setScrollLeft);
468
- }
469
- });
470
- return /*#__PURE__*/React.createElement("div", {
471
- className: className
472
- }, /*#__PURE__*/React.createElement("button", _rollupPluginBabelHelpers.extends({
473
- "aria-hidden": "true",
474
- tabIndex: -1,
475
- "aria-label": "Scroll left",
476
- ref: previousButton,
477
- className: previousButtonClasses,
478
- type: "button"
479
- }, leftOverflowButtonProps), _ChevronLeft || (_ChevronLeft = /*#__PURE__*/React.createElement(iconsReact.ChevronLeft, null))), /*#__PURE__*/React.createElement("div", _rollupPluginBabelHelpers.extends({}, rest, {
480
- "aria-label": label,
481
- ref: ref,
482
- role: "tablist",
483
- className: `${prefix}--tab--list`,
484
- onScroll: debouncedOnScroll,
485
- onKeyDown: onKeyDown,
486
- onBlur: handleBlur
487
- }), React.Children.map(children, (child, index) => {
488
- return ! /*#__PURE__*/React.isValidElement(child) ? null : /*#__PURE__*/React.createElement(TabContext.Provider, {
489
- value: {
490
- index,
491
- hasSecondaryLabel: hasSecondaryLabelTabs,
492
- contained
493
- }
494
- }, /*#__PURE__*/React.cloneElement(child, {
495
- ref: node => {
496
- if (!node) return;
497
- tabs.current[index] = node;
498
- }
499
- }));
500
- })), /*#__PURE__*/React.createElement("button", _rollupPluginBabelHelpers.extends({
501
- "aria-hidden": "true",
502
- tabIndex: -1,
503
- "aria-label": "Scroll right",
504
- ref: nextButton,
505
- className: nextButtonClasses,
506
- type: "button"
507
- }, rightOverflowButtonProps), _ChevronRight || (_ChevronRight = /*#__PURE__*/React.createElement(iconsReact.ChevronRight, null))));
151
+ function TabList({ activation = "automatic", "aria-label": label, children, className: customClassName, contained = false, fullWidth = false, iconSize, leftOverflowButtonProps, light, rightOverflowButtonProps, scrollDebounceWait = 200, scrollIntoView, ...rest }) {
152
+ const { activeIndex, selectedIndex, setSelectedIndex, setActiveIndex, dismissable } = react.default.useContext(TabsContext);
153
+ const prefix = require_usePrefix.usePrefix();
154
+ const ref = (0, react.useRef)(null);
155
+ const previousButton = (0, react.useRef)(null);
156
+ const nextButton = (0, react.useRef)(null);
157
+ const [isScrollable, setIsScrollable] = (0, react.useState)(false);
158
+ const [scrollLeft, setScrollLeft] = (0, react.useState)(0);
159
+ const hasSecondaryLabelTabs = contained && react.Children.toArray(children).some((child) => require_utils.isComponentElement(child, Tab) && typeof child.props.secondaryLabel !== "undefined");
160
+ const isLg = require_useMatchMedia.useMatchMedia(lgMediaQuery);
161
+ const distributeWidth = fullWidth && contained && isLg && react.default.Children.toArray(children).length < 9;
162
+ const className = (0, classnames.default)(`${prefix}--tabs`, {
163
+ [`${prefix}--tabs--contained`]: contained,
164
+ [`${prefix}--tabs--light`]: light,
165
+ [`${prefix}--tabs__icon--default`]: iconSize === "default",
166
+ [`${prefix}--tabs__icon--lg`]: iconSize === "lg",
167
+ [`${prefix}--layout--size-lg`]: iconSize === "lg",
168
+ [`${prefix}--tabs--tall`]: hasSecondaryLabelTabs,
169
+ [`${prefix}--tabs--full-width`]: distributeWidth,
170
+ [`${prefix}--tabs--dismissable`]: dismissable
171
+ }, customClassName);
172
+ const buttonWidth = 44;
173
+ const [isNextButtonVisible, setIsNextButtonVisible] = (0, react.useState)(ref.current ? scrollLeft + buttonWidth + ref.current.clientWidth < ref.current.scrollWidth : false);
174
+ const isPreviousButtonVisible = ref.current ? isScrollable && scrollLeft > 0 : false;
175
+ const previousButtonClasses = (0, classnames.default)(`${prefix}--tab--overflow-nav-button`, `${prefix}--tab--overflow-nav-button--previous`, { [`${prefix}--tab--overflow-nav-button--hidden`]: !isPreviousButtonVisible });
176
+ const nextButtonClasses = (0, classnames.default)(`${prefix}--tab--overflow-nav-button`, `${prefix}--tab--overflow-nav-button--next`, { [`${prefix}--tab--overflow-nav-button--hidden`]: !isNextButtonVisible });
177
+ const tabs = (0, react.useRef)([]);
178
+ const debouncedOnScroll = (0, react.useCallback)(() => {
179
+ (0, es_toolkit_compat.debounce)(() => {
180
+ if (ref.current) setScrollLeft(ref.current.scrollLeft);
181
+ }, scrollDebounceWait)();
182
+ }, [scrollDebounceWait]);
183
+ function onKeyDown(event) {
184
+ if (require_match.matches(event, [
185
+ require_keys.ArrowRight,
186
+ require_keys.ArrowLeft,
187
+ require_keys.Home,
188
+ require_keys.End
189
+ ])) {
190
+ event.preventDefault();
191
+ const activeTabs = tabs.current.filter((tab) => tab !== null).filter((tab) => !tab.disabled);
192
+ const currentIndex = activeTabs.indexOf(tabs.current[activation === "automatic" ? selectedIndex : activeIndex]);
193
+ const nextIndex = tabs.current.indexOf(activeTabs[getNextIndex(event, activeTabs.length, currentIndex)]);
194
+ if (activation === "automatic") setSelectedIndex(nextIndex);
195
+ else if (activation === "manual") setActiveIndex(nextIndex);
196
+ tabs.current[nextIndex]?.focus();
197
+ }
198
+ }
199
+ function handleBlur({ relatedTarget: currentActiveNode }) {
200
+ if (ref.current?.contains(currentActiveNode)) return;
201
+ if (activation === "manual") setActiveIndex(selectedIndex);
202
+ }
203
+ /**
204
+ * Scroll the tab into view if it is not already visible
205
+ * @param tab - The tab to scroll into view
206
+ * @returns {void}
207
+ */
208
+ function scrollTabIntoView(tab) {
209
+ if (!isScrollable || !ref.current) return;
210
+ if (tab) {
211
+ const { width: tabWidth } = tab.getBoundingClientRect();
212
+ const start = tab.offsetLeft;
213
+ const end = tab.offsetLeft + tabWidth;
214
+ const visibleStart = ref.current.scrollLeft + buttonWidth;
215
+ const visibleEnd = ref.current.scrollLeft + ref.current.clientWidth - buttonWidth;
216
+ if (start < visibleStart) setScrollLeft(start - buttonWidth);
217
+ if (end > visibleEnd) setScrollLeft(end + buttonWidth - ref.current.clientWidth);
218
+ }
219
+ }
220
+ (0, react.useEffect)(() => {
221
+ const tab = tabs.current[selectedIndex];
222
+ if (scrollIntoView && tab) tab.scrollIntoView({
223
+ block: "nearest",
224
+ inline: "nearest"
225
+ });
226
+ }, []);
227
+ (0, react.useEffect)(() => {
228
+ setIsNextButtonVisible(ref.current ? scrollLeft + buttonWidth + ref.current.clientWidth + 1 < ref.current.scrollWidth : false);
229
+ if (dismissable && ref.current) setIsScrollable(ref.current.scrollWidth > ref.current.clientWidth + 1);
230
+ }, [
231
+ children,
232
+ dismissable,
233
+ scrollLeft
234
+ ]);
235
+ (0, react.useEffect)(() => {
236
+ if (tabs.current[selectedIndex]?.disabled) {
237
+ const activeTabs = tabs.current.filter((tab) => {
238
+ return !tab.disabled;
239
+ });
240
+ if (activeTabs.length > 0) {
241
+ const tab = activeTabs[0];
242
+ setSelectedIndex(tabs.current.indexOf(tab));
243
+ }
244
+ }
245
+ }, []);
246
+ require_useIsomorphicEffect.default(() => {
247
+ if (ref.current) setIsScrollable(ref.current.scrollWidth > ref.current.clientWidth + 1);
248
+ function handler() {
249
+ if (ref.current) setIsScrollable(ref.current.scrollWidth > ref.current.clientWidth + 1);
250
+ }
251
+ const debouncedHandler = (0, es_toolkit_compat.debounce)(handler, 200);
252
+ window.addEventListener("resize", debouncedHandler);
253
+ return () => {
254
+ debouncedHandler.cancel();
255
+ window.removeEventListener("resize", debouncedHandler);
256
+ };
257
+ }, []);
258
+ require_useIsomorphicEffect.default(() => {
259
+ if (scrollLeft !== null && ref.current) ref.current.scrollLeft = scrollLeft;
260
+ }, [scrollLeft]);
261
+ require_useIsomorphicEffect.default(() => {
262
+ scrollTabIntoView(activation === "manual" ? tabs.current[activeIndex] : tabs.current[selectedIndex]);
263
+ }, [activation, activeIndex]);
264
+ require_useIsomorphicEffect.default(() => {
265
+ const tab = tabs.current[selectedIndex];
266
+ scrollTabIntoView(tab);
267
+ }, [
268
+ selectedIndex,
269
+ isScrollable,
270
+ children
271
+ ]);
272
+ require_usePressable.usePressable(previousButton, {
273
+ onPress({ longPress }) {
274
+ if (!longPress && ref.current) setScrollLeft(Math.max(scrollLeft - ref.current.scrollWidth / tabs.current.length * 1.5, 0));
275
+ },
276
+ onLongPress() {
277
+ return createLongPressBehavior(ref, "backward", setScrollLeft);
278
+ }
279
+ });
280
+ require_usePressable.usePressable(nextButton, {
281
+ onPress({ longPress }) {
282
+ if (!longPress && ref.current) setScrollLeft(Math.min(scrollLeft + ref.current.scrollWidth / tabs.current.length * 1.5, ref.current.scrollWidth - ref.current.clientWidth));
283
+ },
284
+ onLongPress() {
285
+ return createLongPressBehavior(ref, "forward", setScrollLeft);
286
+ }
287
+ });
288
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
289
+ className,
290
+ children: [
291
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
292
+ "aria-hidden": "true",
293
+ tabIndex: -1,
294
+ "aria-label": "Scroll left",
295
+ ref: previousButton,
296
+ className: previousButtonClasses,
297
+ type: "button",
298
+ ...leftOverflowButtonProps,
299
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_carbon_icons_react.ChevronLeft, {})
300
+ }),
301
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
302
+ ...rest,
303
+ "aria-label": label,
304
+ ref,
305
+ role: "tablist",
306
+ className: `${prefix}--tab--list`,
307
+ onScroll: debouncedOnScroll,
308
+ onKeyDown,
309
+ onBlur: handleBlur,
310
+ children: react.Children.map(children, (child, index) => {
311
+ return !(0, react.isValidElement)(child) ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TabContext.Provider, {
312
+ value: {
313
+ index,
314
+ hasSecondaryLabel: hasSecondaryLabelTabs,
315
+ contained
316
+ },
317
+ children: (0, react.cloneElement)(child, { ref: (node) => {
318
+ if (!node) return;
319
+ tabs.current[index] = node;
320
+ } })
321
+ });
322
+ })
323
+ }),
324
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
325
+ "aria-hidden": "true",
326
+ tabIndex: -1,
327
+ "aria-label": "Scroll right",
328
+ ref: nextButton,
329
+ className: nextButtonClasses,
330
+ type: "button",
331
+ ...rightOverflowButtonProps,
332
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_carbon_icons_react.ChevronRight, {})
333
+ })
334
+ ]
335
+ });
508
336
  }
509
337
  TabList.propTypes = {
510
- /**
511
- * Specify whether the content tab should be activated automatically or
512
- * manually
513
- */
514
- activation: PropTypes.oneOf(['automatic', 'manual']),
515
- /**
516
- * Provide an accessible label to be read when a user interacts with this
517
- * component
518
- */
519
- 'aria-label': PropTypes.string,
520
- /**
521
- * Provide child elements to be rendered inside `ContentTabs`.
522
- * These elements should render a `ContentTab`
523
- */
524
- children: PropTypes.node,
525
- /**
526
- * Specify an optional className to be added to the container node
527
- */
528
- className: PropTypes.string,
529
- /**
530
- * Specify whether component is contained type
531
- */
532
- contained: PropTypes.bool,
533
- /**
534
- * Used for tabs within a grid, this makes it so tabs span the full container width and have the same width. Only available on contained tabs with <9 children
535
- */
536
- fullWidth: PropTypes.bool,
537
- /**
538
- * If using `IconTab`, specify the size of the icon being used.
539
- */
540
- iconSize: PropTypes.oneOf(['default', 'lg']),
541
- /**
542
- * Provide the props that describe the left overflow button
543
- */
544
- leftOverflowButtonProps: PropTypes.object,
545
- /**
546
- * Specify whether to use the light component variant
547
- */
548
- light: deprecate.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.'),
549
- /**
550
- * Provide the props that describe the right overflow button
551
- */
552
- rightOverflowButtonProps: PropTypes.object,
553
- /**
554
- * Optionally provide a delay (in milliseconds) passed to the lodash
555
- * debounce of the onScroll handler. This will impact the responsiveness
556
- * of scroll arrow buttons rendering when scrolling to the first or last tab.
557
- */
558
- scrollDebounceWait: PropTypes.number,
559
- /**
560
- * Choose whether to automatically scroll
561
- * to newly selected tabs on component rerender
562
- */
563
- scrollIntoView: PropTypes.bool
338
+ activation: prop_types.default.oneOf(["automatic", "manual"]),
339
+ "aria-label": prop_types.default.string,
340
+ children: prop_types.default.node,
341
+ className: prop_types.default.string,
342
+ contained: prop_types.default.bool,
343
+ fullWidth: prop_types.default.bool,
344
+ iconSize: prop_types.default.oneOf(["default", "lg"]),
345
+ leftOverflowButtonProps: prop_types.default.object,
346
+ light: require_deprecate.deprecate(prop_types.default.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."),
347
+ rightOverflowButtonProps: prop_types.default.object,
348
+ scrollDebounceWait: prop_types.default.number,
349
+ scrollIntoView: prop_types.default.bool
564
350
  };
565
-
566
- /**
567
- * TabListVertical
568
- */
569
-
570
- // type TabElement = HTMLElement & { disabled?: boolean };
571
-
572
- function TabListVertical({
573
- activation = 'automatic',
574
- 'aria-label': label,
575
- children,
576
- className: customClassName,
577
- scrollIntoView,
578
- ...rest
579
- }) {
580
- const {
581
- activeIndex,
582
- selectedIndex,
583
- setSelectedIndex,
584
- setActiveIndex
585
- } = React.useContext(TabsContext);
586
- const prefix = usePrefix.usePrefix();
587
- const ref = React.useRef(null);
588
- const [isOverflowingBottom, setIsOverflowingBottom] = React.useState(false);
589
- const [isOverflowingTop, setIsOverflowingTop] = React.useState(false);
590
- const isSm = useMatchMedia.useMatchMedia(smMediaQuery);
591
- const className = cx(`${prefix}--tabs`, `${prefix}--tabs--vertical`, `${prefix}--tabs--contained`, customClassName);
592
- const tabs = React.useRef([]);
593
- function onKeyDown(event) {
594
- if (match.matches(event, [keys.ArrowDown, keys.ArrowUp, keys.Home, keys.End])) {
595
- event.preventDefault();
596
- const filteredTabs = tabs.current.filter(tab => tab !== null);
597
- const activeTabs = filteredTabs.filter(tab => !tab.disabled);
598
- const currentIndex = activeTabs.indexOf(tabs.current[activation === 'automatic' ? selectedIndex : activeIndex]);
599
- const nextIndex = tabs.current.indexOf(activeTabs[getNextIndexVertical(event, activeTabs.length, currentIndex)]);
600
- if (activation === 'automatic') {
601
- setSelectedIndex(nextIndex);
602
- } else if (activation === 'manual') {
603
- setActiveIndex(nextIndex);
604
- }
605
- tabs.current[nextIndex]?.focus();
606
- }
607
- }
608
- function handleBlur({
609
- relatedTarget: currentActiveNode
610
- }) {
611
- if (ref.current?.contains(currentActiveNode)) {
612
- return;
613
- }
614
- // reset active index to selected tab index for manual activation
615
- if (activation === 'manual') {
616
- setActiveIndex(selectedIndex);
617
- }
618
- }
619
- React.useEffect(() => {
620
- if (tabs.current[selectedIndex]?.disabled) {
621
- const activeTabs = tabs.current.filter(tab => {
622
- return !tab.disabled;
623
- });
624
- if (activeTabs.length > 0) {
625
- const tab = activeTabs[0];
626
- setSelectedIndex(tabs.current.indexOf(tab));
627
- }
628
- }
629
- // eslint-disable-next-line react-hooks/exhaustive-deps -- https://github.com/carbon-design-system/carbon/issues/20452
630
- }, []);
631
- React.useEffect(() => {
632
- function handler() {
633
- const containerHeight = ref.current?.offsetHeight;
634
- const containerTop = ref.current?.getBoundingClientRect().top;
635
- const selectedPositionTop = tabs.current[selectedIndex]?.getBoundingClientRect().top;
636
- const halfTabHeight = verticalTabHeight / 2;
637
- if (containerTop && containerHeight) {
638
- // scrolls so selected tab is in view
639
- if (selectedPositionTop - halfTabHeight < containerTop || selectedPositionTop - containerTop + verticalTabHeight + halfTabHeight > containerHeight) {
640
- ref.current?.scrollTo({
641
- top: (selectedIndex - 1) * verticalTabHeight,
642
- behavior: 'smooth'
643
- });
644
- }
645
- }
646
- }
647
- window.addEventListener('resize', handler);
648
- handler();
649
- return () => {
650
- window.removeEventListener('resize', handler);
651
- };
652
- }, [selectedIndex, scrollIntoView]);
653
- React.useEffect(() => {
654
- const element = ref.current;
655
- if (!element) {
656
- return;
657
- }
658
- const handler = () => {
659
- const halfTabHeight = verticalTabHeight / 2;
660
- setIsOverflowingBottom(element.scrollTop + element.clientHeight + halfTabHeight <= element.scrollHeight);
661
- setIsOverflowingTop(element.scrollTop > halfTabHeight);
662
- };
663
- const resizeObserver = new ResizeObserver(() => handler());
664
- resizeObserver.observe(element);
665
- element.addEventListener('scroll', handler);
666
- return () => {
667
- resizeObserver.disconnect();
668
- element.removeEventListener('scroll', handler);
669
- };
670
- });
671
- if (isSm) {
672
- return /*#__PURE__*/React.createElement(TabList, _rollupPluginBabelHelpers.extends({}, rest, {
673
- "aria-label": label,
674
- contained: true
675
- }), children);
676
- }
677
- return /*#__PURE__*/React.createElement("div", {
678
- className: className
679
- }, isOverflowingTop && /*#__PURE__*/React.createElement("div", {
680
- className: `${prefix}--tab--list-gradient_top`
681
- }), /*#__PURE__*/React.createElement("div", _rollupPluginBabelHelpers.extends({}, rest, {
682
- "aria-label": label,
683
- ref: ref,
684
- role: "tablist",
685
- className: `${prefix}--tab--list`,
686
- onKeyDown: onKeyDown,
687
- onBlur: handleBlur
688
- }), React.Children.map(children, (child, index) => {
689
- return ! /*#__PURE__*/React.isValidElement(child) ? null : /*#__PURE__*/React.createElement(TabContext.Provider, {
690
- value: {
691
- index,
692
- hasSecondaryLabel: false
693
- }
694
- }, /*#__PURE__*/React.cloneElement(child, {
695
- ref: node => {
696
- if (!node) return;
697
- tabs.current[index] = node;
698
- }
699
- }));
700
- })), isOverflowingBottom && /*#__PURE__*/React.createElement("div", {
701
- className: `${prefix}--tab--list-gradient_bottom`
702
- }));
351
+ function TabListVertical({ activation = "automatic", "aria-label": label, children, className: customClassName, scrollIntoView, ...rest }) {
352
+ const { activeIndex, selectedIndex, setSelectedIndex, setActiveIndex } = react.default.useContext(TabsContext);
353
+ const prefix = require_usePrefix.usePrefix();
354
+ const ref = (0, react.useRef)(null);
355
+ const [isOverflowingBottom, setIsOverflowingBottom] = (0, react.useState)(false);
356
+ const [isOverflowingTop, setIsOverflowingTop] = (0, react.useState)(false);
357
+ const isSm = require_useMatchMedia.useMatchMedia(smMediaQuery);
358
+ const className = (0, classnames.default)(`${prefix}--tabs`, `${prefix}--tabs--vertical`, `${prefix}--tabs--contained`, customClassName);
359
+ const tabs = (0, react.useRef)([]);
360
+ function onKeyDown(event) {
361
+ if (require_match.matches(event, [
362
+ require_keys.ArrowDown,
363
+ require_keys.ArrowUp,
364
+ require_keys.Home,
365
+ require_keys.End
366
+ ])) {
367
+ event.preventDefault();
368
+ const activeTabs = tabs.current.filter((tab) => tab !== null).filter((tab) => !tab.disabled);
369
+ const currentIndex = activeTabs.indexOf(tabs.current[activation === "automatic" ? selectedIndex : activeIndex]);
370
+ const nextIndex = tabs.current.indexOf(activeTabs[getNextIndexVertical(event, activeTabs.length, currentIndex)]);
371
+ if (activation === "automatic") setSelectedIndex(nextIndex);
372
+ else if (activation === "manual") setActiveIndex(nextIndex);
373
+ tabs.current[nextIndex]?.focus();
374
+ }
375
+ }
376
+ function handleBlur({ relatedTarget: currentActiveNode }) {
377
+ if (ref.current?.contains(currentActiveNode)) return;
378
+ if (activation === "manual") setActiveIndex(selectedIndex);
379
+ }
380
+ (0, react.useEffect)(() => {
381
+ if (tabs.current[selectedIndex]?.disabled) {
382
+ const activeTabs = tabs.current.filter((tab) => {
383
+ return !tab.disabled;
384
+ });
385
+ if (activeTabs.length > 0) {
386
+ const tab = activeTabs[0];
387
+ setSelectedIndex(tabs.current.indexOf(tab));
388
+ }
389
+ }
390
+ }, []);
391
+ (0, react.useEffect)(() => {
392
+ function handler() {
393
+ const containerHeight = ref.current?.offsetHeight;
394
+ const containerTop = ref.current?.getBoundingClientRect().top;
395
+ const selectedPositionTop = tabs.current[selectedIndex]?.getBoundingClientRect().top;
396
+ const halfTabHeight = verticalTabHeight / 2;
397
+ if (containerTop && containerHeight) {
398
+ if (selectedPositionTop - halfTabHeight < containerTop || selectedPositionTop - containerTop + verticalTabHeight + halfTabHeight > containerHeight) ref.current?.scrollTo({
399
+ top: (selectedIndex - 1) * verticalTabHeight,
400
+ behavior: "smooth"
401
+ });
402
+ }
403
+ }
404
+ window.addEventListener("resize", handler);
405
+ handler();
406
+ return () => {
407
+ window.removeEventListener("resize", handler);
408
+ };
409
+ }, [selectedIndex, scrollIntoView]);
410
+ (0, react.useEffect)(() => {
411
+ const element = ref.current;
412
+ if (!element) return;
413
+ const handler = () => {
414
+ const halfTabHeight = verticalTabHeight / 2;
415
+ setIsOverflowingBottom(element.scrollTop + element.clientHeight + halfTabHeight <= element.scrollHeight);
416
+ setIsOverflowingTop(element.scrollTop > halfTabHeight);
417
+ };
418
+ const resizeObserver = new ResizeObserver(() => handler());
419
+ resizeObserver.observe(element);
420
+ element.addEventListener("scroll", handler);
421
+ return () => {
422
+ resizeObserver.disconnect();
423
+ element.removeEventListener("scroll", handler);
424
+ };
425
+ });
426
+ if (isSm) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TabList, {
427
+ ...rest,
428
+ "aria-label": label,
429
+ contained: true,
430
+ children
431
+ });
432
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
433
+ className,
434
+ children: [
435
+ isOverflowingTop && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: `${prefix}--tab--list-gradient_top` }),
436
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
437
+ ...rest,
438
+ "aria-label": label,
439
+ ref,
440
+ role: "tablist",
441
+ className: `${prefix}--tab--list`,
442
+ onKeyDown,
443
+ onBlur: handleBlur,
444
+ children: react.Children.map(children, (child, index) => {
445
+ return !(0, react.isValidElement)(child) ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TabContext.Provider, {
446
+ value: {
447
+ index,
448
+ hasSecondaryLabel: false
449
+ },
450
+ children: (0, react.cloneElement)(child, { ref: (node) => {
451
+ if (!node) return;
452
+ tabs.current[index] = node;
453
+ } })
454
+ });
455
+ })
456
+ }),
457
+ isOverflowingBottom && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: `${prefix}--tab--list-gradient_bottom` })
458
+ ]
459
+ });
703
460
  }
704
461
  TabListVertical.propTypes = {
705
- /**
706
- * Specify whether the content tab should be activated automatically or
707
- * manually
708
- */
709
- activation: PropTypes.oneOf(['automatic', 'manual']),
710
- /**
711
- * Provide an accessible label to be read when a user interacts with this
712
- * component
713
- */
714
- 'aria-label': PropTypes.string,
715
- /**
716
- * Provide child elements to be rendered inside `ContentTabs`.
717
- * These elements should render a `ContentTab`
718
- */
719
- children: PropTypes.node,
720
- /**
721
- * Specify an optional className to be added to the container node
722
- */
723
- className: PropTypes.string
462
+ activation: prop_types.default.oneOf(["automatic", "manual"]),
463
+ "aria-label": prop_types.default.string,
464
+ children: prop_types.default.node,
465
+ className: prop_types.default.string
724
466
  };
725
-
726
467
  /**
727
- * Helper function to set up the behavior when a button is "long pressed".
728
- * This function will take a ref to the tablist, a direction, and a setter
729
- * for scrollLeft and will update the scroll position within a requestAnimationFrame.
730
- *
731
- * It returns a cleanup function to be run
732
- * when the long press is deactivated
733
- */
468
+ * Helper function to set up the behavior when a button is "long pressed".
469
+ * This function will take a ref to the tablist, a direction, and a setter
470
+ * for scrollLeft and will update the scroll position within a requestAnimationFrame.
471
+ *
472
+ * It returns a cleanup function to be run
473
+ * when the long press is deactivated
474
+ */
734
475
  function createLongPressBehavior(ref, direction, setScrollLeft) {
735
- const node = ref.current;
736
- if (!node) {
737
- return () => {};
738
- }
739
-
740
- // We manually override the scroll behavior to be "auto".
741
- // If it is set as smooth, this animation does not update correctly
742
- const defaultScrollBehavior = node?.style['scroll-behavior'];
743
- node.style['scroll-behavior'] = 'auto';
744
- const scrollDelta = direction === 'forward' ? 5 : -5;
745
- let frameId = null;
746
- function tick() {
747
- if (!node) {
748
- return;
749
- }
750
- node.scrollLeft = node.scrollLeft + scrollDelta;
751
- frameId = requestAnimationFrame(tick);
752
- }
753
- frameId = requestAnimationFrame(tick);
754
- return () => {
755
- // Restore the previous scroll behavior
756
- node.style['scroll-behavior'] = defaultScrollBehavior;
757
-
758
- // Make sure that our `scrollLeft` value is in sync with the existing
759
- // `ref` after our requestAnimationFrame loop above
760
- setScrollLeft(node.scrollLeft);
761
- if (frameId) {
762
- cancelAnimationFrame(frameId);
763
- }
764
- };
476
+ const node = ref.current;
477
+ if (!node) return () => {};
478
+ const defaultScrollBehavior = node?.style["scroll-behavior"];
479
+ node.style["scroll-behavior"] = "auto";
480
+ const scrollDelta = direction === "forward" ? 5 : -5;
481
+ let frameId = null;
482
+ function tick() {
483
+ if (!node) return;
484
+ node.scrollLeft = node.scrollLeft + scrollDelta;
485
+ frameId = requestAnimationFrame(tick);
486
+ }
487
+ frameId = requestAnimationFrame(tick);
488
+ return () => {
489
+ node.style["scroll-behavior"] = defaultScrollBehavior;
490
+ setScrollLeft(node.scrollLeft);
491
+ if (frameId) cancelAnimationFrame(frameId);
492
+ };
765
493
  }
766
-
767
- /**
768
- * Tab
769
- */
770
-
771
- // eslint-disable-next-line react/display-name -- https://github.com/carbon-design-system/carbon/issues/20452
772
- const Tab = /*#__PURE__*/React.forwardRef(({
773
- as = 'button',
774
- children,
775
- className: customClassName,
776
- disabled,
777
- onClick,
778
- onKeyDown,
779
- secondaryLabel,
780
- renderIcon: Icon,
781
- ...rest
782
- }, forwardRef) => {
783
- const prefix = usePrefix.usePrefix();
784
- const {
785
- selectedIndex,
786
- setSelectedIndex,
787
- baseId,
788
- dismissable,
789
- onTabCloseRequest
790
- } = React.useContext(TabsContext);
791
- const {
792
- index: index$1,
793
- hasSecondaryLabel,
794
- contained
795
- } = React.useContext(TabContext);
796
- const {
797
- badgeIndicator
798
- } = React.useContext(IconTabContext) || {};
799
- const dismissIconRef = React.useRef(null);
800
- const tabRef = React.useRef(null);
801
- const ref = useMergedRefs.useMergedRefs([forwardRef, tabRef]);
802
- const [ignoreHover, setIgnoreHover] = React.useState(false);
803
- const id = `${baseId}-tab-${index$1}`;
804
- const panelId = `${baseId}-tabpanel-${index$1}`;
805
- const [isEllipsisApplied, setIsEllipsisApplied] = React.useState(false);
806
-
807
- // eslint-disable-next-line @typescript-eslint/no-explicit-any -- https://github.com/carbon-design-system/carbon/issues/20452
808
- const isEllipsisActive = element => {
809
- setIsEllipsisApplied(element.offsetHeight < element.scrollHeight);
810
- return element.offsetHeight < element.scrollHeight;
811
- };
812
- const className = cx(`${prefix}--tabs__nav-item`, `${prefix}--tabs__nav-link`, {
813
- [`${prefix}--tabs__nav-item--selected`]: selectedIndex === index$1,
814
- [`${prefix}--tabs__nav-item--disabled`]: disabled,
815
- [`${prefix}--tabs__nav-item--hover-off`]: ignoreHover
816
- }, customClassName);
817
- const BaseComponent = as;
818
- const onDismissIconMouseEnter = evt => {
819
- if (contained && tabRef.current) {
820
- evt.stopPropagation();
821
- setIgnoreHover(true);
822
- tabRef.current.classList.add(`${prefix}--tabs__nav-item--hover-off`);
823
- }
824
- };
825
- const onDismissIconMouseLeave = () => {
826
- if (contained && tabRef.current) {
827
- tabRef.current.classList.remove(`${prefix}--tabs__nav-item--hover-off`);
828
- setIgnoreHover(false);
829
- }
830
- };
831
- useEvent.useEvent(dismissIconRef, 'mouseover', onDismissIconMouseEnter);
832
- useEvent.useEvent(dismissIconRef, 'mouseleave', onDismissIconMouseLeave);
833
- useIsomorphicEffect.default(() => {
834
- function handler() {
835
- const elementTabId = document.getElementById(`${id}`) || tabRef.current;
836
- if (elementTabId?.closest(`.${prefix}--tabs--vertical`)) {
837
- const newElement = elementTabId?.getElementsByClassName(`${prefix}--tabs__nav-item-label`)[0];
838
- isEllipsisActive(newElement);
839
- }
840
- }
841
- handler();
842
- window.addEventListener('resize', handler);
843
- return () => {
844
- window.removeEventListener('resize', handler);
845
- };
846
- }, [prefix, id]);
847
- const handleClose = evt => {
848
- evt.stopPropagation();
849
- onTabCloseRequest?.(index$1);
850
-
851
- // set focus after removing tab
852
- if (tabRef.current && tabRef.current.parentElement) {
853
- // determine number of tabs, excluding disabled
854
- const tabCount = Array.from(tabRef.current.parentElement.childNodes).filter(node => {
855
- if (!(node instanceof HTMLElement)) return false;
856
- return node.classList.contains(`${prefix}--tabs__nav-link`) && !node.classList.contains(`${prefix}--tabs__nav-item--disabled`);
857
- }).length;
858
-
859
- // if not removing last tab focus on next tab
860
- if (tabRef.current && index$1 + 1 !== tabCount) {
861
- tabRef.current.focus();
862
- }
863
- // if removing last tab focus on previous tab
864
- else {
865
- const prevTabIndex = (tabCount - 2) * 2;
866
- const previousTab = tabRef.current.parentElement.childNodes[prevTabIndex];
867
- if (previousTab instanceof HTMLElement) {
868
- previousTab.focus();
869
- }
870
- }
871
- }
872
- };
873
- const handleKeyDown = event => {
874
- if (dismissable && match.match(event, keys.Delete)) {
875
- handleClose(event);
876
- }
877
- onKeyDown?.(event);
878
- };
879
- const DismissIcon = /*#__PURE__*/React.createElement("div", {
880
- className: cx({
881
- [`${prefix}--tabs__nav-item--close`]: dismissable,
882
- [`${prefix}--tabs__nav-item--close--hidden`]: !dismissable
883
- })
884
- }, /*#__PURE__*/React.createElement("button", {
885
- type: "button",
886
- tabIndex: -1,
887
- "aria-disabled": disabled,
888
- "aria-hidden": selectedIndex === index$1 && dismissable ? 'false' : 'true',
889
- disabled: disabled,
890
- className: cx({
891
- [`${prefix}--tabs__nav-item--close-icon`]: dismissable,
892
- [`${prefix}--visually-hidden`]: !dismissable,
893
- [`${prefix}--tabs__nav-item--close-icon--selected`]: selectedIndex === index$1,
894
- [`${prefix}--tabs__nav-item--close-icon--disabled`]: disabled
895
- }),
896
- onClick: handleClose,
897
- title: `Remove ${typeof children === 'string' ? children : ''} tab`,
898
- ref: dismissIconRef
899
- }, /*#__PURE__*/React.createElement(iconsReact.Close, {
900
- "aria-hidden": selectedIndex === index$1 && dismissable ? 'false' : 'true',
901
- "aria-label": `Press delete to remove ${typeof children === 'string' ? children : ''} tab`
902
- })));
903
- const hasIcon = Icon ?? dismissable;
904
-
905
- // should only happen for vertical variation, so no dismissable icon is needed here
906
- if (isEllipsisApplied) {
907
- return /*#__PURE__*/React.createElement(Tooltip.Tooltip, {
908
- label: children,
909
- align: "top",
910
- leaveDelayMs: 0,
911
- autoAlign: true,
912
- onMouseEnter: () => false,
913
- closeOnActivation: true
914
- }, /*#__PURE__*/React.createElement(BaseComponent, _rollupPluginBabelHelpers.extends({}, rest, {
915
- "aria-controls": panelId,
916
- "aria-disabled": disabled,
917
- "aria-selected": selectedIndex === index$1,
918
- ref: ref,
919
- id: id,
920
- role: "tab",
921
- className: className,
922
- disabled: disabled,
923
- title: children,
924
- onClick: evt => {
925
- if (disabled) {
926
- return;
927
- }
928
- setSelectedIndex(index$1);
929
- onClick?.(evt);
930
- },
931
- onKeyDown: handleKeyDown,
932
- tabIndex: selectedIndex === index$1 ? '0' : '-1',
933
- type: "button"
934
- }), /*#__PURE__*/React.createElement("div", {
935
- className: `${prefix}--tabs__nav-item-label-wrapper`
936
- }, /*#__PURE__*/React.createElement(Text.Text, {
937
- className: `${prefix}--tabs__nav-item-label`
938
- }, children)), hasSecondaryLabel && secondaryLabel && /*#__PURE__*/React.createElement(Text.Text, {
939
- as: "div",
940
- className: `${prefix}--tabs__nav-item-secondary-label`,
941
- title: secondaryLabel
942
- }, secondaryLabel)));
943
- }
944
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(BaseComponent, _rollupPluginBabelHelpers.extends({}, rest, {
945
- "aria-controls": panelId,
946
- "aria-disabled": disabled,
947
- "aria-selected": selectedIndex === index$1,
948
- ref: ref,
949
- id: id,
950
- role: "tab",
951
- className: className,
952
- disabled: disabled,
953
- onClick: evt => {
954
- if (disabled) {
955
- return;
956
- }
957
- setSelectedIndex(index$1);
958
- onClick?.(evt);
959
- },
960
- onKeyDown: handleKeyDown,
961
- tabIndex: selectedIndex === index$1 ? '0' : '-1',
962
- type: "button"
963
- }), /*#__PURE__*/React.createElement("div", {
964
- className: `${prefix}--tabs__nav-item-label-wrapper`
965
- }, dismissable && Icon && /*#__PURE__*/React.createElement("div", {
966
- className: `${prefix}--tabs__nav-item--icon-left`
967
- }, /*#__PURE__*/React.createElement(Icon, {
968
- size: 16
969
- })), /*#__PURE__*/React.createElement(Text.Text, {
970
- className: `${prefix}--tabs__nav-item-label`
971
- }, children), !dismissable && Icon && /*#__PURE__*/React.createElement("div", {
972
- className: cx(`${prefix}--tabs__nav-item--icon`, {
973
- [`${prefix}--visually-hidden`]: !hasIcon
974
- })
975
- }, !dismissable && Icon && /*#__PURE__*/React.createElement(Icon, {
976
- size: 16
977
- }))), hasSecondaryLabel && secondaryLabel && /*#__PURE__*/React.createElement(Text.Text, {
978
- as: "div",
979
- className: `${prefix}--tabs__nav-item-secondary-label`,
980
- title: secondaryLabel
981
- }, secondaryLabel), !disabled && badgeIndicator && (_BadgeIndicator || (_BadgeIndicator = /*#__PURE__*/React.createElement(index.BadgeIndicator, null)))), DismissIcon);
494
+ const Tab = (0, react.forwardRef)(({ as = "button", children, className: customClassName, disabled, onClick, onKeyDown, secondaryLabel, renderIcon: Icon, ...rest }, forwardRef) => {
495
+ const prefix = require_usePrefix.usePrefix();
496
+ const { selectedIndex, setSelectedIndex, baseId, dismissable, onTabCloseRequest } = react.default.useContext(TabsContext);
497
+ const { index, hasSecondaryLabel, contained } = react.default.useContext(TabContext);
498
+ const { badgeIndicator } = react.default.useContext(IconTabContext) || {};
499
+ const dismissIconRef = (0, react.useRef)(null);
500
+ const tabRef = (0, react.useRef)(null);
501
+ const ref = require_useMergedRefs.useMergedRefs([forwardRef, tabRef]);
502
+ const [ignoreHover, setIgnoreHover] = (0, react.useState)(false);
503
+ const id = `${baseId}-tab-${index}`;
504
+ const panelId = `${baseId}-tabpanel-${index}`;
505
+ const [isEllipsisApplied, setIsEllipsisApplied] = (0, react.useState)(false);
506
+ const isEllipsisActive = (element) => {
507
+ setIsEllipsisApplied(element.offsetHeight < element.scrollHeight);
508
+ return element.offsetHeight < element.scrollHeight;
509
+ };
510
+ const className = (0, classnames.default)(`${prefix}--tabs__nav-item`, `${prefix}--tabs__nav-link`, {
511
+ [`${prefix}--tabs__nav-item--selected`]: selectedIndex === index,
512
+ [`${prefix}--tabs__nav-item--disabled`]: disabled,
513
+ [`${prefix}--tabs__nav-item--hover-off`]: ignoreHover
514
+ }, customClassName);
515
+ const BaseComponent = as;
516
+ const onDismissIconMouseEnter = (evt) => {
517
+ if (contained && tabRef.current) {
518
+ evt.stopPropagation();
519
+ setIgnoreHover(true);
520
+ tabRef.current.classList.add(`${prefix}--tabs__nav-item--hover-off`);
521
+ }
522
+ };
523
+ const onDismissIconMouseLeave = () => {
524
+ if (contained && tabRef.current) {
525
+ tabRef.current.classList.remove(`${prefix}--tabs__nav-item--hover-off`);
526
+ setIgnoreHover(false);
527
+ }
528
+ };
529
+ require_useEvent.useEvent(dismissIconRef, "mouseover", onDismissIconMouseEnter);
530
+ require_useEvent.useEvent(dismissIconRef, "mouseleave", onDismissIconMouseLeave);
531
+ require_useIsomorphicEffect.default(() => {
532
+ function handler() {
533
+ const elementTabId = document.getElementById(`${id}`) || tabRef.current;
534
+ if (elementTabId?.closest(`.${prefix}--tabs--vertical`)) {
535
+ const newElement = elementTabId?.getElementsByClassName(`${prefix}--tabs__nav-item-label`)[0];
536
+ isEllipsisActive(newElement);
537
+ }
538
+ }
539
+ handler();
540
+ window.addEventListener("resize", handler);
541
+ return () => {
542
+ window.removeEventListener("resize", handler);
543
+ };
544
+ }, [prefix, id]);
545
+ const handleClose = (evt) => {
546
+ evt.stopPropagation();
547
+ onTabCloseRequest?.(index);
548
+ if (tabRef.current && tabRef.current.parentElement) {
549
+ const tabCount = Array.from(tabRef.current.parentElement.childNodes).filter((node) => {
550
+ if (!(node instanceof HTMLElement)) return false;
551
+ return node.classList.contains(`${prefix}--tabs__nav-link`) && !node.classList.contains(`${prefix}--tabs__nav-item--disabled`);
552
+ }).length;
553
+ if (tabRef.current && index + 1 !== tabCount) tabRef.current.focus();
554
+ else {
555
+ const prevTabIndex = (tabCount - 2) * 2;
556
+ const previousTab = tabRef.current.parentElement.childNodes[prevTabIndex];
557
+ if (previousTab instanceof HTMLElement) previousTab.focus();
558
+ }
559
+ }
560
+ };
561
+ const handleKeyDown = (event) => {
562
+ if (dismissable && require_match.match(event, require_keys.Delete)) handleClose(event);
563
+ onKeyDown?.(event);
564
+ };
565
+ const DismissIcon = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
566
+ className: (0, classnames.default)({
567
+ [`${prefix}--tabs__nav-item--close`]: dismissable,
568
+ [`${prefix}--tabs__nav-item--close--hidden`]: !dismissable
569
+ }),
570
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
571
+ type: "button",
572
+ tabIndex: -1,
573
+ "aria-disabled": disabled,
574
+ "aria-hidden": selectedIndex === index && dismissable ? "false" : "true",
575
+ disabled,
576
+ className: (0, classnames.default)({
577
+ [`${prefix}--tabs__nav-item--close-icon`]: dismissable,
578
+ [`${prefix}--visually-hidden`]: !dismissable,
579
+ [`${prefix}--tabs__nav-item--close-icon--selected`]: selectedIndex === index,
580
+ [`${prefix}--tabs__nav-item--close-icon--disabled`]: disabled
581
+ }),
582
+ onClick: handleClose,
583
+ title: `Remove ${typeof children === "string" ? children : ""} tab`,
584
+ ref: dismissIconRef,
585
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_carbon_icons_react.Close, {
586
+ "aria-hidden": selectedIndex === index && dismissable ? "false" : "true",
587
+ "aria-label": `Press delete to remove ${typeof children === "string" ? children : ""} tab`
588
+ })
589
+ })
590
+ });
591
+ const hasIcon = Icon ?? dismissable;
592
+ if (isEllipsisApplied) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Tooltip.Tooltip, {
593
+ label: children,
594
+ align: "top",
595
+ leaveDelayMs: 0,
596
+ autoAlign: true,
597
+ onMouseEnter: () => false,
598
+ closeOnActivation: true,
599
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(BaseComponent, {
600
+ ...rest,
601
+ "aria-controls": panelId,
602
+ "aria-disabled": disabled,
603
+ "aria-selected": selectedIndex === index,
604
+ ref,
605
+ id,
606
+ role: "tab",
607
+ className,
608
+ disabled,
609
+ title: children,
610
+ onClick: (evt) => {
611
+ if (disabled) return;
612
+ setSelectedIndex(index);
613
+ onClick?.(evt);
614
+ },
615
+ onKeyDown: handleKeyDown,
616
+ tabIndex: selectedIndex === index ? "0" : "-1",
617
+ type: "button",
618
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
619
+ className: `${prefix}--tabs__nav-item-label-wrapper`,
620
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Text.Text, {
621
+ className: `${prefix}--tabs__nav-item-label`,
622
+ children
623
+ })
624
+ }), hasSecondaryLabel && secondaryLabel && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Text.Text, {
625
+ as: "div",
626
+ className: `${prefix}--tabs__nav-item-secondary-label`,
627
+ title: secondaryLabel,
628
+ children: secondaryLabel
629
+ })]
630
+ })
631
+ });
632
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(BaseComponent, {
633
+ ...rest,
634
+ "aria-controls": panelId,
635
+ "aria-disabled": disabled,
636
+ "aria-selected": selectedIndex === index,
637
+ ref,
638
+ id,
639
+ role: "tab",
640
+ className,
641
+ disabled,
642
+ onClick: (evt) => {
643
+ if (disabled) return;
644
+ setSelectedIndex(index);
645
+ onClick?.(evt);
646
+ },
647
+ onKeyDown: handleKeyDown,
648
+ tabIndex: selectedIndex === index ? "0" : "-1",
649
+ type: "button",
650
+ children: [
651
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
652
+ className: `${prefix}--tabs__nav-item-label-wrapper`,
653
+ children: [
654
+ dismissable && Icon && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
655
+ className: `${prefix}--tabs__nav-item--icon-left`,
656
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Icon, { size: 16 })
657
+ }),
658
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Text.Text, {
659
+ className: `${prefix}--tabs__nav-item-label`,
660
+ children
661
+ }),
662
+ !dismissable && Icon && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
663
+ className: (0, classnames.default)(`${prefix}--tabs__nav-item--icon`, { [`${prefix}--visually-hidden`]: !hasIcon }),
664
+ children: !dismissable && Icon && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Icon, { size: 16 })
665
+ })
666
+ ]
667
+ }),
668
+ hasSecondaryLabel && secondaryLabel && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Text.Text, {
669
+ as: "div",
670
+ className: `${prefix}--tabs__nav-item-secondary-label`,
671
+ title: secondaryLabel,
672
+ children: secondaryLabel
673
+ }),
674
+ !disabled && badgeIndicator && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index.default, {})
675
+ ]
676
+ }), DismissIcon] });
982
677
  });
983
678
  Tab.propTypes = {
984
- /**
985
- * Provide a custom element to render instead of the default button
986
- */
987
- as: PropTypes.oneOfType([PropTypes.string, PropTypes.elementType]),
988
- /**
989
- * Provide child elements to be rendered inside `Tab`.
990
- */
991
- children: PropTypes.node,
992
- /**
993
- * Specify an optional className to be added to your Tab
994
- */
995
- className: PropTypes.string,
996
- /**
997
- * Whether your Tab is disabled.
998
- */
999
- disabled: PropTypes.bool,
1000
- /**
1001
- * Provide a handler that is invoked when a user clicks on the control
1002
- */
1003
- onClick: PropTypes.func,
1004
- /**
1005
- * Provide a handler that is invoked on the key down event for the control
1006
- */
1007
- onKeyDown: PropTypes.func,
1008
- /**
1009
- * An optional parameter to allow overriding the anchor rendering.
1010
- * Useful for using Tab along with react-router or other client
1011
- * side router libraries.
1012
- */
1013
- renderButton: PropTypes.func,
1014
- /**
1015
- * A component used to render an icon.
1016
- */
1017
- renderIcon: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
1018
- /**
1019
- * An optional label to render under the primary tab label.
1020
- * Only useful for contained tabs.
1021
- */
1022
- secondaryLabel: PropTypes.string
679
+ as: prop_types.default.oneOfType([prop_types.default.string, prop_types.default.elementType]),
680
+ children: prop_types.default.node,
681
+ className: prop_types.default.string,
682
+ disabled: prop_types.default.bool,
683
+ onClick: prop_types.default.func,
684
+ onKeyDown: prop_types.default.func,
685
+ renderButton: prop_types.default.func,
686
+ renderIcon: prop_types.default.oneOfType([prop_types.default.func, prop_types.default.object]),
687
+ secondaryLabel: prop_types.default.string
1023
688
  };
1024
-
1025
689
  /**
1026
- * IconTab
1027
- */
1028
-
1029
- const IconTabContext = /*#__PURE__*/React.createContext(false);
1030
- // eslint-disable-next-line react/display-name -- https://github.com/carbon-design-system/carbon/issues/20452
1031
- const IconTab = /*#__PURE__*/React.forwardRef(({
1032
- badgeIndicator,
1033
- children,
1034
- className: customClassName,
1035
- defaultOpen = false,
1036
- enterDelayMs,
1037
- leaveDelayMs,
1038
- label,
1039
- ...rest
1040
- }, ref) => {
1041
- const prefix = usePrefix.usePrefix();
1042
- const value = React.useMemo(() => ({
1043
- badgeIndicator
1044
- }), [badgeIndicator]);
1045
- const hasSize20 = /*#__PURE__*/React.isValidElement(children) && (children.props.size === 20 || children.props.size === '20');
1046
- const classNames = cx(`${prefix}--tabs__nav-item--icon-only`, customClassName, {
1047
- [`${prefix}--tabs__nav-item--icon-only__20`]: hasSize20
1048
- });
1049
- return /*#__PURE__*/React.createElement(IconTabContext.Provider, {
1050
- value: value
1051
- }, /*#__PURE__*/React.createElement(Tooltip.Tooltip, {
1052
- align: "bottom",
1053
- defaultOpen: defaultOpen,
1054
- className: `${prefix}--icon-tooltip`,
1055
- enterDelayMs: enterDelayMs,
1056
- label: label,
1057
- leaveDelayMs: leaveDelayMs
1058
- }, /*#__PURE__*/React.createElement(Tab, _rollupPluginBabelHelpers.extends({
1059
- className: classNames,
1060
- ref: ref
1061
- }, rest), children)));
690
+ * IconTab
691
+ */
692
+ const IconTabContext = (0, react.createContext)(false);
693
+ const IconTab = react.default.forwardRef(({ badgeIndicator, children, className: customClassName, defaultOpen = false, enterDelayMs, leaveDelayMs, label, ...rest }, ref) => {
694
+ const prefix = require_usePrefix.usePrefix();
695
+ const value = (0, react.useMemo)(() => ({ badgeIndicator }), [badgeIndicator]);
696
+ const hasSize20 = (0, react.isValidElement)(children) && (children.props.size === 20 || children.props.size === "20");
697
+ const classNames = (0, classnames.default)(`${prefix}--tabs__nav-item--icon-only`, customClassName, { [`${prefix}--tabs__nav-item--icon-only__20`]: hasSize20 });
698
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconTabContext.Provider, {
699
+ value,
700
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Tooltip.Tooltip, {
701
+ align: "bottom",
702
+ defaultOpen,
703
+ className: `${prefix}--icon-tooltip`,
704
+ enterDelayMs,
705
+ label,
706
+ leaveDelayMs,
707
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Tab, {
708
+ className: classNames,
709
+ ref,
710
+ ...rest,
711
+ children
712
+ })
713
+ })
714
+ });
1062
715
  });
1063
716
  IconTab.propTypes = {
1064
- /**
1065
- * **Experimental**: Display an empty dot badge on the Tab.
1066
- */
1067
- badgeIndicator: PropTypes.bool,
1068
- /**
1069
- * Provide an icon to be rendered inside `IconTab` as the visual label for Tab.
1070
- */
1071
- children: PropTypes.node,
1072
- /**
1073
- * Specify an optional className to be added to your Tab
1074
- */
1075
- className: PropTypes.string,
1076
- /**
1077
- * Specify whether the tooltip for the icon should be open when it first renders
1078
- */
1079
- defaultOpen: PropTypes.bool,
1080
- /**
1081
- * Specify the duration in milliseconds to delay before displaying the tooltip for the icon.
1082
- */
1083
- enterDelayMs: PropTypes.number,
1084
- /**
1085
- * Provide the label to be rendered inside the Tooltip. The label will use
1086
- * `aria-labelledby` and will fully describe the child node that is provided.
1087
- * This means that if you have text in the child node it will not be
1088
- * announced to the screen reader. If using the badgeIndicator then provide a
1089
- * label with describing that there is a new notification.
1090
- */
1091
- label: PropTypes.node.isRequired,
1092
- /**
1093
- * Specify the duration in milliseconds to delay before hiding the tooltip
1094
- */
1095
- leaveDelayMs: PropTypes.number
717
+ badgeIndicator: prop_types.default.bool,
718
+ children: prop_types.default.node,
719
+ className: prop_types.default.string,
720
+ defaultOpen: prop_types.default.bool,
721
+ enterDelayMs: prop_types.default.number,
722
+ label: prop_types.default.node.isRequired,
723
+ leaveDelayMs: prop_types.default.number
1096
724
  };
1097
-
1098
- /**
1099
- * TabPanel
1100
- */
1101
-
1102
- // eslint-disable-next-line react/display-name -- https://github.com/carbon-design-system/carbon/issues/20452
1103
- const TabPanel = /*#__PURE__*/React.forwardRef(({
1104
- children,
1105
- className: customClassName,
1106
- ...rest
1107
- }, forwardRef) => {
1108
- const prefix = usePrefix.usePrefix();
1109
- const {
1110
- selectedIndex,
1111
- baseId
1112
- } = React.useContext(TabsContext);
1113
- const index = React.useContext(TabPanelContext);
1114
- const id = `${baseId}-tabpanel-${index}`;
1115
- const tabId = `${baseId}-tab-${index}`;
1116
- const className = cx(`${prefix}--tab-content`, customClassName);
1117
- return /*#__PURE__*/React.createElement("div", _rollupPluginBabelHelpers.extends({}, rest, {
1118
- "aria-labelledby": tabId,
1119
- id: id,
1120
- className: className,
1121
- ref: forwardRef,
1122
- role: "tabpanel",
1123
- hidden: selectedIndex !== index
1124
- }), children);
725
+ const TabPanel = react.default.forwardRef(({ children, className: customClassName, ...rest }, forwardRef) => {
726
+ const prefix = require_usePrefix.usePrefix();
727
+ const { selectedIndex, baseId } = react.default.useContext(TabsContext);
728
+ const index = react.default.useContext(TabPanelContext);
729
+ const id = `${baseId}-tabpanel-${index}`;
730
+ const tabId = `${baseId}-tab-${index}`;
731
+ const className = (0, classnames.default)(`${prefix}--tab-content`, customClassName);
732
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
733
+ ...rest,
734
+ "aria-labelledby": tabId,
735
+ id,
736
+ className,
737
+ ref: forwardRef,
738
+ role: "tabpanel",
739
+ hidden: selectedIndex !== index,
740
+ children
741
+ });
1125
742
  });
1126
743
  TabPanel.propTypes = {
1127
- /**
1128
- * Provide child elements to be rendered inside `TabPanel`.
1129
- */
1130
- children: PropTypes.node,
1131
- /**
1132
- * Specify an optional className to be added to TabPanel.
1133
- */
1134
- className: PropTypes.string
744
+ children: prop_types.default.node,
745
+ className: prop_types.default.string
1135
746
  };
1136
-
1137
- /**
1138
- * TabPanels
1139
- */
1140
-
1141
- function TabPanels({
1142
- children
1143
- }) {
1144
- const prefix = usePrefix.usePrefix();
1145
- const refs = React.useRef([]);
1146
- const hiddenStates = React.useRef([]);
1147
- useIsomorphicEffect.default(() => {
1148
- const tabContainer = refs.current[0]?.previousElementSibling;
1149
- const isVertical = tabContainer?.classList.contains(`${prefix}--tabs--vertical`);
1150
- const parentHasHeight = tabContainer?.parentElement?.style.height;
1151
-
1152
- // Should only apply same height to vertical Tab Panels without a given height
1153
- if (isVertical && !parentHasHeight) {
1154
- hiddenStates.current = refs.current.map(ref => ref?.hidden || false);
1155
-
1156
- // un-hide hidden Tab Panels to get heights
1157
- refs.current.forEach(ref => {
1158
- if (ref) {
1159
- ref.hidden = false;
1160
- }
1161
- });
1162
-
1163
- // set max height to TabList
1164
- const heights = refs.current.map(ref => ref?.offsetHeight || 0);
1165
- const max = Math.max(...heights);
1166
- if (tabContainer instanceof HTMLElement) {
1167
- tabContainer.style.height = max + 'px';
1168
- }
1169
-
1170
- // re-hide hidden Tab Panels
1171
- refs.current.forEach((ref, index) => {
1172
- if (ref) {
1173
- ref.hidden = hiddenStates.current[index];
1174
- }
1175
- });
1176
- }
1177
- });
1178
- return /*#__PURE__*/React.createElement(React.Fragment, null, React.Children.map(children, (child, index) => {
1179
- return ! /*#__PURE__*/React.isValidElement(child) ? null : /*#__PURE__*/React.createElement(TabPanelContext.Provider, {
1180
- value: index
1181
- }, /*#__PURE__*/React.cloneElement(child, {
1182
- ref: element => {
1183
- refs.current[index] = element;
1184
- }
1185
- }));
1186
- }));
747
+ function TabPanels({ children }) {
748
+ const prefix = require_usePrefix.usePrefix();
749
+ const refs = (0, react.useRef)([]);
750
+ const hiddenStates = (0, react.useRef)([]);
751
+ require_useIsomorphicEffect.default(() => {
752
+ const tabContainer = refs.current[0]?.previousElementSibling;
753
+ const isVertical = tabContainer?.classList.contains(`${prefix}--tabs--vertical`);
754
+ const parentHasHeight = tabContainer?.parentElement?.style.height;
755
+ if (isVertical && !parentHasHeight) {
756
+ hiddenStates.current = refs.current.map((ref) => ref?.hidden || false);
757
+ refs.current.forEach((ref) => {
758
+ if (ref) ref.hidden = false;
759
+ });
760
+ const heights = refs.current.map((ref) => ref?.offsetHeight || 0);
761
+ const max = Math.max(...heights);
762
+ if (tabContainer instanceof HTMLElement) tabContainer.style.height = max + "px";
763
+ refs.current.forEach((ref, index) => {
764
+ if (ref) ref.hidden = hiddenStates.current[index];
765
+ });
766
+ }
767
+ });
768
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: react.Children.map(children, (child, index) => {
769
+ return !(0, react.isValidElement)(child) ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TabPanelContext.Provider, {
770
+ value: index,
771
+ children: (0, react.cloneElement)(child, { ref: (element) => {
772
+ refs.current[index] = element;
773
+ } })
774
+ });
775
+ }) });
1187
776
  }
1188
- TabPanels.propTypes = {
1189
- /**
1190
- * Provide child elements to be rendered inside `TabPanels`.
1191
- */
1192
- children: PropTypes.node
1193
- };
777
+ TabPanels.propTypes = { children: prop_types.default.node };
1194
778
 
779
+ //#endregion
1195
780
  exports.IconTab = IconTab;
1196
781
  exports.Tab = Tab;
1197
782
  exports.TabList = TabList;
@@ -1199,4 +784,4 @@ exports.TabListVertical = TabListVertical;
1199
784
  exports.TabPanel = TabPanel;
1200
785
  exports.TabPanels = TabPanels;
1201
786
  exports.Tabs = Tabs;
1202
- exports.TabsVertical = TabsVertical;
787
+ exports.TabsVertical = TabsVertical;