@carbon/react 1.103.0 → 1.104.0-rc.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 +956 -956
  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 +567 -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 +571 -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,1336 +1,885 @@
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
- Object.defineProperty(exports, '__esModule', { value: true });
11
-
12
- var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelpers.js');
13
- var React = require('react');
14
- var PropTypes = require('prop-types');
15
- var cx = require('classnames');
16
- var keys = require('../../internal/keyboard/keys.js');
17
- var match = require('../../internal/keyboard/match.js');
18
- var usePrefix = require('../../internal/usePrefix.js');
19
- var deprecate = require('../../prop-types/deprecate.js');
20
- var iconsReact = require('@carbon/icons-react');
21
- var Text = require('../Text/Text.js');
22
- require('../Text/TextDirection.js');
23
- require('../Tooltip/DefinitionTooltip.js');
24
- var Tooltip = require('../Tooltip/Tooltip.js');
25
- var SliderHandles = require('./SliderHandles.js');
26
- var clamp = require('../../internal/clamp.js');
27
- var useNormalizedInputProps = require('../../internal/useNormalizedInputProps.js');
28
- var useId = require('../../internal/useId.js');
29
- var throttle = require('../../node_modules/es-toolkit/dist/compat/function/throttle.js');
30
-
31
- const ThumbWrapper = ({
32
- hasTooltip,
33
- className,
34
- style,
35
- children,
36
- ...rest
37
- }) => {
38
- if (hasTooltip) {
39
- return /*#__PURE__*/React.createElement(Tooltip.Tooltip, _rollupPluginBabelHelpers.extends({
40
- className: className,
41
- style: style
42
- }, rest), children);
43
- } else {
44
- return /*#__PURE__*/React.createElement("div", {
45
- className: className,
46
- style: style
47
- }, children);
48
- }
49
- };
50
- const translationIds = {
51
- 'carbon.slider.auto-correct-announcement': 'carbon.slider.auto-correct-announcement'
52
- };
53
- const defaultTranslations = {
54
- [translationIds['carbon.slider.auto-correct-announcement']]: 'The inputted value "{correctedValue}" was corrected to the nearest allowed digit.'
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_useId = require('../../internal/useId.js');
14
+ const require_deprecate = require('../../prop-types/deprecate.js');
15
+ const require_Tooltip = require('../Tooltip/Tooltip.js');
16
+ const require_useNormalizedInputProps = require('../../internal/useNormalizedInputProps.js');
17
+ const require_clamp = require('../../internal/clamp.js');
18
+ const require_SliderHandles = require('./SliderHandles.js');
19
+ let classnames = require("classnames");
20
+ classnames = require_runtime.__toESM(classnames);
21
+ let react = require("react");
22
+ react = require_runtime.__toESM(react);
23
+ let prop_types = require("prop-types");
24
+ prop_types = require_runtime.__toESM(prop_types);
25
+ let react_jsx_runtime = require("react/jsx-runtime");
26
+ let _carbon_icons_react = require("@carbon/icons-react");
27
+ let es_toolkit_compat = require("es-toolkit/compat");
28
+
29
+ //#region src/components/Slider/Slider.tsx
30
+ /**
31
+ * Copyright IBM Corp. 2016, 2026
32
+ *
33
+ * This source code is licensed under the Apache-2.0 license found in the
34
+ * LICENSE file in the root directory of this source tree.
35
+ */
36
+ const ThumbWrapper = ({ hasTooltip, className, style, children, ...rest }) => {
37
+ if (hasTooltip) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Tooltip.Tooltip, {
38
+ className,
39
+ style,
40
+ ...rest,
41
+ children
42
+ });
43
+ else return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
44
+ className,
45
+ style,
46
+ children
47
+ });
55
48
  };
49
+ const translationIds = { "carbon.slider.auto-correct-announcement": "carbon.slider.auto-correct-announcement" };
50
+ const defaultTranslations = { [translationIds["carbon.slider.auto-correct-announcement"]]: "The inputted value \"{correctedValue}\" was corrected to the nearest allowed digit." };
56
51
  const defaultTranslateWithId = (messageId, args) => {
57
- const template = defaultTranslations[messageId];
58
- if (args?.correctedValue) {
59
- return template.replace('{correctedValue}', args.correctedValue);
60
- }
61
- return template;
52
+ const template = defaultTranslations[messageId];
53
+ if (args?.correctedValue) return template.replace("{correctedValue}", args.correctedValue);
54
+ return template;
62
55
  };
63
56
  const defaultFormatLabel = (value, label) => {
64
- return `${value}${label ?? ''}`;
57
+ return `${value}${label ?? ""}`;
65
58
  };
66
- const hasUpperValue = valueUpper => typeof valueUpper !== 'undefined';
67
-
68
- // TODO: Assuming a 16ms throttle corresponds to 60 FPS, should it be halved,
69
- // since many systems can handle 120 FPS? If it doesn't correspond to 60 FPS,
70
- // what does it correspond to?
59
+ const hasUpperValue = (valueUpper) => typeof valueUpper !== "undefined";
71
60
  /**
72
- * Minimum time between processed "drag" events in milliseconds.
73
- */
61
+ * Minimum time between processed "drag" events in milliseconds.
62
+ */
74
63
  const EVENT_THROTTLE = 16;
75
- const DRAG_EVENT_TYPES = new Set(['mousemove', 'touchmove']);
76
- const DRAG_STOP_EVENT_TYPES = new Set(['mouseup', 'touchend', 'touchcancel']);
77
- var HandlePosition = /*#__PURE__*/function (HandlePosition) {
78
- HandlePosition["LOWER"] = "lower";
79
- HandlePosition["UPPER"] = "upper";
80
- return HandlePosition;
81
- }(HandlePosition || {}); // TODO: Delete this type and directory type the properties in the function.
82
- const Slider = props => {
83
- // TODO: Move destructured `props` from the IIFE to here.
84
-
85
- const initialState = {
86
- value: props.value,
87
- valueUpper: props.unstable_valueUpper,
88
- left: 0,
89
- leftUpper: 0,
90
- needsOnRelease: false,
91
- isValid: true,
92
- isValidUpper: true,
93
- activeHandle: undefined,
94
- correctedValue: null,
95
- correctedPosition: null,
96
- isRtl: false
97
- };
98
-
99
- // TODO: Investigate using generics on the hook.
100
- const [state, setState] = React.useReducer((prev, args) => ({
101
- ...prev,
102
- ...args
103
- }), initialState);
104
-
105
- // TODO: Investigate getting rid of these references.
106
- const stateRef = React.useRef(state);
107
- React.useEffect(() => {
108
- stateRef.current = state;
109
- }, [state]);
110
- const propsRef = React.useRef(props);
111
- React.useEffect(() => {
112
- propsRef.current = props;
113
- }, [props]);
114
- const thumbRef = React.useRef(null);
115
- const thumbRefUpper = React.useRef(null);
116
- const filledTrackRef = React.useRef(null);
117
- const elementRef = React.useRef(null);
118
- const trackRef = React.useRef(null);
119
- const generatedId = useId.useId();
120
- const prefix = usePrefix.usePrefix();
121
- const twoHandles = hasUpperValue(state.valueUpper);
122
-
123
- /**
124
- * Sets up initial slider position and value in response to component mount.
125
- */
126
- React.useEffect(() => {
127
- if (elementRef.current) {
128
- const isRtl = document?.dir === 'rtl';
129
- if (twoHandles) {
130
- const {
131
- value,
132
- left
133
- } = calcValue({
134
- value: stateRef.current.value,
135
- useRawValue: true
136
- });
137
- const {
138
- value: valueUpper,
139
- left: leftUpper
140
- } = calcValue({
141
- value: stateRef.current.valueUpper,
142
- useRawValue: true
143
- });
144
- setState({
145
- isRtl,
146
- value,
147
- left,
148
- valueUpper,
149
- leftUpper
150
- });
151
- } else {
152
- const {
153
- value,
154
- left
155
- } = calcValue({
156
- value: stateRef.current.value,
157
- useRawValue: true
158
- });
159
- setState({
160
- isRtl,
161
- value,
162
- left
163
- });
164
- }
165
- }
166
- return () => {
167
- DRAG_STOP_EVENT_TYPES.forEach(element => elementRef.current?.ownerDocument.removeEventListener(element, onDragStop));
168
- DRAG_EVENT_TYPES.forEach(element => elementRef.current?.ownerDocument.removeEventListener(element, handleDrag));
169
- };
170
- // eslint-disable-next-line react-hooks/exhaustive-deps
171
- }, []);
172
- React.useEffect(() => {
173
- // TODO: Uncomment this code and delete all of the `filledTrackRef.current`
174
- // checks.
175
- // const el = filledTrackRef.current;
176
- //
177
- // if (!el) return;
178
-
179
- // Fire onChange event handler if present, if there's a usable value, and
180
- // if the value is different from the last one
181
- if (twoHandles) {
182
- if (filledTrackRef.current) {
183
- filledTrackRef.current.style.transform = state.isRtl ? `translate(${100 - state.leftUpper}%, -50%) scaleX(${(state.leftUpper - state.left) / 100})` : `translate(${state.left}%, -50%) scaleX(${(state.leftUpper - state.left) / 100})`;
184
- }
185
- } else {
186
- if (filledTrackRef.current) {
187
- filledTrackRef.current.style.transform = state.isRtl ? `translate(100%, -50%) scaleX(-${state.left / 100})` : `translate(0%, -50%) scaleX(${state.left / 100})`;
188
- }
189
- }
190
- // TODO: Investigate whether the missing dependency should be added.
191
- //
192
- // eslint-disable-next-line react-hooks/exhaustive-deps
193
- }, [state.left, state.leftUpper, state.isRtl]);
194
-
195
- // Fire onChange when value(s) change
196
- const prevValsRef = React.useRef(null);
197
- React.useEffect(() => {
198
- const prev = prevValsRef.current;
199
- if (prev && (prev.value !== state.value || prev.valueUpper !== state.valueUpper) && typeof props.onChange === 'function') {
200
- props.onChange({
201
- value: state.value,
202
- valueUpper: state.valueUpper
203
- });
204
- }
205
- prevValsRef.current = {
206
- value: state.value,
207
- valueUpper: state.valueUpper
208
- };
209
- // TODO: Investigate whether the missing dependency should be added.
210
- //
211
- // eslint-disable-next-line react-hooks/exhaustive-deps
212
- }, [state.value, state.valueUpper, props.onChange]);
213
- React.useEffect(() => {
214
- // Fire onRelease event handler if present and if needed
215
- if (state.needsOnRelease && typeof props.onRelease === 'function') {
216
- props.onRelease({
217
- value: state.value,
218
- valueUpper: state.valueUpper
219
- });
220
- // Reset the flag
221
- setState({
222
- needsOnRelease: false
223
- });
224
- }
225
- // TODO: Investigate whether the missing dependency should be added.
226
- //
227
- // eslint-disable-next-line react-hooks/exhaustive-deps
228
- }, [state.needsOnRelease, state.value, state.valueUpper, props.onRelease]);
229
- const prevSyncKeysRef = React.useRef(null);
230
- React.useEffect(() => {
231
- const prev = prevSyncKeysRef.current;
232
- const next = [props.value, props.unstable_valueUpper, props.max, props.min];
233
-
234
- // If value from props does not change, do nothing here.
235
- // Otherwise, do prop -> state sync without "value capping".
236
- if (!prev || prev[0] !== next[0] || prev[1] !== next[1] || prev[2] !== next[2] || prev[3] !== next[3]) {
237
- setState(calcValue({
238
- value: props.value,
239
- useRawValue: true
240
- }));
241
- if (typeof props.unstable_valueUpper !== 'undefined') {
242
- const {
243
- value: valueUpper,
244
- left: leftUpper
245
- } = calcValue({
246
- value: props.unstable_valueUpper,
247
- useRawValue: true
248
- });
249
- setState({
250
- valueUpper,
251
- leftUpper
252
- });
253
- } else {
254
- setState({
255
- valueUpper: undefined,
256
- leftUpper: undefined
257
- });
258
- }
259
- prevSyncKeysRef.current = next;
260
- }
261
- // TODO: Investigate whether the missing dependency should be added.
262
- //
263
- // eslint-disable-next-line react-hooks/exhaustive-deps
264
- }, [props.value, props.unstable_valueUpper, props.max, props.min]);
265
-
266
- /**
267
- * Rounds a given value to the nearest step defined by the slider's `step`
268
- * prop.
269
- *
270
- * @param value - The value to adjust to the nearest step. Defaults to `0`.
271
- * @returns The value rounded to the precision determined by the step.
272
- */
273
- const nearestStepValue = (value = 0) => {
274
- const decimals = (props.step?.toString().split('.')[1] ?? '').length;
275
- return Number(value.toFixed(decimals));
276
- };
277
- const handleDrag = event => {
278
- if (event instanceof globalThis.MouseEvent || event instanceof globalThis.TouchEvent) {
279
- onDrag(event);
280
- }
281
- };
282
-
283
- /**
284
- * Sets up "drag" event handlers and calls `onDrag` in case dragging
285
- * started on somewhere other than the thumb without a corresponding "move"
286
- * event.
287
- */
288
- const onDragStart = evt => {
289
- // Do nothing if component is disabled
290
- if (props.disabled || props.readOnly) {
291
- return;
292
- }
293
-
294
- // We're going to force focus on one of the handles later on here, b/c we're
295
- // firing on a mousedown event, we need to call event.preventDefault() to
296
- // keep the focus from leaving the HTMLElement.
297
- // @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus#notes
298
- evt.preventDefault();
299
-
300
- // TODO: Abstract `elementRef.current?.ownerDocument` to a variable that can
301
- // be used here and everywhere else in this file.
302
-
303
- // Add drag stop handlers
304
- DRAG_STOP_EVENT_TYPES.forEach(element => {
305
- elementRef.current?.ownerDocument.addEventListener(element, onDragStop);
306
- });
307
-
308
- // Add drag handlers
309
- DRAG_EVENT_TYPES.forEach(element => {
310
- elementRef.current?.ownerDocument.addEventListener(element, handleDrag);
311
- });
312
- const clientX = getClientXFromEvent(evt.nativeEvent);
313
- let activeHandle;
314
- if (twoHandles) {
315
- if (evt.target == thumbRef.current) {
316
- activeHandle = HandlePosition.LOWER;
317
- } else if (evt.target == thumbRefUpper.current) {
318
- activeHandle = HandlePosition.UPPER;
319
- } else if (clientX) {
320
- const distanceToLower = calcDistanceToHandle(HandlePosition.LOWER, clientX);
321
- const distanceToUpper = calcDistanceToHandle(HandlePosition.UPPER, clientX);
322
- if (distanceToLower <= distanceToUpper) {
323
- activeHandle = HandlePosition.LOWER;
324
- } else {
325
- activeHandle = HandlePosition.UPPER;
326
- }
327
- }
328
- }
329
-
330
- // Force focus to the appropriate handle.
331
- const focusOptions = {
332
- preventScroll: true
333
- };
334
- if (twoHandles) {
335
- if (thumbRef.current && activeHandle === HandlePosition.LOWER) {
336
- thumbRef.current.focus(focusOptions);
337
- } else if (thumbRefUpper.current && activeHandle === HandlePosition.UPPER) {
338
- thumbRefUpper.current.focus(focusOptions);
339
- }
340
- } else if (thumbRef.current) {
341
- thumbRef.current.focus(focusOptions);
342
- }
343
- setState({
344
- activeHandle
345
- });
346
-
347
- // Perform first recalculation since we probably didn't click exactly in the
348
- // middle of the thumb.
349
- onDrag(evt.nativeEvent, activeHandle);
350
- };
351
-
352
- /**
353
- * Removes "drag" and "drag stop" event handlers and calls sets the flag
354
- * indicating that the `onRelease` callback should be called.
355
- */
356
- const onDragStop = () => {
357
- // Do nothing if component is disabled
358
- if (props.disabled || props.readOnly) {
359
- return;
360
- }
361
-
362
- // TODO: Rename parameters in `DRAG_*` loops to `type`.
363
- // Remove drag stop handlers
364
- DRAG_STOP_EVENT_TYPES.forEach(element => {
365
- elementRef.current?.ownerDocument.removeEventListener(element, onDragStop);
366
- });
367
-
368
- // Remove drag handlers
369
- DRAG_EVENT_TYPES.forEach(element => {
370
- elementRef.current?.ownerDocument.removeEventListener(element, handleDrag);
371
- });
372
-
373
- // Set needsOnRelease flag so event fires on next update.
374
- setState({
375
- needsOnRelease: true,
376
- isValid: true,
377
- isValidUpper: true
378
- });
379
- };
380
-
381
- // TODO: Rename this reference.
382
- /**
383
- * Handles a "drag" event by recalculating the value/thumb and setting state
384
- * accordingly.
385
- *
386
- * @param evt The event.
387
- * @param activeHandle The first drag event call, we may have an explicit
388
- * activeHandle value, which is to be used before state is used.
389
- */
390
- const _onDragRef = React.useRef(null);
391
- _onDragRef.current = (evt, activeHandle) => {
392
- activeHandle = activeHandle ?? stateRef.current.activeHandle;
393
- // Do nothing if component is disabled, or we have no event.
394
- if (propsRef.current.disabled || propsRef.current.readOnly || !evt) {
395
- return;
396
- }
397
- const clientX = getClientXFromEvent(evt);
398
- const {
399
- value,
400
- left
401
- } = calcValue({
402
- clientX,
403
- value: stateRef.current.value
404
- });
405
- // If we're set to two handles, negotiate which drag handle is closest to
406
- // the users' interaction.
407
- if (twoHandles && activeHandle) {
408
- setValueLeftForHandle(activeHandle, {
409
- value: nearestStepValue(value),
410
- left
411
- });
412
- } else {
413
- setState({
414
- value: nearestStepValue(value),
415
- left,
416
- isValid: true
417
- });
418
- }
419
- // TODO: Investigate if it would be better to not call `setState`
420
- // back-to-back here and in other places.
421
- setState({
422
- correctedValue: null,
423
- correctedPosition: null
424
- });
425
- };
426
-
427
- /**
428
- * Throttles calls to `_onDrag` by limiting events to being processed at
429
- * most once every `EVENT_THROTTLE` milliseconds.
430
- */
431
- const onDrag = React.useMemo(() => throttle.throttle((evt, activeHandle) => {
432
- _onDragRef.current?.(evt, activeHandle);
433
- }, EVENT_THROTTLE, {
434
- leading: true,
435
- trailing: false
436
- }), []);
437
-
438
- /**
439
- * Handles a `keydown` event by recalculating the value/thumb and setting
440
- * state accordingly.
441
- */
442
- const onKeyDown = evt => {
443
- // Do nothing if component is disabled, or we don't have a valid event
444
- if (props.disabled || props.readOnly) {
445
- return;
446
- }
447
- const {
448
- step = 1,
449
- stepMultiplier = 4
450
- } = props;
451
- let delta = 0;
452
- if (match.matches(evt, [keys.ArrowDown, keys.ArrowLeft])) {
453
- delta = -step;
454
- } else if (match.matches(evt, [keys.ArrowUp, keys.ArrowRight])) {
455
- delta = step;
456
- } else {
457
- // Ignore keys we don't want to handle
458
- return;
459
- }
460
-
461
- // If shift was held, account for the stepMultiplier
462
- if (evt.shiftKey) {
463
- delta *= stepMultiplier;
464
- }
465
- if (twoHandles && state.activeHandle) {
466
- const currentValue = state.activeHandle === HandlePosition.LOWER ? state.value : state.valueUpper;
467
- const {
468
- value,
469
- left
470
- } = calcValue({
471
- value: calcValueForDelta(currentValue ?? props.min, delta, props.step)
472
- });
473
- setValueLeftForHandle(state.activeHandle, {
474
- value: nearestStepValue(value),
475
- left
476
- });
477
- } else {
478
- const {
479
- value,
480
- left
481
- } = calcValue({
482
- // Ensures custom value from `<input>` won't cause skipping next stepping
483
- // point with right arrow key, e.g. Typing 51 in `<input>`, moving focus
484
- // onto the thumb and the hitting right arrow key should yield 52 instead
485
- // of 54.
486
- value: calcValueForDelta(state.value, delta, props.step)
487
- });
488
- setState({
489
- value: nearestStepValue(value),
490
- left,
491
- isValid: true
492
- });
493
- }
494
- setState({
495
- correctedValue: null,
496
- correctedPosition: null
497
- });
498
- };
499
-
500
- /**
501
- * Provides the two-way binding for the input field of the Slider. It also
502
- * Handles a change to the input field by recalculating the value/thumb and
503
- * setting state accordingly.
504
- */
505
- const onChangeInput = evt => {
506
- // Do nothing if component is disabled
507
- if (props.disabled || props.readOnly) {
508
- return;
509
- }
510
-
511
- // Do nothing if we have no valid event, target, or value
512
- if (!evt || !('target' in evt) || typeof evt.target.value !== 'string') {
513
- return;
514
- }
515
-
516
- // Avoid calling calcValue for invalid numbers, but still update the state.
517
- const activeHandle = evt.target.dataset.handlePosition ?? HandlePosition.LOWER;
518
- const targetValue = Number.parseFloat(evt.target.value);
519
- if (twoHandles) {
520
- if (isNaN(targetValue)) {
521
- setValueForHandle(activeHandle, evt.target.value);
522
- } else if (isValidValueForPosition({
523
- handle: activeHandle,
524
- value: targetValue,
525
- min: props.min,
526
- max: props.max
527
- })) {
528
- processNewInputValue(evt.target);
529
- } else {
530
- setValueForHandle(activeHandle, targetValue);
531
- }
532
- } else {
533
- if (isNaN(targetValue)) {
534
- // TODO: Address this error
535
- //
536
- // @ts-expect-error - Passing a string to something that expects a
537
- // number.
538
- setState({
539
- value: evt.target.value
540
- });
541
- } else if (isValidValue({
542
- value: targetValue,
543
- min: props.min,
544
- max: props.max
545
- })) {
546
- processNewInputValue(evt.target);
547
- } else {
548
- setState({
549
- value: targetValue
550
- });
551
- }
552
- }
553
- };
554
-
555
- /**
556
- * Checks for validity of input value after clicking out of the input. It also
557
- * Handles state change to isValid state.
558
- */
559
- const onBlurInput = evt => {
560
- // Do nothing if we have no valid event, target, or value
561
- if (!evt || !('target' in evt) || typeof evt.target.value !== 'string') {
562
- return;
563
- }
564
- const {
565
- value: targetValue
566
- } = evt.target;
567
- processNewInputValue(evt.target);
568
- props.onBlur?.({
569
- value: targetValue,
570
- handlePosition: evt.target.dataset.handlePosition
571
- });
572
- };
573
- const onInputKeyDown = evt => {
574
- // Do nothing if component is disabled, or we don't have a valid event.
575
- if (props.disabled || props.readOnly || !(evt.target instanceof HTMLInputElement)) {
576
- return;
577
- }
578
-
579
- // Do nothing if we have no valid event, target, or value.
580
- if (!evt || !('target' in evt) || typeof evt.target.value !== 'string') {
581
- return;
582
- }
583
- if (match.matches(evt, [keys.Enter])) {
584
- processNewInputValue(evt.target);
585
- }
586
- };
587
- const processNewInputValue = input => {
588
- setState({
589
- correctedValue: null,
590
- correctedPosition: null
591
- });
592
- const targetValue = Number.parseFloat(input.value);
593
- const validity = !isNaN(targetValue);
594
-
595
- // When there are two handles, we'll also have the data-handle-position
596
- // attribute to consider the other value before settling on the validity to
597
- // set.
598
- const handlePosition = input.dataset.handlePosition;
599
- if (handlePosition === HandlePosition.LOWER) {
600
- setState({
601
- isValid: validity
602
- });
603
- } else if (handlePosition === HandlePosition.UPPER) {
604
- setState({
605
- isValidUpper: validity
606
- });
607
- }
608
- setState({
609
- isValid: validity
610
- });
611
- if (validity) {
612
- const adjustedValue = handlePosition ? getAdjustedValueForPosition({
613
- handle: handlePosition,
614
- value: targetValue,
615
- min: props.min,
616
- max: props.max
617
- }) : getAdjustedValue({
618
- value: targetValue,
619
- min: props.min,
620
- max: props.max
621
- });
622
- if (adjustedValue !== targetValue) {
623
- setState({
624
- correctedValue: targetValue.toString(),
625
- correctedPosition: handlePosition ?? null
626
- });
627
- } else {
628
- setState({
629
- correctedValue: null,
630
- correctedPosition: null
631
- });
632
- }
633
- const {
634
- value,
635
- left
636
- } = calcValue({
637
- value: adjustedValue,
638
- useRawValue: true
639
- });
640
- if (handlePosition) {
641
- setValueLeftForHandle(handlePosition, {
642
- value: nearestStepValue(value),
643
- left
644
- });
645
- } else {
646
- setState({
647
- value,
648
- left
649
- });
650
- }
651
- }
652
- };
653
- const calcLeftPercent = ({
654
- clientX,
655
- value,
656
- range
657
- }) => {
658
- // TODO: Delete the optional chaining operator after `getBoundingClientRect`.
659
- const boundingRect = elementRef.current?.getBoundingClientRect?.();
660
- let width = boundingRect ? boundingRect.right - boundingRect.left : 0;
661
-
662
- // Enforce a minimum width of at least 1 for calculations
663
- if (width <= 0) {
664
- width = 1;
665
- }
666
-
667
- // If a clientX is specified, use it to calculate the leftPercent. If not,
668
- // use the provided value to calculate it instead.
669
- if (clientX) {
670
- const leftOffset = state.isRtl ? (boundingRect?.right ?? 0) - clientX : clientX - (boundingRect?.left ?? 0);
671
- return leftOffset / width;
672
- } else if (value !== null && typeof value !== 'undefined' && range) {
673
- // Prevent NaN calculation if the range is 0.
674
- return range === 0 ? 0 : (value - props.min) / range;
675
- }
676
- // We should never end up in this scenario, but in case we do, and to
677
- // re-assure Typescript, return 0.
678
- return 0;
679
- };
680
-
681
- /**
682
- * Calculates the discrete value (snapped to the nearest step) along
683
- * with the corresponding handle position percentage.
684
- */
685
- const calcDiscreteValueAndPercent = ({
686
- leftPercent
687
- }) => {
688
- const {
689
- step = 1,
690
- min,
691
- max
692
- } = props;
693
- const numSteps = Math.floor((max - min) / step) + 1;
694
- /** Index of the step that corresponds to `leftPercent`. */
695
- const stepIndex = Math.round(leftPercent * (numSteps - 1));
696
- const discreteValue = stepIndex === numSteps - 1 ? max : min + step * stepIndex;
697
- /** Percentage corresponding to the step index. */
698
- const discretePercent = stepIndex / (numSteps - 1);
699
- return {
700
- discreteValue,
701
- discretePercent
702
- };
703
- };
704
-
705
- /**
706
- * Calculates the slider's value and handle position based on either a
707
- * mouse/touch event or an explicit value.
708
- */
709
- const calcValue = ({
710
- clientX,
711
- value,
712
- useRawValue
713
- }) => {
714
- const range = props.max - props.min;
715
- const leftPercentRaw = calcLeftPercent({
716
- clientX,
717
- value,
718
- range
719
- });
720
- /** `leftPercentRaw` clamped between 0 and 1. */
721
- const leftPercent = clamp.clamp(leftPercentRaw, 0, 1);
722
- if (useRawValue) {
723
- return {
724
- value,
725
- left: leftPercent * 100
726
- };
727
- }
728
-
729
- // Use the discrete value and percentage for snapping.
730
- const {
731
- discreteValue,
732
- discretePercent
733
- } = calcDiscreteValueAndPercent({
734
- leftPercent
735
- });
736
- return {
737
- value: discreteValue,
738
- left: discretePercent * 100
739
- };
740
- };
741
- const calcDistanceToHandle = (handle, clientX) => {
742
- const handleBoundingRect = getHandleBoundingRect(handle);
743
- /** x-coordinate of the midpoint. */
744
- const handleX = handleBoundingRect.left + handleBoundingRect.width / 2;
745
- return Math.abs(handleX - clientX);
746
- };
747
-
748
- /**
749
- * Calculates a new slider value based on the current value, a change delta,
750
- * and a step.
751
- *
752
- * @param currentValue - The starting value from which the slider is moving.
753
- * @param delta - The amount to adjust the current value by.
754
- * @param step - The step. Defaults to `1`.
755
- * @returns The new slider value, rounded to the same number of decimal places
756
- * as the step.
757
- */
758
- const calcValueForDelta = (currentValue, delta, step = 1) => {
759
- const base = delta > 0 ? Math.round(currentValue / step) * step : currentValue;
760
- const newValue = base + delta;
761
- // TODO: Why is the logical OR needed here?
762
- const decimals = (step.toString().split('.')[1] || '').length;
763
- return Number(newValue.toFixed(decimals));
764
- };
765
-
766
- /**
767
- * Sets state relevant to the given handle position.
768
- *
769
- * Guards against setting either lower or upper values beyond its counterpart.
770
- */
771
- const setValueLeftForHandle = (handle, {
772
- value: newValue,
773
- left: newLeft
774
- }) => {
775
- const {
776
- value,
777
- valueUpper,
778
- left,
779
- leftUpper
780
- } = state;
781
- if (handle === HandlePosition.LOWER) {
782
- // Don't allow higher than the upper handle.
783
- setState({
784
- value: valueUpper && newValue > valueUpper ? valueUpper : newValue,
785
- left: valueUpper && newValue > valueUpper ? leftUpper : newLeft,
786
- isValid: true
787
- });
788
- } else {
789
- setState({
790
- valueUpper: value && newValue < value ? value : newValue,
791
- leftUpper: value && newValue < value ? left : newLeft,
792
- isValidUpper: true
793
- });
794
- }
795
- };
796
- const setValueForHandle = (handle, value) => {
797
- if (handle === HandlePosition.LOWER) {
798
- setState({
799
- // TODO: Address this error
800
- //
801
- // @ts-expect-error - Passing a string to something that expects a
802
- // number.
803
- value,
804
- isValid: true
805
- });
806
- } else {
807
- setState({
808
- // TODO: Address this error
809
- //
810
- // @ts-expect-error - Passing a string to something that expects a
811
- // number.
812
- valueUpper: value,
813
- isValidUpper: true
814
- });
815
- }
816
- };
817
- const isValidValueForPosition = ({
818
- handle,
819
- value: newValue,
820
- min,
821
- max
822
- }) => {
823
- const {
824
- value,
825
- valueUpper
826
- } = state;
827
- if (!isValidValue({
828
- value: newValue,
829
- min,
830
- max
831
- })) {
832
- return false;
833
- }
834
- if (handle === HandlePosition.LOWER) {
835
- return !valueUpper || newValue <= valueUpper;
836
- } else if (handle === HandlePosition.UPPER) {
837
- return !value || newValue >= value;
838
- }
839
- return false;
840
- };
841
- const isValidValue = ({
842
- value,
843
- min,
844
- max
845
- }) => {
846
- return !(value < min || value > max);
847
- };
848
- const getAdjustedValueForPosition = ({
849
- handle,
850
- value: newValueInput,
851
- min,
852
- max
853
- }) => {
854
- const {
855
- value,
856
- valueUpper
857
- } = state;
858
- let newValue = getAdjustedValue({
859
- value: newValueInput,
860
- min,
861
- max
862
- });
863
-
864
- // TODO: Just return the value.
865
- // Next adjust to the opposite handle.
866
- if (handle === HandlePosition.LOWER && valueUpper) {
867
- newValue = newValue > valueUpper ? valueUpper : newValue;
868
- } else if (handle === HandlePosition.UPPER && value) {
869
- newValue = newValue < value ? value : newValue;
870
- }
871
- return newValue;
872
- };
873
- const getAdjustedValue = ({
874
- value,
875
- min,
876
- max
877
- }) => {
878
- // TODO: Just return the value.
879
- if (value < min) {
880
- value = min;
881
- }
882
- if (value > max) {
883
- value = max;
884
- }
885
- return value;
886
- };
887
-
888
- /**
889
- * Get the bounding rect for the requested handles' DOM element.
890
- *
891
- * If the bounding rect is not available, a new, empty DOMRect is returned.
892
- */
893
- const getHandleBoundingRect = handle => {
894
- let boundingRect;
895
- if (handle === HandlePosition.LOWER) {
896
- boundingRect = thumbRef.current?.getBoundingClientRect();
897
- } else {
898
- boundingRect = thumbRefUpper.current?.getBoundingClientRect();
899
- }
900
- return boundingRect ?? new DOMRect();
901
- };
902
- const getClientXFromEvent = event => {
903
- let clientX;
904
- if ('clientX' in event) {
905
- clientX = event.clientX;
906
- } else if ('touches' in event && 0 in event.touches && 'clientX' in event.touches[0]) {
907
- clientX = event.touches[0].clientX;
908
- }
909
- return clientX;
910
- };
911
- React.useEffect(() => {
912
- const {
913
- isValid,
914
- isValidUpper
915
- } = stateRef.current;
916
- const derivedState = {};
917
-
918
- // Will override state in favor of invalid prop
919
- if (props.invalid === true) {
920
- if (isValid === true) derivedState.isValid = false;
921
- if (isValidUpper === true) derivedState.isValidUpper = false;
922
- } else if (props.invalid === false) {
923
- if (isValid === false) derivedState.isValid = true;
924
- if (isValidUpper === false) derivedState.isValidUpper = true;
925
- }
926
- if (Object.keys(derivedState).length) {
927
- setState(derivedState);
928
- }
929
- }, [props.invalid]);
930
- const {
931
- ariaLabelInput,
932
- unstable_ariaLabelInputUpper: ariaLabelInputUpper,
933
- className,
934
- hideTextInput = false,
935
- id: idProp,
936
- min,
937
- minLabel,
938
- max,
939
- maxLabel,
940
- formatLabel = defaultFormatLabel,
941
- labelText,
942
- hideLabel,
943
- step = 1,
944
- inputType = 'number',
945
- invalidText,
946
- required,
947
- disabled = false,
948
- name,
949
- unstable_nameUpper: nameUpper,
950
- light,
951
- readOnly = false,
952
- warn = false,
953
- warnText,
954
- translateWithId: t = defaultTranslateWithId,
955
- ...other
956
- } = props;
957
- const id = idProp ?? generatedId;
958
- const {
959
- value,
960
- valueUpper,
961
- isValid,
962
- isValidUpper,
963
- correctedValue,
964
- correctedPosition,
965
- isRtl
966
- } = state;
967
- const normalizedProps = useNormalizedInputProps.useNormalizedInputProps({
968
- id,
969
- disabled,
970
- readOnly,
971
- invalid: !isValid,
972
- warn
973
- });
974
- const normalizedUpperProps = useNormalizedInputProps.useNormalizedInputProps({
975
- id,
976
- disabled,
977
- readOnly,
978
- invalid: !isValidUpper,
979
- warn
980
- });
981
- delete other.invalid;
982
- delete other.onRelease;
983
- delete other.stepMultiplier;
984
- delete other.unstable_valueUpper;
985
- const showWarning = normalizedProps.warn || correctedPosition === HandlePosition.LOWER && isValid;
986
- const showWarningUpper = normalizedUpperProps.warn || correctedPosition === (twoHandles ? HandlePosition.UPPER : HandlePosition.LOWER) && (twoHandles ? isValidUpper : isValid);
987
- const labelId = `${id}-label`;
988
- const labelClasses = cx(`${prefix}--label`, {
989
- [`${prefix}--visually-hidden`]: hideLabel,
990
- [`${prefix}--label--disabled`]: disabled
991
- });
992
- const containerClasses = cx(`${prefix}--slider-container`, {
993
- [`${prefix}--slider-container--two-handles`]: twoHandles,
994
- [`${prefix}--slider-container--disabled`]: disabled,
995
- [`${prefix}--slider-container--readonly`]: readOnly,
996
- [`${prefix}--slider-container--rtl`]: isRtl
997
- });
998
- const sliderClasses = cx(`${prefix}--slider`, {
999
- [`${prefix}--slider--disabled`]: disabled,
1000
- [`${prefix}--slider--readonly`]: readOnly
1001
- });
1002
- const fixedInputClasses = [`${prefix}--text-input`, `${prefix}--slider-text-input`];
1003
- const conditionalInputClasses = {
1004
- [`${prefix}--text-input--light`]: light
1005
- };
1006
- const lowerInputClasses = cx([...fixedInputClasses, `${prefix}--slider-text-input--lower`, conditionalInputClasses, {
1007
- [`${prefix}--text-input--invalid`]: normalizedProps.invalid,
1008
- [`${prefix}--slider-text-input--warn`]: showWarning
1009
- }]);
1010
- const upperInputClasses = cx([...fixedInputClasses, `${prefix}--slider-text-input--upper`, conditionalInputClasses, {
1011
- [`${prefix}--text-input--invalid`]: twoHandles ? normalizedUpperProps.invalid : normalizedProps.invalid,
1012
- [`${prefix}--slider-text-input--warn`]: showWarningUpper
1013
- }]);
1014
- const lowerInputWrapperClasses = cx([`${prefix}--text-input-wrapper`, `${prefix}--slider-text-input-wrapper`, `${prefix}--slider-text-input-wrapper--lower`, {
1015
- [`${prefix}--text-input-wrapper--readonly`]: readOnly,
1016
- [`${prefix}--slider-text-input-wrapper--hidden`]: hideTextInput
1017
- }]);
1018
- const upperInputWrapperClasses = cx([`${prefix}--text-input-wrapper`, `${prefix}--slider-text-input-wrapper`, `${prefix}--slider-text-input-wrapper--upper`, {
1019
- [`${prefix}--text-input-wrapper--readonly`]: readOnly,
1020
- [`${prefix}--slider-text-input-wrapper--hidden`]: hideTextInput
1021
- }]);
1022
- const lowerThumbClasses = cx(`${prefix}--slider__thumb`, {
1023
- [`${prefix}--slider__thumb--lower`]: twoHandles
1024
- });
1025
- const upperThumbClasses = cx(`${prefix}--slider__thumb`, {
1026
- [`${prefix}--slider__thumb--upper`]: twoHandles
1027
- });
1028
- const lowerThumbWrapperClasses = cx([`${prefix}--icon-tooltip`, `${prefix}--slider__thumb-wrapper`, {
1029
- [`${prefix}--slider__thumb-wrapper--lower`]: twoHandles
1030
- }]);
1031
- const upperThumbWrapperClasses = cx([`${prefix}--icon-tooltip`, `${prefix}--slider__thumb-wrapper`, {
1032
- [`${prefix}--slider__thumb-wrapper--upper`]: twoHandles
1033
- }]);
1034
- const lowerThumbWrapperProps = {
1035
- style: {
1036
- insetInlineStart: `${state.left}%`
1037
- }
1038
- };
1039
- const upperThumbWrapperProps = {
1040
- style: {
1041
- insetInlineStart: `${state.leftUpper}%`
1042
- }
1043
- };
1044
- return /*#__PURE__*/React.createElement("div", {
1045
- className: cx(`${prefix}--form-item`, className)
1046
- }, /*#__PURE__*/React.createElement(Text.Text, {
1047
- as: "label",
1048
- htmlFor: twoHandles ? undefined : id,
1049
- className: labelClasses,
1050
- id: labelId
1051
- }, labelText), /*#__PURE__*/React.createElement("div", {
1052
- className: containerClasses
1053
- }, twoHandles ? /*#__PURE__*/React.createElement("div", {
1054
- className: lowerInputWrapperClasses
1055
- }, /*#__PURE__*/React.createElement("input", {
1056
- type: hideTextInput ? 'hidden' : inputType,
1057
- id: `${id}-lower-input-for-slider`,
1058
- name: name,
1059
- className: lowerInputClasses,
1060
- value: value,
1061
- "aria-label": ariaLabelInput,
1062
- disabled: disabled,
1063
- required: required,
1064
- min: min,
1065
- max: max,
1066
- step: step,
1067
- onChange: onChangeInput,
1068
- onBlur: onBlurInput,
1069
- onKeyUp: props.onInputKeyUp,
1070
- onKeyDown: onInputKeyDown,
1071
- "data-invalid": normalizedProps.invalid ? true : null,
1072
- "data-handle-position": HandlePosition.LOWER,
1073
- "aria-invalid": normalizedProps.invalid ? true : undefined,
1074
- readOnly: readOnly
1075
- }), normalizedProps.invalid && /*#__PURE__*/React.createElement(iconsReact.WarningFilled, {
1076
- className: `${prefix}--slider__invalid-icon`
1077
- }), showWarning && /*#__PURE__*/React.createElement(iconsReact.WarningAltFilled, {
1078
- className: `${prefix}--slider__invalid-icon ${prefix}--slider__invalid-icon--warning`
1079
- })) : null, /*#__PURE__*/React.createElement(Text.Text, {
1080
- className: `${prefix}--slider__range-label`
1081
- }, formatLabel(min, minLabel)), /*#__PURE__*/React.createElement("div", _rollupPluginBabelHelpers.extends({
1082
- className: sliderClasses,
1083
- ref: node => {
1084
- elementRef.current = node;
1085
- },
1086
- onMouseDown: onDragStart,
1087
- onTouchStart: onDragStart,
1088
- onKeyDown: onKeyDown,
1089
- role: "presentation",
1090
- tabIndex: -1,
1091
- "data-invalid": (twoHandles ? normalizedProps.invalid || normalizedUpperProps.invalid : normalizedProps.invalid) ? true : null
1092
- }, other), /*#__PURE__*/React.createElement(ThumbWrapper, _rollupPluginBabelHelpers.extends({
1093
- hasTooltip: hideTextInput,
1094
- className: lowerThumbWrapperClasses,
1095
- label: formatLabel(value, undefined),
1096
- align: "top"
1097
- }, lowerThumbWrapperProps), /*#__PURE__*/React.createElement("div", {
1098
- className: lowerThumbClasses,
1099
- role: "slider",
1100
- id: twoHandles ? undefined : id,
1101
- tabIndex: readOnly || disabled ? undefined : 0,
1102
- "aria-valuetext": formatLabel(value, undefined),
1103
- "aria-valuemax": twoHandles ? valueUpper : max,
1104
- "aria-valuemin": min,
1105
- "aria-valuenow": value,
1106
- "aria-labelledby": twoHandles ? undefined : labelId,
1107
- "aria-label": twoHandles ? ariaLabelInput : undefined,
1108
- ref: thumbRef,
1109
- onFocus: () => setState({
1110
- activeHandle: HandlePosition.LOWER
1111
- })
1112
- }, twoHandles && !isRtl ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SliderHandles.LowerHandle, {
1113
- "aria-label": ariaLabelInput
1114
- }), /*#__PURE__*/React.createElement(SliderHandles.LowerHandleFocus, {
1115
- "aria-label": ariaLabelInput
1116
- })) : twoHandles && isRtl ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SliderHandles.UpperHandle, {
1117
- "aria-label": ariaLabelInputUpper
1118
- }), /*#__PURE__*/React.createElement(SliderHandles.UpperHandleFocus, {
1119
- "aria-label": ariaLabelInputUpper
1120
- })) : undefined)), hasUpperValue(valueUpper) ? /*#__PURE__*/React.createElement(ThumbWrapper, _rollupPluginBabelHelpers.extends({
1121
- hasTooltip: hideTextInput,
1122
- className: upperThumbWrapperClasses,
1123
- label: formatLabel(valueUpper, undefined),
1124
- align: "top"
1125
- }, upperThumbWrapperProps), /*#__PURE__*/React.createElement("div", {
1126
- className: upperThumbClasses,
1127
- role: "slider",
1128
- tabIndex: readOnly || disabled ? undefined : 0,
1129
- "aria-valuemax": max,
1130
- "aria-valuemin": value,
1131
- "aria-valuenow": valueUpper,
1132
- "aria-label": ariaLabelInputUpper,
1133
- ref: thumbRefUpper,
1134
- onFocus: () => setState({
1135
- activeHandle: HandlePosition.UPPER
1136
- })
1137
- }, !isRtl ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SliderHandles.UpperHandle, {
1138
- "aria-label": ariaLabelInputUpper
1139
- }), /*#__PURE__*/React.createElement(SliderHandles.UpperHandleFocus, {
1140
- "aria-label": ariaLabelInputUpper
1141
- })) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SliderHandles.LowerHandle, {
1142
- "aria-label": ariaLabelInput
1143
- }), /*#__PURE__*/React.createElement(SliderHandles.LowerHandleFocus, {
1144
- "aria-label": ariaLabelInput
1145
- })))) : null, /*#__PURE__*/React.createElement("div", {
1146
- className: `${prefix}--slider__track`,
1147
- ref: node => {
1148
- trackRef.current = node;
1149
- }
1150
- }), /*#__PURE__*/React.createElement("div", {
1151
- className: `${prefix}--slider__filled-track`,
1152
- ref: filledTrackRef
1153
- })), /*#__PURE__*/React.createElement(Text.Text, {
1154
- className: `${prefix}--slider__range-label`
1155
- }, formatLabel(max, maxLabel)), /*#__PURE__*/React.createElement("div", {
1156
- className: upperInputWrapperClasses
1157
- }, /*#__PURE__*/React.createElement("input", {
1158
- type: hideTextInput ? 'hidden' : inputType,
1159
- id: `${id}-${twoHandles ? 'upper-' : ''}input-for-slider`,
1160
- name: twoHandles ? nameUpper : name,
1161
- className: upperInputClasses,
1162
- value: twoHandles ? valueUpper : value,
1163
- "aria-labelledby": !ariaLabelInput && !twoHandles ? labelId : undefined,
1164
- "aria-label": twoHandles ? ariaLabelInputUpper : ariaLabelInput ? ariaLabelInput : undefined,
1165
- disabled: disabled,
1166
- required: required,
1167
- min: min,
1168
- max: max,
1169
- step: step,
1170
- onChange: onChangeInput,
1171
- onBlur: onBlurInput,
1172
- onKeyDown: onInputKeyDown,
1173
- onKeyUp: props.onInputKeyUp,
1174
- "data-invalid": (twoHandles ? normalizedUpperProps.invalid : normalizedProps.invalid) ? true : null,
1175
- "data-handle-position": twoHandles ? HandlePosition.UPPER : null,
1176
- "aria-invalid": (twoHandles ? normalizedUpperProps.invalid : normalizedProps.invalid) ? true : undefined,
1177
- readOnly: readOnly
1178
- }), (twoHandles ? normalizedUpperProps.invalid : normalizedProps.invalid) && /*#__PURE__*/React.createElement(iconsReact.WarningFilled, {
1179
- className: `${prefix}--slider__invalid-icon`
1180
- }), showWarningUpper && /*#__PURE__*/React.createElement(iconsReact.WarningAltFilled, {
1181
- className: `${prefix}--slider__invalid-icon ${prefix}--slider__invalid-icon--warning`
1182
- }))), (normalizedProps.invalid || normalizedUpperProps.invalid) && /*#__PURE__*/React.createElement(Text.Text, {
1183
- as: "div",
1184
- className: cx(`${prefix}--slider__validation-msg`, `${prefix}--slider__validation-msg--invalid`, `${prefix}--form-requirement`)
1185
- }, invalidText), (normalizedProps.warn || normalizedUpperProps.warn) && /*#__PURE__*/React.createElement(Text.Text, {
1186
- as: "div",
1187
- className: cx(`${prefix}--slider__validation-msg`, `${prefix}--form-requirement`)
1188
- }, warnText), correctedValue && /*#__PURE__*/React.createElement(Text.Text, {
1189
- as: "div",
1190
- role: "alert",
1191
- className: cx(`${prefix}--slider__status-msg`, `${prefix}--form-requirement`)
1192
- }, t(translationIds['carbon.slider.auto-correct-announcement'], {
1193
- correctedValue
1194
- })));
64
+ const DRAG_EVENT_TYPES = new Set(["mousemove", "touchmove"]);
65
+ const DRAG_STOP_EVENT_TYPES = new Set([
66
+ "mouseup",
67
+ "touchend",
68
+ "touchcancel"
69
+ ]);
70
+ var HandlePosition = /* @__PURE__ */ function(HandlePosition) {
71
+ HandlePosition["LOWER"] = "lower";
72
+ HandlePosition["UPPER"] = "upper";
73
+ return HandlePosition;
74
+ }(HandlePosition || {});
75
+ const Slider = (props) => {
76
+ const [state, setState] = (0, react.useReducer)((prev, args) => ({
77
+ ...prev,
78
+ ...args
79
+ }), {
80
+ value: props.value,
81
+ valueUpper: props.unstable_valueUpper,
82
+ left: 0,
83
+ leftUpper: 0,
84
+ needsOnRelease: false,
85
+ isValid: true,
86
+ isValidUpper: true,
87
+ activeHandle: void 0,
88
+ correctedValue: null,
89
+ correctedPosition: null,
90
+ isRtl: false
91
+ });
92
+ const stateRef = (0, react.useRef)(state);
93
+ (0, react.useEffect)(() => {
94
+ stateRef.current = state;
95
+ }, [state]);
96
+ const propsRef = (0, react.useRef)(props);
97
+ (0, react.useEffect)(() => {
98
+ propsRef.current = props;
99
+ }, [props]);
100
+ const thumbRef = (0, react.useRef)(null);
101
+ const thumbRefUpper = (0, react.useRef)(null);
102
+ const filledTrackRef = (0, react.useRef)(null);
103
+ const elementRef = (0, react.useRef)(null);
104
+ const trackRef = (0, react.useRef)(null);
105
+ const generatedId = require_useId.useId();
106
+ const prefix = require_usePrefix.usePrefix();
107
+ const twoHandles = hasUpperValue(state.valueUpper);
108
+ /**
109
+ * Sets up initial slider position and value in response to component mount.
110
+ */
111
+ (0, react.useEffect)(() => {
112
+ if (elementRef.current) {
113
+ const isRtl = document?.dir === "rtl";
114
+ if (twoHandles) {
115
+ const { value, left } = calcValue({
116
+ value: stateRef.current.value,
117
+ useRawValue: true
118
+ });
119
+ const { value: valueUpper, left: leftUpper } = calcValue({
120
+ value: stateRef.current.valueUpper,
121
+ useRawValue: true
122
+ });
123
+ setState({
124
+ isRtl,
125
+ value,
126
+ left,
127
+ valueUpper,
128
+ leftUpper
129
+ });
130
+ } else {
131
+ const { value, left } = calcValue({
132
+ value: stateRef.current.value,
133
+ useRawValue: true
134
+ });
135
+ setState({
136
+ isRtl,
137
+ value,
138
+ left
139
+ });
140
+ }
141
+ }
142
+ return () => {
143
+ DRAG_STOP_EVENT_TYPES.forEach((element) => elementRef.current?.ownerDocument.removeEventListener(element, onDragStop));
144
+ DRAG_EVENT_TYPES.forEach((element) => elementRef.current?.ownerDocument.removeEventListener(element, handleDrag));
145
+ };
146
+ }, []);
147
+ (0, react.useEffect)(() => {
148
+ if (twoHandles) {
149
+ if (filledTrackRef.current) filledTrackRef.current.style.transform = state.isRtl ? `translate(${100 - state.leftUpper}%, -50%) scaleX(${(state.leftUpper - state.left) / 100})` : `translate(${state.left}%, -50%) scaleX(${(state.leftUpper - state.left) / 100})`;
150
+ } else if (filledTrackRef.current) filledTrackRef.current.style.transform = state.isRtl ? `translate(100%, -50%) scaleX(-${state.left / 100})` : `translate(0%, -50%) scaleX(${state.left / 100})`;
151
+ }, [
152
+ state.left,
153
+ state.leftUpper,
154
+ state.isRtl
155
+ ]);
156
+ const prevValsRef = (0, react.useRef)(null);
157
+ (0, react.useEffect)(() => {
158
+ const prev = prevValsRef.current;
159
+ if (prev && (prev.value !== state.value || prev.valueUpper !== state.valueUpper) && typeof props.onChange === "function") props.onChange({
160
+ value: state.value,
161
+ valueUpper: state.valueUpper
162
+ });
163
+ prevValsRef.current = {
164
+ value: state.value,
165
+ valueUpper: state.valueUpper
166
+ };
167
+ }, [
168
+ state.value,
169
+ state.valueUpper,
170
+ props.onChange
171
+ ]);
172
+ (0, react.useEffect)(() => {
173
+ if (state.needsOnRelease && typeof props.onRelease === "function") {
174
+ props.onRelease({
175
+ value: state.value,
176
+ valueUpper: state.valueUpper
177
+ });
178
+ setState({ needsOnRelease: false });
179
+ }
180
+ }, [
181
+ state.needsOnRelease,
182
+ state.value,
183
+ state.valueUpper,
184
+ props.onRelease
185
+ ]);
186
+ const prevSyncKeysRef = (0, react.useRef)(null);
187
+ (0, react.useEffect)(() => {
188
+ const prev = prevSyncKeysRef.current;
189
+ const next = [
190
+ props.value,
191
+ props.unstable_valueUpper,
192
+ props.max,
193
+ props.min
194
+ ];
195
+ if (!prev || prev[0] !== next[0] || prev[1] !== next[1] || prev[2] !== next[2] || prev[3] !== next[3]) {
196
+ setState(calcValue({
197
+ value: props.value,
198
+ useRawValue: true
199
+ }));
200
+ if (typeof props.unstable_valueUpper !== "undefined") {
201
+ const { value: valueUpper, left: leftUpper } = calcValue({
202
+ value: props.unstable_valueUpper,
203
+ useRawValue: true
204
+ });
205
+ setState({
206
+ valueUpper,
207
+ leftUpper
208
+ });
209
+ } else setState({
210
+ valueUpper: void 0,
211
+ leftUpper: void 0
212
+ });
213
+ prevSyncKeysRef.current = next;
214
+ }
215
+ }, [
216
+ props.value,
217
+ props.unstable_valueUpper,
218
+ props.max,
219
+ props.min
220
+ ]);
221
+ /**
222
+ * Rounds a given value to the nearest step defined by the slider's `step`
223
+ * prop.
224
+ *
225
+ * @param value - The value to adjust to the nearest step. Defaults to `0`.
226
+ * @returns The value rounded to the precision determined by the step.
227
+ */
228
+ const nearestStepValue = (value = 0) => {
229
+ const decimals = (props.step?.toString().split(".")[1] ?? "").length;
230
+ return Number(value.toFixed(decimals));
231
+ };
232
+ const handleDrag = (event) => {
233
+ if (event instanceof globalThis.MouseEvent || event instanceof globalThis.TouchEvent) onDrag(event);
234
+ };
235
+ /**
236
+ * Sets up "drag" event handlers and calls `onDrag` in case dragging
237
+ * started on somewhere other than the thumb without a corresponding "move"
238
+ * event.
239
+ */
240
+ const onDragStart = (evt) => {
241
+ if (props.disabled || props.readOnly) return;
242
+ evt.preventDefault();
243
+ DRAG_STOP_EVENT_TYPES.forEach((element) => {
244
+ elementRef.current?.ownerDocument.addEventListener(element, onDragStop);
245
+ });
246
+ DRAG_EVENT_TYPES.forEach((element) => {
247
+ elementRef.current?.ownerDocument.addEventListener(element, handleDrag);
248
+ });
249
+ const clientX = getClientXFromEvent(evt.nativeEvent);
250
+ let activeHandle;
251
+ if (twoHandles) {
252
+ if (evt.target == thumbRef.current) activeHandle = HandlePosition.LOWER;
253
+ else if (evt.target == thumbRefUpper.current) activeHandle = HandlePosition.UPPER;
254
+ else if (clientX) if (calcDistanceToHandle(HandlePosition.LOWER, clientX) <= calcDistanceToHandle(HandlePosition.UPPER, clientX)) activeHandle = HandlePosition.LOWER;
255
+ else activeHandle = HandlePosition.UPPER;
256
+ }
257
+ const focusOptions = { preventScroll: true };
258
+ if (twoHandles) {
259
+ if (thumbRef.current && activeHandle === HandlePosition.LOWER) thumbRef.current.focus(focusOptions);
260
+ else if (thumbRefUpper.current && activeHandle === HandlePosition.UPPER) thumbRefUpper.current.focus(focusOptions);
261
+ } else if (thumbRef.current) thumbRef.current.focus(focusOptions);
262
+ setState({ activeHandle });
263
+ onDrag(evt.nativeEvent, activeHandle);
264
+ };
265
+ /**
266
+ * Removes "drag" and "drag stop" event handlers and calls sets the flag
267
+ * indicating that the `onRelease` callback should be called.
268
+ */
269
+ const onDragStop = () => {
270
+ if (props.disabled || props.readOnly) return;
271
+ DRAG_STOP_EVENT_TYPES.forEach((element) => {
272
+ elementRef.current?.ownerDocument.removeEventListener(element, onDragStop);
273
+ });
274
+ DRAG_EVENT_TYPES.forEach((element) => {
275
+ elementRef.current?.ownerDocument.removeEventListener(element, handleDrag);
276
+ });
277
+ setState({
278
+ needsOnRelease: true,
279
+ isValid: true,
280
+ isValidUpper: true
281
+ });
282
+ };
283
+ /**
284
+ * Handles a "drag" event by recalculating the value/thumb and setting state
285
+ * accordingly.
286
+ *
287
+ * @param evt The event.
288
+ * @param activeHandle The first drag event call, we may have an explicit
289
+ * activeHandle value, which is to be used before state is used.
290
+ */
291
+ const _onDragRef = (0, react.useRef)(null);
292
+ _onDragRef.current = (evt, activeHandle) => {
293
+ activeHandle = activeHandle ?? stateRef.current.activeHandle;
294
+ if (propsRef.current.disabled || propsRef.current.readOnly || !evt) return;
295
+ const { value, left } = calcValue({
296
+ clientX: getClientXFromEvent(evt),
297
+ value: stateRef.current.value
298
+ });
299
+ if (twoHandles && activeHandle) setValueLeftForHandle(activeHandle, {
300
+ value: nearestStepValue(value),
301
+ left
302
+ });
303
+ else setState({
304
+ value: nearestStepValue(value),
305
+ left,
306
+ isValid: true
307
+ });
308
+ setState({
309
+ correctedValue: null,
310
+ correctedPosition: null
311
+ });
312
+ };
313
+ /**
314
+ * Throttles calls to `_onDrag` by limiting events to being processed at
315
+ * most once every `EVENT_THROTTLE` milliseconds.
316
+ */
317
+ const onDrag = (0, react.useMemo)(() => (0, es_toolkit_compat.throttle)((evt, activeHandle) => {
318
+ _onDragRef.current?.(evt, activeHandle);
319
+ }, EVENT_THROTTLE, {
320
+ leading: true,
321
+ trailing: false
322
+ }), []);
323
+ /**
324
+ * Handles a `keydown` event by recalculating the value/thumb and setting
325
+ * state accordingly.
326
+ */
327
+ const onKeyDown = (evt) => {
328
+ if (props.disabled || props.readOnly) return;
329
+ const { step = 1, stepMultiplier = 4 } = props;
330
+ let delta = 0;
331
+ if (require_match.matches(evt, [require_keys.ArrowDown, require_keys.ArrowLeft])) delta = -step;
332
+ else if (require_match.matches(evt, [require_keys.ArrowUp, require_keys.ArrowRight])) delta = step;
333
+ else return;
334
+ if (evt.shiftKey) delta *= stepMultiplier;
335
+ if (twoHandles && state.activeHandle) {
336
+ const { value, left } = calcValue({ value: calcValueForDelta((state.activeHandle === HandlePosition.LOWER ? state.value : state.valueUpper) ?? props.min, delta, props.step) });
337
+ setValueLeftForHandle(state.activeHandle, {
338
+ value: nearestStepValue(value),
339
+ left
340
+ });
341
+ } else {
342
+ const { value, left } = calcValue({ value: calcValueForDelta(state.value, delta, props.step) });
343
+ setState({
344
+ value: nearestStepValue(value),
345
+ left,
346
+ isValid: true
347
+ });
348
+ }
349
+ setState({
350
+ correctedValue: null,
351
+ correctedPosition: null
352
+ });
353
+ };
354
+ /**
355
+ * Provides the two-way binding for the input field of the Slider. It also
356
+ * Handles a change to the input field by recalculating the value/thumb and
357
+ * setting state accordingly.
358
+ */
359
+ const onChangeInput = (evt) => {
360
+ if (props.disabled || props.readOnly) return;
361
+ if (!evt || !("target" in evt) || typeof evt.target.value !== "string") return;
362
+ const activeHandle = evt.target.dataset.handlePosition ?? HandlePosition.LOWER;
363
+ const targetValue = Number.parseFloat(evt.target.value);
364
+ if (twoHandles) if (isNaN(targetValue)) setValueForHandle(activeHandle, evt.target.value);
365
+ else if (isValidValueForPosition({
366
+ handle: activeHandle,
367
+ value: targetValue,
368
+ min: props.min,
369
+ max: props.max
370
+ })) processNewInputValue(evt.target);
371
+ else setValueForHandle(activeHandle, targetValue);
372
+ else if (isNaN(targetValue)) setState({ value: evt.target.value });
373
+ else if (isValidValue({
374
+ value: targetValue,
375
+ min: props.min,
376
+ max: props.max
377
+ })) processNewInputValue(evt.target);
378
+ else setState({ value: targetValue });
379
+ };
380
+ /**
381
+ * Checks for validity of input value after clicking out of the input. It also
382
+ * Handles state change to isValid state.
383
+ */
384
+ const onBlurInput = (evt) => {
385
+ if (!evt || !("target" in evt) || typeof evt.target.value !== "string") return;
386
+ const { value: targetValue } = evt.target;
387
+ processNewInputValue(evt.target);
388
+ props.onBlur?.({
389
+ value: targetValue,
390
+ handlePosition: evt.target.dataset.handlePosition
391
+ });
392
+ };
393
+ const onInputKeyDown = (evt) => {
394
+ if (props.disabled || props.readOnly || !(evt.target instanceof HTMLInputElement)) return;
395
+ if (!evt || !("target" in evt) || typeof evt.target.value !== "string") return;
396
+ if (require_match.matches(evt, [require_keys.Enter])) processNewInputValue(evt.target);
397
+ };
398
+ const processNewInputValue = (input) => {
399
+ setState({
400
+ correctedValue: null,
401
+ correctedPosition: null
402
+ });
403
+ const targetValue = Number.parseFloat(input.value);
404
+ const validity = !isNaN(targetValue);
405
+ const handlePosition = input.dataset.handlePosition;
406
+ if (handlePosition === HandlePosition.LOWER) setState({ isValid: validity });
407
+ else if (handlePosition === HandlePosition.UPPER) setState({ isValidUpper: validity });
408
+ setState({ isValid: validity });
409
+ if (validity) {
410
+ const adjustedValue = handlePosition ? getAdjustedValueForPosition({
411
+ handle: handlePosition,
412
+ value: targetValue,
413
+ min: props.min,
414
+ max: props.max
415
+ }) : getAdjustedValue({
416
+ value: targetValue,
417
+ min: props.min,
418
+ max: props.max
419
+ });
420
+ if (adjustedValue !== targetValue) setState({
421
+ correctedValue: targetValue.toString(),
422
+ correctedPosition: handlePosition ?? null
423
+ });
424
+ else setState({
425
+ correctedValue: null,
426
+ correctedPosition: null
427
+ });
428
+ const { value, left } = calcValue({
429
+ value: adjustedValue,
430
+ useRawValue: true
431
+ });
432
+ if (handlePosition) setValueLeftForHandle(handlePosition, {
433
+ value: nearestStepValue(value),
434
+ left
435
+ });
436
+ else setState({
437
+ value,
438
+ left
439
+ });
440
+ }
441
+ };
442
+ const calcLeftPercent = ({ clientX, value, range }) => {
443
+ const boundingRect = elementRef.current?.getBoundingClientRect?.();
444
+ let width = boundingRect ? boundingRect.right - boundingRect.left : 0;
445
+ if (width <= 0) width = 1;
446
+ if (clientX) return (state.isRtl ? (boundingRect?.right ?? 0) - clientX : clientX - (boundingRect?.left ?? 0)) / width;
447
+ else if (value !== null && typeof value !== "undefined" && range) return range === 0 ? 0 : (value - props.min) / range;
448
+ return 0;
449
+ };
450
+ /**
451
+ * Calculates the discrete value (snapped to the nearest step) along
452
+ * with the corresponding handle position percentage.
453
+ */
454
+ const calcDiscreteValueAndPercent = ({ leftPercent }) => {
455
+ const { step = 1, min, max } = props;
456
+ const numSteps = Math.floor((max - min) / step) + 1;
457
+ /** Index of the step that corresponds to `leftPercent`. */
458
+ const stepIndex = Math.round(leftPercent * (numSteps - 1));
459
+ return {
460
+ discreteValue: stepIndex === numSteps - 1 ? max : min + step * stepIndex,
461
+ discretePercent: stepIndex / (numSteps - 1)
462
+ };
463
+ };
464
+ /**
465
+ * Calculates the slider's value and handle position based on either a
466
+ * mouse/touch event or an explicit value.
467
+ */
468
+ const calcValue = ({ clientX, value, useRawValue }) => {
469
+ /** `leftPercentRaw` clamped between 0 and 1. */
470
+ const leftPercent = require_clamp.clamp(calcLeftPercent({
471
+ clientX,
472
+ value,
473
+ range: props.max - props.min
474
+ }), 0, 1);
475
+ if (useRawValue) return {
476
+ value,
477
+ left: leftPercent * 100
478
+ };
479
+ const { discreteValue, discretePercent } = calcDiscreteValueAndPercent({ leftPercent });
480
+ return {
481
+ value: discreteValue,
482
+ left: discretePercent * 100
483
+ };
484
+ };
485
+ const calcDistanceToHandle = (handle, clientX) => {
486
+ const handleBoundingRect = getHandleBoundingRect(handle);
487
+ /** x-coordinate of the midpoint. */
488
+ const handleX = handleBoundingRect.left + handleBoundingRect.width / 2;
489
+ return Math.abs(handleX - clientX);
490
+ };
491
+ /**
492
+ * Calculates a new slider value based on the current value, a change delta,
493
+ * and a step.
494
+ *
495
+ * @param currentValue - The starting value from which the slider is moving.
496
+ * @param delta - The amount to adjust the current value by.
497
+ * @param step - The step. Defaults to `1`.
498
+ * @returns The new slider value, rounded to the same number of decimal places
499
+ * as the step.
500
+ */
501
+ const calcValueForDelta = (currentValue, delta, step = 1) => {
502
+ const newValue = (delta > 0 ? Math.round(currentValue / step) * step : currentValue) + delta;
503
+ const decimals = (step.toString().split(".")[1] || "").length;
504
+ return Number(newValue.toFixed(decimals));
505
+ };
506
+ /**
507
+ * Sets state relevant to the given handle position.
508
+ *
509
+ * Guards against setting either lower or upper values beyond its counterpart.
510
+ */
511
+ const setValueLeftForHandle = (handle, { value: newValue, left: newLeft }) => {
512
+ const { value, valueUpper, left, leftUpper } = state;
513
+ if (handle === HandlePosition.LOWER) setState({
514
+ value: valueUpper && newValue > valueUpper ? valueUpper : newValue,
515
+ left: valueUpper && newValue > valueUpper ? leftUpper : newLeft,
516
+ isValid: true
517
+ });
518
+ else setState({
519
+ valueUpper: value && newValue < value ? value : newValue,
520
+ leftUpper: value && newValue < value ? left : newLeft,
521
+ isValidUpper: true
522
+ });
523
+ };
524
+ const setValueForHandle = (handle, value) => {
525
+ if (handle === HandlePosition.LOWER) setState({
526
+ value,
527
+ isValid: true
528
+ });
529
+ else setState({
530
+ valueUpper: value,
531
+ isValidUpper: true
532
+ });
533
+ };
534
+ const isValidValueForPosition = ({ handle, value: newValue, min, max }) => {
535
+ const { value, valueUpper } = state;
536
+ if (!isValidValue({
537
+ value: newValue,
538
+ min,
539
+ max
540
+ })) return false;
541
+ if (handle === HandlePosition.LOWER) return !valueUpper || newValue <= valueUpper;
542
+ else if (handle === HandlePosition.UPPER) return !value || newValue >= value;
543
+ return false;
544
+ };
545
+ const isValidValue = ({ value, min, max }) => {
546
+ return !(value < min || value > max);
547
+ };
548
+ const getAdjustedValueForPosition = ({ handle, value: newValueInput, min, max }) => {
549
+ const { value, valueUpper } = state;
550
+ let newValue = getAdjustedValue({
551
+ value: newValueInput,
552
+ min,
553
+ max
554
+ });
555
+ if (handle === HandlePosition.LOWER && valueUpper) newValue = newValue > valueUpper ? valueUpper : newValue;
556
+ else if (handle === HandlePosition.UPPER && value) newValue = newValue < value ? value : newValue;
557
+ return newValue;
558
+ };
559
+ const getAdjustedValue = ({ value, min, max }) => {
560
+ if (value < min) value = min;
561
+ if (value > max) value = max;
562
+ return value;
563
+ };
564
+ /**
565
+ * Get the bounding rect for the requested handles' DOM element.
566
+ *
567
+ * If the bounding rect is not available, a new, empty DOMRect is returned.
568
+ */
569
+ const getHandleBoundingRect = (handle) => {
570
+ let boundingRect;
571
+ if (handle === HandlePosition.LOWER) boundingRect = thumbRef.current?.getBoundingClientRect();
572
+ else boundingRect = thumbRefUpper.current?.getBoundingClientRect();
573
+ return boundingRect ?? new DOMRect();
574
+ };
575
+ const getClientXFromEvent = (event) => {
576
+ let clientX;
577
+ if ("clientX" in event) clientX = event.clientX;
578
+ else if ("touches" in event && 0 in event.touches && "clientX" in event.touches[0]) clientX = event.touches[0].clientX;
579
+ return clientX;
580
+ };
581
+ (0, react.useEffect)(() => {
582
+ const { isValid, isValidUpper } = stateRef.current;
583
+ const derivedState = {};
584
+ if (props.invalid === true) {
585
+ if (isValid === true) derivedState.isValid = false;
586
+ if (isValidUpper === true) derivedState.isValidUpper = false;
587
+ } else if (props.invalid === false) {
588
+ if (isValid === false) derivedState.isValid = true;
589
+ if (isValidUpper === false) derivedState.isValidUpper = true;
590
+ }
591
+ if (Object.keys(derivedState).length) setState(derivedState);
592
+ }, [props.invalid]);
593
+ const { ariaLabelInput, unstable_ariaLabelInputUpper: ariaLabelInputUpper, className, hideTextInput = false, id: idProp, min, minLabel, max, maxLabel, formatLabel = defaultFormatLabel, labelText, hideLabel, step = 1, inputType = "number", invalidText, required, disabled = false, name, unstable_nameUpper: nameUpper, light, readOnly = false, warn = false, warnText, translateWithId: t = defaultTranslateWithId, ...other } = props;
594
+ const id = idProp ?? generatedId;
595
+ const { value, valueUpper, isValid, isValidUpper, correctedValue, correctedPosition, isRtl } = state;
596
+ const normalizedProps = require_useNormalizedInputProps.useNormalizedInputProps({
597
+ id,
598
+ disabled,
599
+ readOnly,
600
+ invalid: !isValid,
601
+ warn
602
+ });
603
+ const normalizedUpperProps = require_useNormalizedInputProps.useNormalizedInputProps({
604
+ id,
605
+ disabled,
606
+ readOnly,
607
+ invalid: !isValidUpper,
608
+ warn
609
+ });
610
+ delete other.invalid;
611
+ delete other.onRelease;
612
+ delete other.stepMultiplier;
613
+ delete other.unstable_valueUpper;
614
+ const showWarning = normalizedProps.warn || correctedPosition === HandlePosition.LOWER && isValid;
615
+ const showWarningUpper = normalizedUpperProps.warn || correctedPosition === (twoHandles ? HandlePosition.UPPER : HandlePosition.LOWER) && (twoHandles ? isValidUpper : isValid);
616
+ const labelId = `${id}-label`;
617
+ const labelClasses = (0, classnames.default)(`${prefix}--label`, {
618
+ [`${prefix}--visually-hidden`]: hideLabel,
619
+ [`${prefix}--label--disabled`]: disabled
620
+ });
621
+ const containerClasses = (0, classnames.default)(`${prefix}--slider-container`, {
622
+ [`${prefix}--slider-container--two-handles`]: twoHandles,
623
+ [`${prefix}--slider-container--disabled`]: disabled,
624
+ [`${prefix}--slider-container--readonly`]: readOnly,
625
+ [`${prefix}--slider-container--rtl`]: isRtl
626
+ });
627
+ const sliderClasses = (0, classnames.default)(`${prefix}--slider`, {
628
+ [`${prefix}--slider--disabled`]: disabled,
629
+ [`${prefix}--slider--readonly`]: readOnly
630
+ });
631
+ const fixedInputClasses = [`${prefix}--text-input`, `${prefix}--slider-text-input`];
632
+ const conditionalInputClasses = { [`${prefix}--text-input--light`]: light };
633
+ const lowerInputClasses = (0, classnames.default)([
634
+ ...fixedInputClasses,
635
+ `${prefix}--slider-text-input--lower`,
636
+ conditionalInputClasses,
637
+ {
638
+ [`${prefix}--text-input--invalid`]: normalizedProps.invalid,
639
+ [`${prefix}--slider-text-input--warn`]: showWarning
640
+ }
641
+ ]);
642
+ const upperInputClasses = (0, classnames.default)([
643
+ ...fixedInputClasses,
644
+ `${prefix}--slider-text-input--upper`,
645
+ conditionalInputClasses,
646
+ {
647
+ [`${prefix}--text-input--invalid`]: twoHandles ? normalizedUpperProps.invalid : normalizedProps.invalid,
648
+ [`${prefix}--slider-text-input--warn`]: showWarningUpper
649
+ }
650
+ ]);
651
+ const lowerInputWrapperClasses = (0, classnames.default)([
652
+ `${prefix}--text-input-wrapper`,
653
+ `${prefix}--slider-text-input-wrapper`,
654
+ `${prefix}--slider-text-input-wrapper--lower`,
655
+ {
656
+ [`${prefix}--text-input-wrapper--readonly`]: readOnly,
657
+ [`${prefix}--slider-text-input-wrapper--hidden`]: hideTextInput
658
+ }
659
+ ]);
660
+ const upperInputWrapperClasses = (0, classnames.default)([
661
+ `${prefix}--text-input-wrapper`,
662
+ `${prefix}--slider-text-input-wrapper`,
663
+ `${prefix}--slider-text-input-wrapper--upper`,
664
+ {
665
+ [`${prefix}--text-input-wrapper--readonly`]: readOnly,
666
+ [`${prefix}--slider-text-input-wrapper--hidden`]: hideTextInput
667
+ }
668
+ ]);
669
+ const lowerThumbClasses = (0, classnames.default)(`${prefix}--slider__thumb`, { [`${prefix}--slider__thumb--lower`]: twoHandles });
670
+ const upperThumbClasses = (0, classnames.default)(`${prefix}--slider__thumb`, { [`${prefix}--slider__thumb--upper`]: twoHandles });
671
+ const lowerThumbWrapperClasses = (0, classnames.default)([
672
+ `${prefix}--icon-tooltip`,
673
+ `${prefix}--slider__thumb-wrapper`,
674
+ { [`${prefix}--slider__thumb-wrapper--lower`]: twoHandles }
675
+ ]);
676
+ const upperThumbWrapperClasses = (0, classnames.default)([
677
+ `${prefix}--icon-tooltip`,
678
+ `${prefix}--slider__thumb-wrapper`,
679
+ { [`${prefix}--slider__thumb-wrapper--upper`]: twoHandles }
680
+ ]);
681
+ const lowerThumbWrapperProps = { style: { insetInlineStart: `${state.left}%` } };
682
+ const upperThumbWrapperProps = { style: { insetInlineStart: `${state.leftUpper}%` } };
683
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
684
+ className: (0, classnames.default)(`${prefix}--form-item`, className),
685
+ children: [
686
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Text.Text, {
687
+ as: "label",
688
+ htmlFor: twoHandles ? void 0 : id,
689
+ className: labelClasses,
690
+ id: labelId,
691
+ children: labelText
692
+ }),
693
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
694
+ className: containerClasses,
695
+ children: [
696
+ twoHandles ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
697
+ className: lowerInputWrapperClasses,
698
+ children: [
699
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
700
+ type: hideTextInput ? "hidden" : inputType,
701
+ id: `${id}-lower-input-for-slider`,
702
+ name,
703
+ className: lowerInputClasses,
704
+ value,
705
+ "aria-label": ariaLabelInput,
706
+ disabled,
707
+ required,
708
+ min,
709
+ max,
710
+ step,
711
+ onChange: onChangeInput,
712
+ onBlur: onBlurInput,
713
+ onKeyUp: props.onInputKeyUp,
714
+ onKeyDown: onInputKeyDown,
715
+ "data-invalid": normalizedProps.invalid ? true : null,
716
+ "data-handle-position": HandlePosition.LOWER,
717
+ "aria-invalid": normalizedProps.invalid ? true : void 0,
718
+ readOnly
719
+ }),
720
+ normalizedProps.invalid && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_carbon_icons_react.WarningFilled, { className: `${prefix}--slider__invalid-icon` }),
721
+ showWarning && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_carbon_icons_react.WarningAltFilled, { className: `${prefix}--slider__invalid-icon ${prefix}--slider__invalid-icon--warning` })
722
+ ]
723
+ }) : null,
724
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Text.Text, {
725
+ className: `${prefix}--slider__range-label`,
726
+ children: formatLabel(min, minLabel)
727
+ }),
728
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
729
+ className: sliderClasses,
730
+ ref: (node) => {
731
+ elementRef.current = node;
732
+ },
733
+ onMouseDown: onDragStart,
734
+ onTouchStart: onDragStart,
735
+ onKeyDown,
736
+ role: "presentation",
737
+ tabIndex: -1,
738
+ "data-invalid": (twoHandles ? normalizedProps.invalid || normalizedUpperProps.invalid : normalizedProps.invalid) ? true : null,
739
+ ...other,
740
+ children: [
741
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ThumbWrapper, {
742
+ hasTooltip: hideTextInput,
743
+ className: lowerThumbWrapperClasses,
744
+ label: formatLabel(value, void 0),
745
+ align: "top",
746
+ ...lowerThumbWrapperProps,
747
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
748
+ className: lowerThumbClasses,
749
+ role: "slider",
750
+ id: twoHandles ? void 0 : id,
751
+ tabIndex: readOnly || disabled ? void 0 : 0,
752
+ "aria-valuetext": formatLabel(value, void 0),
753
+ "aria-valuemax": twoHandles ? valueUpper : max,
754
+ "aria-valuemin": min,
755
+ "aria-valuenow": value,
756
+ "aria-labelledby": twoHandles ? void 0 : labelId,
757
+ "aria-label": twoHandles ? ariaLabelInput : void 0,
758
+ ref: thumbRef,
759
+ onFocus: () => setState({ activeHandle: HandlePosition.LOWER }),
760
+ children: twoHandles && !isRtl ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_SliderHandles.LowerHandle, { "aria-label": ariaLabelInput }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_SliderHandles.LowerHandleFocus, { "aria-label": ariaLabelInput })] }) : twoHandles && isRtl ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_SliderHandles.UpperHandle, { "aria-label": ariaLabelInputUpper }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_SliderHandles.UpperHandleFocus, { "aria-label": ariaLabelInputUpper })] }) : void 0
761
+ })
762
+ }),
763
+ hasUpperValue(valueUpper) ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ThumbWrapper, {
764
+ hasTooltip: hideTextInput,
765
+ className: upperThumbWrapperClasses,
766
+ label: formatLabel(valueUpper, void 0),
767
+ align: "top",
768
+ ...upperThumbWrapperProps,
769
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
770
+ className: upperThumbClasses,
771
+ role: "slider",
772
+ tabIndex: readOnly || disabled ? void 0 : 0,
773
+ "aria-valuemax": max,
774
+ "aria-valuemin": value,
775
+ "aria-valuenow": valueUpper,
776
+ "aria-label": ariaLabelInputUpper,
777
+ ref: thumbRefUpper,
778
+ onFocus: () => setState({ activeHandle: HandlePosition.UPPER }),
779
+ children: !isRtl ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_SliderHandles.UpperHandle, { "aria-label": ariaLabelInputUpper }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_SliderHandles.UpperHandleFocus, { "aria-label": ariaLabelInputUpper })] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_SliderHandles.LowerHandle, { "aria-label": ariaLabelInput }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_SliderHandles.LowerHandleFocus, { "aria-label": ariaLabelInput })] })
780
+ })
781
+ }) : null,
782
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
783
+ className: `${prefix}--slider__track`,
784
+ ref: (node) => {
785
+ trackRef.current = node;
786
+ }
787
+ }),
788
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
789
+ className: `${prefix}--slider__filled-track`,
790
+ ref: filledTrackRef
791
+ })
792
+ ]
793
+ }),
794
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Text.Text, {
795
+ className: `${prefix}--slider__range-label`,
796
+ children: formatLabel(max, maxLabel)
797
+ }),
798
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
799
+ className: upperInputWrapperClasses,
800
+ children: [
801
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
802
+ type: hideTextInput ? "hidden" : inputType,
803
+ id: `${id}-${twoHandles ? "upper-" : ""}input-for-slider`,
804
+ name: twoHandles ? nameUpper : name,
805
+ className: upperInputClasses,
806
+ value: twoHandles ? valueUpper : value,
807
+ "aria-labelledby": !ariaLabelInput && !twoHandles ? labelId : void 0,
808
+ "aria-label": twoHandles ? ariaLabelInputUpper : ariaLabelInput ? ariaLabelInput : void 0,
809
+ disabled,
810
+ required,
811
+ min,
812
+ max,
813
+ step,
814
+ onChange: onChangeInput,
815
+ onBlur: onBlurInput,
816
+ onKeyDown: onInputKeyDown,
817
+ onKeyUp: props.onInputKeyUp,
818
+ "data-invalid": (twoHandles ? normalizedUpperProps.invalid : normalizedProps.invalid) ? true : null,
819
+ "data-handle-position": twoHandles ? HandlePosition.UPPER : null,
820
+ "aria-invalid": (twoHandles ? normalizedUpperProps.invalid : normalizedProps.invalid) ? true : void 0,
821
+ readOnly
822
+ }),
823
+ (twoHandles ? normalizedUpperProps.invalid : normalizedProps.invalid) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_carbon_icons_react.WarningFilled, { className: `${prefix}--slider__invalid-icon` }),
824
+ showWarningUpper && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_carbon_icons_react.WarningAltFilled, { className: `${prefix}--slider__invalid-icon ${prefix}--slider__invalid-icon--warning` })
825
+ ]
826
+ })
827
+ ]
828
+ }),
829
+ (normalizedProps.invalid || normalizedUpperProps.invalid) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Text.Text, {
830
+ as: "div",
831
+ className: (0, classnames.default)(`${prefix}--slider__validation-msg`, `${prefix}--slider__validation-msg--invalid`, `${prefix}--form-requirement`),
832
+ children: invalidText
833
+ }),
834
+ (normalizedProps.warn || normalizedUpperProps.warn) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Text.Text, {
835
+ as: "div",
836
+ className: (0, classnames.default)(`${prefix}--slider__validation-msg`, `${prefix}--form-requirement`),
837
+ children: warnText
838
+ }),
839
+ correctedValue && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Text.Text, {
840
+ as: "div",
841
+ role: "alert",
842
+ className: (0, classnames.default)(`${prefix}--slider__status-msg`, `${prefix}--form-requirement`),
843
+ children: t(translationIds["carbon.slider.auto-correct-announcement"], { correctedValue })
844
+ })
845
+ ]
846
+ });
1195
847
  };
1196
848
  Slider.propTypes = {
1197
- /**
1198
- * The `ariaLabel` for the `<input>`.
1199
- */
1200
- ariaLabelInput: PropTypes.string,
1201
- /**
1202
- * The child nodes.
1203
- */
1204
- children: PropTypes.node,
1205
- /**
1206
- * The CSS class name for the slider.
1207
- */
1208
- className: PropTypes.string,
1209
- /**
1210
- * `true` to disable this slider.
1211
- */
1212
- disabled: PropTypes.bool,
1213
- /**
1214
- * The callback to format the label associated with the minimum/maximum value.
1215
- */
1216
- formatLabel: PropTypes.func,
1217
- /**
1218
- * `true` to hide the number input box.
1219
- */
1220
- hideTextInput: PropTypes.bool,
1221
- /**
1222
- * The ID of the `<input>`.
1223
- */
1224
- id: PropTypes.string,
1225
- /**
1226
- * The `type` attribute of the `<input>`.
1227
- */
1228
- inputType: PropTypes.string,
1229
- /**
1230
- * `Specify whether the Slider is currently invalid
1231
- */
1232
- invalid: PropTypes.bool,
1233
- /**
1234
- * Provide the text that is displayed when the Slider is in an invalid state
1235
- */
1236
- invalidText: PropTypes.node,
1237
- /**
1238
- * The label for the slider.
1239
- */
1240
- labelText: PropTypes.node,
1241
- /**
1242
- * Specify whether you want the underlying label to be visually hidden
1243
- */
1244
- hideLabel: PropTypes.bool,
1245
- /**
1246
- * `true` to use the light version.
1247
- */
1248
- light: deprecate.deprecate(PropTypes.bool, 'The `light` prop for `Slider` is no longer needed and has ' + 'been deprecated in v11 in favor of the new `Layer` component. It will be moved in the next major release.'),
1249
- /**
1250
- * The maximum value.
1251
- */
1252
- max: PropTypes.number.isRequired,
1253
- /**
1254
- * The label associated with the maximum value.
1255
- */
1256
- maxLabel: PropTypes.string,
1257
- /**
1258
- * The minimum value.
1259
- */
1260
- min: PropTypes.number.isRequired,
1261
- /**
1262
- * The label associated with the minimum value.
1263
- */
1264
- minLabel: PropTypes.string,
1265
- /**
1266
- * The `name` attribute of the `<input>`.
1267
- */
1268
- name: PropTypes.string,
1269
- /**
1270
- * Provide an optional function to be called when the input element
1271
- * loses focus
1272
- */
1273
- onBlur: PropTypes.func,
1274
- /**
1275
- * The callback to get notified of change in value.
1276
- */
1277
- onChange: PropTypes.func,
1278
- /**
1279
- * Provide an optional function to be called when a key is pressed in the number input.
1280
- */
1281
- onInputKeyUp: PropTypes.func,
1282
- /**
1283
- * The callback to get notified of value on handle release.
1284
- */
1285
- onRelease: PropTypes.func,
1286
- /**
1287
- * Whether the slider should be read-only
1288
- */
1289
- readOnly: PropTypes.bool,
1290
- /**
1291
- * `true` to specify if the control is required.
1292
- */
1293
- required: PropTypes.bool,
1294
- /**
1295
- * A value determining how much the value should increase/decrease by moving the thumb by mouse. If a value other than 1 is provided and the input is *not* hidden, the new step requirement should be added to a visible label. Values outside the `step` increment will be considered invalid.
1296
- */
1297
- step: PropTypes.number,
1298
- /**
1299
- * A value determining how much the value should increase/decrease by Shift+arrow keys,
1300
- * which will be `(max - min) / stepMultiplier`.
1301
- */
1302
- stepMultiplier: PropTypes.number,
1303
- /**
1304
- * Supply a method to translate internal strings with your i18n tool of
1305
- * choice. Translation keys are available on the `translationIds` field for
1306
- * this component.
1307
- */
1308
- translateWithId: PropTypes.func,
1309
- /**
1310
- * The `ariaLabel` for the upper bound `<input>` when there are two handles.
1311
- */
1312
- unstable_ariaLabelInputUpper: PropTypes.string,
1313
- /**
1314
- * The `name` attribute of the upper bound `<input>` when there are two handles.
1315
- */
1316
- unstable_nameUpper: PropTypes.string,
1317
- /**
1318
- * The upper bound when there are two handles.
1319
- */
1320
- unstable_valueUpper: PropTypes.number,
1321
- /**
1322
- * The value of the slider. When there are two handles, value is the lower
1323
- * bound.
1324
- */
1325
- value: PropTypes.number.isRequired,
1326
- /**
1327
- * `Specify whether the Slider is in a warn state
1328
- */
1329
- warn: PropTypes.bool,
1330
- /**
1331
- * Provide the text that is displayed when the Slider is in a warn state
1332
- */
1333
- warnText: PropTypes.node
849
+ ariaLabelInput: prop_types.default.string,
850
+ children: prop_types.default.node,
851
+ className: prop_types.default.string,
852
+ disabled: prop_types.default.bool,
853
+ formatLabel: prop_types.default.func,
854
+ hideTextInput: prop_types.default.bool,
855
+ id: prop_types.default.string,
856
+ inputType: prop_types.default.string,
857
+ invalid: prop_types.default.bool,
858
+ invalidText: prop_types.default.node,
859
+ labelText: prop_types.default.node,
860
+ hideLabel: prop_types.default.bool,
861
+ light: require_deprecate.deprecate(prop_types.default.bool, "The `light` prop for `Slider` is no longer needed and has been deprecated in v11 in favor of the new `Layer` component. It will be moved in the next major release."),
862
+ max: prop_types.default.number.isRequired,
863
+ maxLabel: prop_types.default.string,
864
+ min: prop_types.default.number.isRequired,
865
+ minLabel: prop_types.default.string,
866
+ name: prop_types.default.string,
867
+ onBlur: prop_types.default.func,
868
+ onChange: prop_types.default.func,
869
+ onInputKeyUp: prop_types.default.func,
870
+ onRelease: prop_types.default.func,
871
+ readOnly: prop_types.default.bool,
872
+ required: prop_types.default.bool,
873
+ step: prop_types.default.number,
874
+ stepMultiplier: prop_types.default.number,
875
+ translateWithId: prop_types.default.func,
876
+ unstable_ariaLabelInputUpper: prop_types.default.string,
877
+ unstable_nameUpper: prop_types.default.string,
878
+ unstable_valueUpper: prop_types.default.number,
879
+ value: prop_types.default.number.isRequired,
880
+ warn: prop_types.default.bool,
881
+ warnText: prop_types.default.node
1334
882
  };
1335
883
 
1336
- exports.default = Slider;
884
+ //#endregion
885
+ exports.default = Slider;