@carbon/react 1.102.0-rc.0 → 1.103.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 (172) hide show
  1. package/.playwright/INTERNAL_AVT_REPORT_DO_NOT_USE.json +976 -976
  2. package/es/components/Breadcrumb/BreadcrumbItem.js +1 -1
  3. package/es/components/Button/Button.Skeleton.js +2 -1
  4. package/es/components/Button/Button.d.ts +4 -4
  5. package/es/components/Button/Button.js +4 -4
  6. package/es/components/Button/index.js +1 -1
  7. package/es/components/ButtonSet/ButtonSet.js +1 -1
  8. package/es/components/Checkbox/index.js +1 -1
  9. package/es/components/CheckboxGroup/CheckboxGroup.d.ts +1 -1
  10. package/es/components/CheckboxGroup/CheckboxGroup.js +2 -2
  11. package/es/components/ComboBox/ComboBox.js +3 -4
  12. package/es/components/ComposedModal/ComposedModal.js +0 -3
  13. package/es/components/ComposedModal/ComposedModalPresence.d.ts +9 -1
  14. package/es/components/ComposedModal/ComposedModalPresence.js +14 -1
  15. package/es/components/ComposedModal/index.d.ts +1 -1
  16. package/es/components/ContainedList/index.js +1 -1
  17. package/es/components/ContentSwitcher/ContentSwitcher.js +3 -2
  18. package/es/components/DataTable/TableExpandRow.js +2 -2
  19. package/es/components/DataTable/TableHeader.js +1 -1
  20. package/es/components/DataTable/TableRow.js +1 -1
  21. package/es/components/DataTable/TableToolbarMenu.js +1 -1
  22. package/es/components/DataTable/tools/normalize.js +2 -1
  23. package/es/components/DatePicker/DatePicker.Skeleton.d.ts +8 -5
  24. package/es/components/DatePicker/DatePicker.Skeleton.js +2 -2
  25. package/es/components/DatePicker/DatePicker.js +3 -2
  26. package/es/components/DatePicker/index.js +1 -1
  27. package/es/components/DatePickerInput/DatePickerInput.js +1 -1
  28. package/es/components/Dialog/Dialog.js +1 -1
  29. package/es/components/Dropdown/Dropdown.js +1 -3
  30. package/es/components/Dropdown/index.js +1 -1
  31. package/es/components/ExpandableSearch/ExpandableSearch.js +1 -1
  32. package/es/components/FeatureFlags/index.d.ts +8 -18
  33. package/es/components/FeatureFlags/index.js +23 -103
  34. package/es/components/FileUploader/FileUploader.Skeleton.js +1 -1
  35. package/es/components/FileUploader/FileUploaderButton.d.ts +1 -1
  36. package/es/components/FileUploader/FileUploaderButton.js +3 -7
  37. package/es/components/Icon/Icon.Skeleton.js +1 -1
  38. package/es/components/IconIndicator/index.js +1 -1
  39. package/es/components/Menu/MenuItem.js +1 -1
  40. package/es/components/Modal/ModalPresence.d.ts +9 -1
  41. package/es/components/Modal/ModalPresence.js +14 -1
  42. package/es/components/Modal/index.d.ts +2 -2
  43. package/es/components/MultiSelect/MultiSelect.js +9 -10
  44. package/es/components/Notification/Notification.js +1 -1
  45. package/es/components/NumberInput/NumberInput.js +15 -13
  46. package/es/components/OverflowMenu/OverflowMenu.d.ts +1 -1
  47. package/es/components/OverflowMenu/OverflowMenu.js +3 -5
  48. package/es/components/OverflowMenuV2/index.js +1 -1
  49. package/es/components/PageHeader/PageHeader.js +2 -23
  50. package/es/components/Pagination/Pagination.Skeleton.js +1 -1
  51. package/es/components/Pagination/Pagination.d.ts +4 -0
  52. package/es/components/Pagination/Pagination.js +6 -1
  53. package/es/components/Pagination/experimental/Pagination.js +12 -1
  54. package/es/components/Popover/index.js +1 -1
  55. package/es/components/ProgressIndicator/ProgressIndicator.js +3 -3
  56. package/es/components/RadioButton/RadioButton.Skeleton.js +1 -1
  57. package/es/components/Search/index.js +1 -1
  58. package/es/components/Select/index.js +1 -1
  59. package/es/components/ShapeIndicator/index.js +1 -1
  60. package/es/components/Slider/Slider.d.ts +1 -1
  61. package/es/components/Slider/Slider.js +230 -255
  62. package/es/components/Slider/SliderHandles.js +65 -53
  63. package/es/components/Switch/IconSwitch.js +1 -1
  64. package/es/components/Tabs/Tabs.js +2 -6
  65. package/es/components/Tag/Tag.Skeleton.js +1 -1
  66. package/es/components/TextArea/TextArea.js +1 -1
  67. package/es/components/TextArea/index.js +1 -1
  68. package/es/components/TextInput/index.js +1 -1
  69. package/es/components/Tile/Tile.js +1 -1
  70. package/es/components/TileGroup/TileGroup.d.ts +1 -1
  71. package/es/components/TileGroup/TileGroup.js +2 -1
  72. package/es/components/Toggle/Toggle.Skeleton.js +1 -1
  73. package/es/components/Toggletip/index.js +1 -1
  74. package/es/components/UIShell/HeaderMenu.js +1 -1
  75. package/es/components/UIShell/HeaderPanel.js +3 -2
  76. package/es/components/UIShell/SideNav.d.ts +1 -4
  77. package/es/components/UIShell/SideNav.js +10 -25
  78. package/es/components/UIShell/SideNavContext.d.ts +17 -0
  79. package/es/components/UIShell/SideNavContext.js +24 -0
  80. package/es/components/UIShell/SideNavItems.d.ts +1 -1
  81. package/es/components/UIShell/SideNavItems.js +12 -16
  82. package/es/components/UIShell/SideNavLink.js +8 -4
  83. package/es/components/UIShell/SideNavMenu.js +7 -5
  84. package/es/components/UIShell/Switcher.js +5 -4
  85. package/es/index.js +30 -30
  86. package/es/internal/useNoInteractiveChildren.js +25 -30
  87. package/es/internal/useOverflowItems.d.ts +1 -5
  88. package/es/internal/useOverflowItems.js +6 -27
  89. package/es/internal/usePresence.d.ts +1 -1
  90. package/es/internal/usePresence.js +14 -17
  91. package/lib/components/Button/Button.Skeleton.js +2 -1
  92. package/lib/components/Button/Button.d.ts +4 -4
  93. package/lib/components/Button/Button.js +4 -4
  94. package/lib/components/Button/index.js +1 -1
  95. package/lib/components/ButtonSet/ButtonSet.js +1 -1
  96. package/lib/components/Checkbox/index.js +1 -1
  97. package/lib/components/CheckboxGroup/CheckboxGroup.d.ts +1 -1
  98. package/lib/components/CheckboxGroup/CheckboxGroup.js +1 -1
  99. package/lib/components/ComboBox/ComboBox.js +3 -4
  100. package/lib/components/ComposedModal/ComposedModal.js +0 -3
  101. package/lib/components/ComposedModal/ComposedModalPresence.d.ts +9 -1
  102. package/lib/components/ComposedModal/ComposedModalPresence.js +14 -0
  103. package/lib/components/ComposedModal/index.d.ts +1 -1
  104. package/lib/components/ContainedList/index.js +0 -3
  105. package/lib/components/ContentSwitcher/ContentSwitcher.js +2 -1
  106. package/lib/components/DataTable/TableExpandRow.js +1 -1
  107. package/lib/components/DataTable/TableToolbarMenu.js +1 -1
  108. package/lib/components/DataTable/tools/normalize.js +2 -1
  109. package/lib/components/DatePicker/DatePicker.Skeleton.d.ts +8 -5
  110. package/lib/components/DatePicker/DatePicker.Skeleton.js +2 -2
  111. package/lib/components/DatePicker/DatePicker.js +3 -2
  112. package/lib/components/DatePicker/index.js +1 -1
  113. package/lib/components/Dropdown/Dropdown.js +1 -3
  114. package/lib/components/Dropdown/index.js +1 -1
  115. package/lib/components/FeatureFlags/index.d.ts +8 -18
  116. package/lib/components/FeatureFlags/index.js +21 -102
  117. package/lib/components/FileUploader/FileUploader.Skeleton.js +1 -1
  118. package/lib/components/FileUploader/FileUploaderButton.d.ts +1 -1
  119. package/lib/components/FileUploader/FileUploaderButton.js +2 -6
  120. package/lib/components/Icon/Icon.Skeleton.js +0 -3
  121. package/lib/components/IconIndicator/index.js +0 -3
  122. package/lib/components/Modal/ModalPresence.d.ts +9 -1
  123. package/lib/components/Modal/ModalPresence.js +14 -0
  124. package/lib/components/Modal/index.d.ts +2 -2
  125. package/lib/components/MultiSelect/MultiSelect.js +8 -9
  126. package/lib/components/NumberInput/NumberInput.js +14 -12
  127. package/lib/components/OverflowMenu/OverflowMenu.d.ts +1 -1
  128. package/lib/components/OverflowMenu/OverflowMenu.js +2 -7
  129. package/lib/components/OverflowMenuV2/index.js +1 -1
  130. package/lib/components/PageHeader/PageHeader.js +2 -23
  131. package/lib/components/Pagination/Pagination.Skeleton.js +0 -3
  132. package/lib/components/Pagination/Pagination.d.ts +4 -0
  133. package/lib/components/Pagination/Pagination.js +6 -1
  134. package/lib/components/Pagination/experimental/Pagination.js +12 -1
  135. package/lib/components/ProgressIndicator/ProgressIndicator.js +3 -3
  136. package/lib/components/RadioButton/RadioButton.Skeleton.js +0 -3
  137. package/lib/components/Search/index.js +1 -1
  138. package/lib/components/Select/index.js +1 -1
  139. package/lib/components/ShapeIndicator/index.js +0 -3
  140. package/lib/components/Slider/Slider.d.ts +1 -1
  141. package/lib/components/Slider/Slider.js +229 -254
  142. package/lib/components/Slider/SliderHandles.js +64 -52
  143. package/lib/components/Tabs/Tabs.js +1 -5
  144. package/lib/components/Tag/Tag.Skeleton.js +0 -3
  145. package/lib/components/TextArea/index.js +1 -1
  146. package/lib/components/TextInput/index.js +1 -1
  147. package/lib/components/TileGroup/TileGroup.d.ts +1 -1
  148. package/lib/components/TileGroup/TileGroup.js +2 -1
  149. package/lib/components/Toggle/Toggle.Skeleton.js +0 -3
  150. package/lib/components/Toggletip/index.js +0 -3
  151. package/lib/components/UIShell/HeaderPanel.js +2 -1
  152. package/lib/components/UIShell/SideNav.d.ts +1 -4
  153. package/lib/components/UIShell/SideNav.js +8 -24
  154. package/lib/components/UIShell/SideNavContext.d.ts +17 -0
  155. package/lib/components/UIShell/SideNavContext.js +27 -0
  156. package/lib/components/UIShell/SideNavItems.d.ts +1 -1
  157. package/lib/components/UIShell/SideNavItems.js +11 -15
  158. package/lib/components/UIShell/SideNavLink.js +7 -3
  159. package/lib/components/UIShell/SideNavMenu.js +8 -6
  160. package/lib/components/UIShell/Switcher.js +4 -3
  161. package/lib/index.js +102 -100
  162. package/lib/internal/useNoInteractiveChildren.js +25 -30
  163. package/lib/internal/useOverflowItems.d.ts +1 -5
  164. package/lib/internal/useOverflowItems.js +6 -27
  165. package/lib/internal/usePresence.d.ts +1 -1
  166. package/lib/internal/usePresence.js +13 -16
  167. package/package.json +8 -8
  168. package/telemetry.yml +2 -1
  169. package/es/components/UIShell/_utils.d.ts +0 -7
  170. package/es/components/UIShell/_utils.js +0 -10
  171. package/lib/components/UIShell/_utils.d.ts +0 -7
  172. package/lib/components/UIShell/_utils.js +0 -12
@@ -6,7 +6,7 @@
6
6
  */
7
7
 
8
8
  import Select from './Select.js';
9
- export { default as SelectSkeleton } from './Select.Skeleton.js';
9
+ export { SelectSkeleton } from './Select.Skeleton.js';
10
10
 
11
11
 
12
12
 
@@ -90,4 +90,4 @@ ShapeIndicator.propTypes = {
90
90
  textSize: PropTypes.oneOf([12, 14])
91
91
  };
92
92
 
93
- export { ShapeIndicator, ShapeIndicatorKinds, ShapeIndicator as default };
93
+ export { ShapeIndicator, ShapeIndicatorKinds };
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2016, 2025
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.
@@ -11,7 +11,7 @@ import PropTypes from 'prop-types';
11
11
  import cx from 'classnames';
12
12
  import { Enter, ArrowDown, ArrowLeft, ArrowUp, ArrowRight } from '../../internal/keyboard/keys.js';
13
13
  import { matches } from '../../internal/keyboard/match.js';
14
- import { PrefixContext } from '../../internal/usePrefix.js';
14
+ import { usePrefix } from '../../internal/usePrefix.js';
15
15
  import { deprecate } from '../../prop-types/deprecate.js';
16
16
  import { WarningFilled, WarningAltFilled } from '@carbon/icons-react';
17
17
  import { Text } from '../Text/Text.js';
@@ -21,6 +21,7 @@ import { Tooltip } from '../Tooltip/Tooltip.js';
21
21
  import { LowerHandle, LowerHandleFocus, UpperHandle, UpperHandleFocus } from './SliderHandles.js';
22
22
  import { clamp } from '../../internal/clamp.js';
23
23
  import { useNormalizedInputProps } from '../../internal/useNormalizedInputProps.js';
24
+ import { useId } from '../../internal/useId.js';
24
25
  import { throttle } from '../../node_modules/es-toolkit/dist/compat/function/throttle.js';
25
26
 
26
27
  const ThumbWrapper = ({
@@ -58,6 +59,7 @@ const defaultTranslateWithId = (messageId, args) => {
58
59
  const defaultFormatLabel = (value, label) => {
59
60
  return `${value}${label ?? ''}`;
60
61
  };
62
+ const hasUpperValue = valueUpper => typeof valueUpper !== 'undefined';
61
63
 
62
64
  // TODO: Assuming a 16ms throttle corresponds to 60 FPS, should it be halved,
63
65
  // since many systems can handle 120 FPS? If it doesn't correspond to 60 FPS,
@@ -74,7 +76,6 @@ var HandlePosition = /*#__PURE__*/function (HandlePosition) {
74
76
  return HandlePosition;
75
77
  }(HandlePosition || {}); // TODO: Delete this type and directory type the properties in the function.
76
78
  const Slider = props => {
77
- var _Fragment, _Fragment2, _Fragment3, _Fragment4;
78
79
  // TODO: Move destructured `props` from the IIFE to here.
79
80
 
80
81
  const initialState = {
@@ -111,14 +112,9 @@ const Slider = props => {
111
112
  const filledTrackRef = useRef(null);
112
113
  const elementRef = useRef(null);
113
114
  const trackRef = useRef(null);
114
- const inputIdRef = useRef('');
115
-
116
- // TODO: Delete this function and set its return value as the value of
117
- // `twoHandles`.
118
- const hasTwoHandles = () => {
119
- return typeof state.valueUpper !== 'undefined';
120
- };
121
- const twoHandles = hasTwoHandles();
115
+ const generatedId = useId();
116
+ const prefix = usePrefix();
117
+ const twoHandles = hasUpperValue(state.valueUpper);
122
118
 
123
119
  /**
124
120
  * Sets up initial slider position and value in response to component mount.
@@ -126,7 +122,7 @@ const Slider = props => {
126
122
  useEffect(() => {
127
123
  if (elementRef.current) {
128
124
  const isRtl = document?.dir === 'rtl';
129
- if (hasTwoHandles()) {
125
+ if (twoHandles) {
130
126
  const {
131
127
  value,
132
128
  left
@@ -178,7 +174,7 @@ const Slider = props => {
178
174
 
179
175
  // Fire onChange event handler if present, if there's a usable value, and
180
176
  // if the value is different from the last one
181
- if (hasTwoHandles()) {
177
+ if (twoHandles) {
182
178
  if (filledTrackRef.current) {
183
179
  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
180
  }
@@ -271,8 +267,7 @@ const Slider = props => {
271
267
  * @returns The value rounded to the precision determined by the step.
272
268
  */
273
269
  const nearestStepValue = (value = 0) => {
274
- // TODO: Use a nullish coalescing operator.
275
- const decimals = (props.step?.toString().split('.')[1] || '').length;
270
+ const decimals = (props.step?.toString().split('.')[1] ?? '').length;
276
271
  return Number(value.toFixed(decimals));
277
272
  };
278
273
  const handleDrag = event => {
@@ -312,7 +307,7 @@ const Slider = props => {
312
307
  });
313
308
  const clientX = getClientXFromEvent(evt.nativeEvent);
314
309
  let activeHandle;
315
- if (hasTwoHandles()) {
310
+ if (twoHandles) {
316
311
  if (evt.target == thumbRef.current) {
317
312
  activeHandle = HandlePosition.LOWER;
318
313
  } else if (evt.target == thumbRefUpper.current) {
@@ -332,7 +327,7 @@ const Slider = props => {
332
327
  const focusOptions = {
333
328
  preventScroll: true
334
329
  };
335
- if (hasTwoHandles()) {
330
+ if (twoHandles) {
336
331
  if (thumbRef.current && activeHandle === HandlePosition.LOWER) {
337
332
  thumbRef.current.focus(focusOptions);
338
333
  } else if (thumbRefUpper.current && activeHandle === HandlePosition.UPPER) {
@@ -405,7 +400,7 @@ const Slider = props => {
405
400
  });
406
401
  // If we're set to two handles, negotiate which drag handle is closest to
407
402
  // the users' interaction.
408
- if (hasTwoHandles() && activeHandle) {
403
+ if (twoHandles && activeHandle) {
409
404
  setValueLeftForHandle(activeHandle, {
410
405
  value: nearestStepValue(value),
411
406
  left
@@ -463,7 +458,7 @@ const Slider = props => {
463
458
  if (evt.shiftKey) {
464
459
  delta *= stepMultiplier;
465
460
  }
466
- if (hasTwoHandles() && state.activeHandle) {
461
+ if (twoHandles && state.activeHandle) {
467
462
  const currentValue = state.activeHandle === HandlePosition.LOWER ? state.value : state.valueUpper;
468
463
  const {
469
464
  value,
@@ -517,7 +512,7 @@ const Slider = props => {
517
512
  // Avoid calling calcValue for invalid numbers, but still update the state.
518
513
  const activeHandle = evt.target.dataset.handlePosition ?? HandlePosition.LOWER;
519
514
  const targetValue = Number.parseFloat(evt.target.value);
520
- if (hasTwoHandles()) {
515
+ if (twoHandles) {
521
516
  if (isNaN(targetValue)) {
522
517
  setValueForHandle(activeHandle, evt.target.value);
523
518
  } else if (isValidValueForPosition({
@@ -933,13 +928,7 @@ const Slider = props => {
933
928
  unstable_ariaLabelInputUpper: ariaLabelInputUpper,
934
929
  className,
935
930
  hideTextInput = false,
936
- id = inputIdRef.current = inputIdRef.current ||
937
- // TODO:
938
- // 1. Why isn't `inputId` just set to this value instead of an empty
939
- // string?
940
- // 2. Why this value instead of something else, like
941
- // `crypto.randomUUID()` or `useId()`?
942
- `__carbon-slider_${Math.random().toString(36).substr(2)}`,
931
+ id: idProp,
943
932
  min,
944
933
  minLabel,
945
934
  max,
@@ -948,9 +937,6 @@ const Slider = props => {
948
937
  labelText,
949
938
  hideLabel,
950
939
  step = 1,
951
- // TODO: Other properties are deleted below. Why isn't this one?
952
- // eslint-disable-next-line @typescript-eslint/no-unused-vars -- https://github.com/carbon-design-system/carbon/issues/20452
953
- stepMultiplier: _stepMultiplier,
954
940
  inputType = 'number',
955
941
  invalidText,
956
942
  required,
@@ -964,6 +950,7 @@ const Slider = props => {
964
950
  translateWithId: t = defaultTranslateWithId,
965
951
  ...other
966
952
  } = props;
953
+ const id = idProp ?? generatedId;
967
954
  const {
968
955
  value,
969
956
  valueUpper,
@@ -987,232 +974,220 @@ const Slider = props => {
987
974
  invalid: !isValidUpper,
988
975
  warn
989
976
  });
990
-
991
- // TODO: Delete this IIFE. It was added to maintain whitespace and to make it clear
992
- // what exactly has changed.
993
- return (() => {
994
- delete other.onRelease;
995
- delete other.invalid;
996
- delete other.unstable_valueUpper;
997
- const showWarning = normalizedProps.warn ||
998
- // TODO: https://github.com/carbon-design-system/carbon/issues/18991#issuecomment-2795709637
999
- // eslint-disable-next-line valid-typeof , no-constant-binary-expression -- https://github.com/carbon-design-system/carbon/issues/20452
1000
- typeof correctedValue !== null && correctedPosition === HandlePosition.LOWER && isValid;
1001
- const showWarningUpper = normalizedUpperProps.warn ||
1002
- // TODO: https://github.com/carbon-design-system/carbon/issues/18991#issuecomment-2795709637
1003
- // eslint-disable-next-line valid-typeof, no-constant-binary-expression -- https://github.com/carbon-design-system/carbon/issues/20452
1004
- typeof correctedValue !== null && correctedPosition === (twoHandles ? HandlePosition.UPPER : HandlePosition.LOWER) && (twoHandles ? isValidUpper : isValid);
1005
- return /*#__PURE__*/React.createElement(PrefixContext.Consumer, null, prefix => {
1006
- const labelId = `${id}-label`;
1007
- const labelClasses = cx(`${prefix}--label`, {
1008
- [`${prefix}--visually-hidden`]: hideLabel,
1009
- [`${prefix}--label--disabled`]: disabled
1010
- });
1011
- const containerClasses = cx(`${prefix}--slider-container`, {
1012
- [`${prefix}--slider-container--two-handles`]: twoHandles,
1013
- [`${prefix}--slider-container--disabled`]: disabled,
1014
- [`${prefix}--slider-container--readonly`]: readOnly,
1015
- [`${prefix}--slider-container--rtl`]: isRtl
1016
- });
1017
- const sliderClasses = cx(`${prefix}--slider`, {
1018
- [`${prefix}--slider--disabled`]: disabled,
1019
- [`${prefix}--slider--readonly`]: readOnly
1020
- });
1021
- const fixedInputClasses = [`${prefix}--text-input`, `${prefix}--slider-text-input`];
1022
- const conditionalInputClasses = {
1023
- [`${prefix}--text-input--light`]: light
1024
- };
1025
- const lowerInputClasses = cx([...fixedInputClasses, `${prefix}--slider-text-input--lower`, conditionalInputClasses, {
1026
- [`${prefix}--text-input--invalid`]: normalizedProps.invalid,
1027
- [`${prefix}--slider-text-input--warn`]: showWarning
1028
- }]);
1029
- const upperInputClasses = cx([...fixedInputClasses, `${prefix}--slider-text-input--upper`, conditionalInputClasses, {
1030
- [`${prefix}--text-input--invalid`]: twoHandles ? normalizedUpperProps.invalid : normalizedProps.invalid,
1031
- [`${prefix}--slider-text-input--warn`]: showWarningUpper
1032
- }]);
1033
- const lowerInputWrapperClasses = cx([`${prefix}--text-input-wrapper`, `${prefix}--slider-text-input-wrapper`, `${prefix}--slider-text-input-wrapper--lower`, {
1034
- [`${prefix}--text-input-wrapper--readonly`]: readOnly,
1035
- [`${prefix}--slider-text-input-wrapper--hidden`]: hideTextInput
1036
- }]);
1037
- const upperInputWrapperClasses = cx([`${prefix}--text-input-wrapper`, `${prefix}--slider-text-input-wrapper`, `${prefix}--slider-text-input-wrapper--upper`, {
1038
- [`${prefix}--text-input-wrapper--readonly`]: readOnly,
1039
- [`${prefix}--slider-text-input-wrapper--hidden`]: hideTextInput
1040
- }]);
1041
- const lowerThumbClasses = cx(`${prefix}--slider__thumb`, {
1042
- [`${prefix}--slider__thumb--lower`]: twoHandles
1043
- });
1044
- const upperThumbClasses = cx(`${prefix}--slider__thumb`, {
1045
- [`${prefix}--slider__thumb--upper`]: twoHandles
1046
- });
1047
- const lowerThumbWrapperClasses = cx([`${prefix}--icon-tooltip`, `${prefix}--slider__thumb-wrapper`, {
1048
- [`${prefix}--slider__thumb-wrapper--lower`]: twoHandles
1049
- }]);
1050
- const upperThumbWrapperClasses = cx([`${prefix}--icon-tooltip`, `${prefix}--slider__thumb-wrapper`, {
1051
- [`${prefix}--slider__thumb-wrapper--upper`]: twoHandles
1052
- }]);
1053
- const lowerThumbWrapperProps = {
1054
- style: {
1055
- insetInlineStart: `${state.left}%`
1056
- }
1057
- };
1058
- const upperThumbWrapperProps = {
1059
- style: {
1060
- insetInlineStart: `${state.leftUpper}%`
1061
- }
1062
- };
1063
- return /*#__PURE__*/React.createElement("div", {
1064
- className: cx(`${prefix}--form-item`, className)
1065
- }, /*#__PURE__*/React.createElement(Text, {
1066
- as: "label",
1067
- htmlFor: twoHandles ? undefined : id,
1068
- className: labelClasses,
1069
- id: labelId
1070
- }, labelText), /*#__PURE__*/React.createElement("div", {
1071
- className: containerClasses
1072
- }, twoHandles ? /*#__PURE__*/React.createElement("div", {
1073
- className: lowerInputWrapperClasses
1074
- }, /*#__PURE__*/React.createElement("input", {
1075
- type: hideTextInput ? 'hidden' : inputType,
1076
- id: `${id}-lower-input-for-slider`,
1077
- name: name,
1078
- className: lowerInputClasses,
1079
- value: value,
1080
- "aria-label": ariaLabelInput,
1081
- disabled: disabled,
1082
- required: required,
1083
- min: min,
1084
- max: max,
1085
- step: step,
1086
- onChange: onChangeInput,
1087
- onBlur: onBlurInput,
1088
- onKeyUp: props.onInputKeyUp,
1089
- onKeyDown: onInputKeyDown,
1090
- "data-invalid": normalizedProps.invalid ? true : null,
1091
- "data-handle-position": HandlePosition.LOWER,
1092
- "aria-invalid": normalizedProps.invalid ? true : undefined,
1093
- readOnly: readOnly
1094
- }), normalizedProps.invalid && /*#__PURE__*/React.createElement(WarningFilled, {
1095
- className: `${prefix}--slider__invalid-icon`
1096
- }), showWarning && /*#__PURE__*/React.createElement(WarningAltFilled, {
1097
- className: `${prefix}--slider__invalid-icon ${prefix}--slider__invalid-icon--warning`
1098
- })) : null, /*#__PURE__*/React.createElement(Text, {
1099
- className: `${prefix}--slider__range-label`
1100
- }, formatLabel(min, minLabel)), /*#__PURE__*/React.createElement("div", _extends({
1101
- className: sliderClasses,
1102
- ref: node => {
1103
- elementRef.current = node;
1104
- },
1105
- onMouseDown: onDragStart,
1106
- onTouchStart: onDragStart,
1107
- onKeyDown: onKeyDown,
1108
- role: "presentation",
1109
- tabIndex: -1,
1110
- "data-invalid": (twoHandles ? normalizedProps.invalid || normalizedUpperProps.invalid : normalizedProps.invalid) ? true : null
1111
- }, other), /*#__PURE__*/React.createElement(ThumbWrapper, _extends({
1112
- hasTooltip: hideTextInput,
1113
- className: lowerThumbWrapperClasses,
1114
- label: formatLabel(value, undefined),
1115
- align: "top"
1116
- }, lowerThumbWrapperProps), /*#__PURE__*/React.createElement("div", {
1117
- className: lowerThumbClasses,
1118
- role: "slider",
1119
- id: twoHandles ? undefined : id,
1120
- tabIndex: readOnly || disabled ? undefined : 0,
1121
- "aria-valuetext": formatLabel(value, undefined),
1122
- "aria-valuemax": twoHandles ? valueUpper : max,
1123
- "aria-valuemin": min,
1124
- "aria-valuenow": value,
1125
- "aria-labelledby": twoHandles ? undefined : labelId,
1126
- "aria-label": twoHandles ? ariaLabelInput : undefined,
1127
- ref: thumbRef,
1128
- onFocus: () => setState({
1129
- activeHandle: HandlePosition.LOWER
1130
- })
1131
- }, twoHandles && !isRtl ? _Fragment || (_Fragment = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(LowerHandle, {
1132
- "aria-label": ariaLabelInput
1133
- }), /*#__PURE__*/React.createElement(LowerHandleFocus, {
1134
- "aria-label": ariaLabelInput
1135
- }))) : twoHandles && isRtl ? _Fragment2 || (_Fragment2 = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(UpperHandle, {
1136
- "aria-label": ariaLabelInputUpper
1137
- }), /*#__PURE__*/React.createElement(UpperHandleFocus, {
1138
- "aria-label": ariaLabelInputUpper
1139
- }))) : undefined)), twoHandles ? /*#__PURE__*/React.createElement(ThumbWrapper, _extends({
1140
- hasTooltip: hideTextInput,
1141
- className: upperThumbWrapperClasses,
1142
- label: formatLabel(valueUpper ?? 0, undefined),
1143
- align: "top"
1144
- }, upperThumbWrapperProps), /*#__PURE__*/React.createElement("div", {
1145
- className: upperThumbClasses,
1146
- role: "slider",
1147
- tabIndex: readOnly || disabled ? undefined : 0,
1148
- "aria-valuemax": max,
1149
- "aria-valuemin": value,
1150
- "aria-valuenow": valueUpper,
1151
- "aria-label": ariaLabelInputUpper,
1152
- ref: thumbRefUpper,
1153
- onFocus: () => setState({
1154
- activeHandle: HandlePosition.UPPER
1155
- })
1156
- }, twoHandles && !isRtl ? _Fragment3 || (_Fragment3 = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(UpperHandle, {
1157
- "aria-label": ariaLabelInputUpper
1158
- }), /*#__PURE__*/React.createElement(UpperHandleFocus, {
1159
- "aria-label": ariaLabelInputUpper
1160
- }))) : twoHandles && isRtl ? _Fragment4 || (_Fragment4 = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(LowerHandle, {
1161
- "aria-label": ariaLabelInput
1162
- }), /*#__PURE__*/React.createElement(LowerHandleFocus, {
1163
- "aria-label": ariaLabelInput
1164
- }))) : undefined)) : null, /*#__PURE__*/React.createElement("div", {
1165
- className: `${prefix}--slider__track`,
1166
- ref: node => {
1167
- trackRef.current = node;
1168
- }
1169
- }), /*#__PURE__*/React.createElement("div", {
1170
- className: `${prefix}--slider__filled-track`,
1171
- ref: filledTrackRef
1172
- })), /*#__PURE__*/React.createElement(Text, {
1173
- className: `${prefix}--slider__range-label`
1174
- }, formatLabel(max, maxLabel)), /*#__PURE__*/React.createElement("div", {
1175
- className: upperInputWrapperClasses
1176
- }, /*#__PURE__*/React.createElement("input", {
1177
- type: hideTextInput ? 'hidden' : inputType,
1178
- id: `${id}-${twoHandles ? 'upper-' : ''}input-for-slider`,
1179
- name: twoHandles ? nameUpper : name,
1180
- className: upperInputClasses,
1181
- value: twoHandles ? valueUpper : value,
1182
- "aria-labelledby": !ariaLabelInput && !twoHandles ? labelId : undefined,
1183
- "aria-label": twoHandles ? ariaLabelInputUpper : ariaLabelInput ? ariaLabelInput : undefined,
1184
- disabled: disabled,
1185
- required: required,
1186
- min: min,
1187
- max: max,
1188
- step: step,
1189
- onChange: onChangeInput,
1190
- onBlur: onBlurInput,
1191
- onKeyDown: onInputKeyDown,
1192
- onKeyUp: props.onInputKeyUp,
1193
- "data-invalid": (twoHandles ? normalizedUpperProps.invalid : normalizedProps.invalid) ? true : null,
1194
- "data-handle-position": twoHandles ? HandlePosition.UPPER : null,
1195
- "aria-invalid": (twoHandles ? normalizedUpperProps.invalid : normalizedProps.invalid) ? true : undefined,
1196
- readOnly: readOnly
1197
- }), (twoHandles ? normalizedUpperProps.invalid : normalizedProps.invalid) && /*#__PURE__*/React.createElement(WarningFilled, {
1198
- className: `${prefix}--slider__invalid-icon`
1199
- }), showWarningUpper && /*#__PURE__*/React.createElement(WarningAltFilled, {
1200
- className: `${prefix}--slider__invalid-icon ${prefix}--slider__invalid-icon--warning`
1201
- }))), (normalizedProps.invalid || normalizedUpperProps.invalid) && /*#__PURE__*/React.createElement(Text, {
1202
- as: "div",
1203
- className: cx(`${prefix}--slider__validation-msg`, `${prefix}--slider__validation-msg--invalid`, `${prefix}--form-requirement`)
1204
- }, invalidText), (normalizedProps.warn || normalizedUpperProps.warn) && /*#__PURE__*/React.createElement(Text, {
1205
- as: "div",
1206
- className: cx(`${prefix}--slider__validation-msg`, `${prefix}--form-requirement`)
1207
- }, warnText), correctedValue && /*#__PURE__*/React.createElement(Text, {
1208
- as: "div",
1209
- role: "alert",
1210
- className: cx(`${prefix}--slider__status-msg`, `${prefix}--form-requirement`)
1211
- }, t(translationIds['carbon.slider.auto-correct-announcement'], {
1212
- correctedValue
1213
- })));
1214
- });
1215
- })();
977
+ delete other.invalid;
978
+ delete other.onRelease;
979
+ delete other.stepMultiplier;
980
+ delete other.unstable_valueUpper;
981
+ const showWarning = normalizedProps.warn || correctedPosition === HandlePosition.LOWER && isValid;
982
+ const showWarningUpper = normalizedUpperProps.warn || correctedPosition === (twoHandles ? HandlePosition.UPPER : HandlePosition.LOWER) && (twoHandles ? isValidUpper : isValid);
983
+ const labelId = `${id}-label`;
984
+ const labelClasses = cx(`${prefix}--label`, {
985
+ [`${prefix}--visually-hidden`]: hideLabel,
986
+ [`${prefix}--label--disabled`]: disabled
987
+ });
988
+ const containerClasses = cx(`${prefix}--slider-container`, {
989
+ [`${prefix}--slider-container--two-handles`]: twoHandles,
990
+ [`${prefix}--slider-container--disabled`]: disabled,
991
+ [`${prefix}--slider-container--readonly`]: readOnly,
992
+ [`${prefix}--slider-container--rtl`]: isRtl
993
+ });
994
+ const sliderClasses = cx(`${prefix}--slider`, {
995
+ [`${prefix}--slider--disabled`]: disabled,
996
+ [`${prefix}--slider--readonly`]: readOnly
997
+ });
998
+ const fixedInputClasses = [`${prefix}--text-input`, `${prefix}--slider-text-input`];
999
+ const conditionalInputClasses = {
1000
+ [`${prefix}--text-input--light`]: light
1001
+ };
1002
+ const lowerInputClasses = cx([...fixedInputClasses, `${prefix}--slider-text-input--lower`, conditionalInputClasses, {
1003
+ [`${prefix}--text-input--invalid`]: normalizedProps.invalid,
1004
+ [`${prefix}--slider-text-input--warn`]: showWarning
1005
+ }]);
1006
+ const upperInputClasses = cx([...fixedInputClasses, `${prefix}--slider-text-input--upper`, conditionalInputClasses, {
1007
+ [`${prefix}--text-input--invalid`]: twoHandles ? normalizedUpperProps.invalid : normalizedProps.invalid,
1008
+ [`${prefix}--slider-text-input--warn`]: showWarningUpper
1009
+ }]);
1010
+ const lowerInputWrapperClasses = cx([`${prefix}--text-input-wrapper`, `${prefix}--slider-text-input-wrapper`, `${prefix}--slider-text-input-wrapper--lower`, {
1011
+ [`${prefix}--text-input-wrapper--readonly`]: readOnly,
1012
+ [`${prefix}--slider-text-input-wrapper--hidden`]: hideTextInput
1013
+ }]);
1014
+ const upperInputWrapperClasses = cx([`${prefix}--text-input-wrapper`, `${prefix}--slider-text-input-wrapper`, `${prefix}--slider-text-input-wrapper--upper`, {
1015
+ [`${prefix}--text-input-wrapper--readonly`]: readOnly,
1016
+ [`${prefix}--slider-text-input-wrapper--hidden`]: hideTextInput
1017
+ }]);
1018
+ const lowerThumbClasses = cx(`${prefix}--slider__thumb`, {
1019
+ [`${prefix}--slider__thumb--lower`]: twoHandles
1020
+ });
1021
+ const upperThumbClasses = cx(`${prefix}--slider__thumb`, {
1022
+ [`${prefix}--slider__thumb--upper`]: twoHandles
1023
+ });
1024
+ const lowerThumbWrapperClasses = cx([`${prefix}--icon-tooltip`, `${prefix}--slider__thumb-wrapper`, {
1025
+ [`${prefix}--slider__thumb-wrapper--lower`]: twoHandles
1026
+ }]);
1027
+ const upperThumbWrapperClasses = cx([`${prefix}--icon-tooltip`, `${prefix}--slider__thumb-wrapper`, {
1028
+ [`${prefix}--slider__thumb-wrapper--upper`]: twoHandles
1029
+ }]);
1030
+ const lowerThumbWrapperProps = {
1031
+ style: {
1032
+ insetInlineStart: `${state.left}%`
1033
+ }
1034
+ };
1035
+ const upperThumbWrapperProps = {
1036
+ style: {
1037
+ insetInlineStart: `${state.leftUpper}%`
1038
+ }
1039
+ };
1040
+ return /*#__PURE__*/React.createElement("div", {
1041
+ className: cx(`${prefix}--form-item`, className)
1042
+ }, /*#__PURE__*/React.createElement(Text, {
1043
+ as: "label",
1044
+ htmlFor: twoHandles ? undefined : id,
1045
+ className: labelClasses,
1046
+ id: labelId
1047
+ }, labelText), /*#__PURE__*/React.createElement("div", {
1048
+ className: containerClasses
1049
+ }, twoHandles ? /*#__PURE__*/React.createElement("div", {
1050
+ className: lowerInputWrapperClasses
1051
+ }, /*#__PURE__*/React.createElement("input", {
1052
+ type: hideTextInput ? 'hidden' : inputType,
1053
+ id: `${id}-lower-input-for-slider`,
1054
+ name: name,
1055
+ className: lowerInputClasses,
1056
+ value: value,
1057
+ "aria-label": ariaLabelInput,
1058
+ disabled: disabled,
1059
+ required: required,
1060
+ min: min,
1061
+ max: max,
1062
+ step: step,
1063
+ onChange: onChangeInput,
1064
+ onBlur: onBlurInput,
1065
+ onKeyUp: props.onInputKeyUp,
1066
+ onKeyDown: onInputKeyDown,
1067
+ "data-invalid": normalizedProps.invalid ? true : null,
1068
+ "data-handle-position": HandlePosition.LOWER,
1069
+ "aria-invalid": normalizedProps.invalid ? true : undefined,
1070
+ readOnly: readOnly
1071
+ }), normalizedProps.invalid && /*#__PURE__*/React.createElement(WarningFilled, {
1072
+ className: `${prefix}--slider__invalid-icon`
1073
+ }), showWarning && /*#__PURE__*/React.createElement(WarningAltFilled, {
1074
+ className: `${prefix}--slider__invalid-icon ${prefix}--slider__invalid-icon--warning`
1075
+ })) : null, /*#__PURE__*/React.createElement(Text, {
1076
+ className: `${prefix}--slider__range-label`
1077
+ }, formatLabel(min, minLabel)), /*#__PURE__*/React.createElement("div", _extends({
1078
+ className: sliderClasses,
1079
+ ref: node => {
1080
+ elementRef.current = node;
1081
+ },
1082
+ onMouseDown: onDragStart,
1083
+ onTouchStart: onDragStart,
1084
+ onKeyDown: onKeyDown,
1085
+ role: "presentation",
1086
+ tabIndex: -1,
1087
+ "data-invalid": (twoHandles ? normalizedProps.invalid || normalizedUpperProps.invalid : normalizedProps.invalid) ? true : null
1088
+ }, other), /*#__PURE__*/React.createElement(ThumbWrapper, _extends({
1089
+ hasTooltip: hideTextInput,
1090
+ className: lowerThumbWrapperClasses,
1091
+ label: formatLabel(value, undefined),
1092
+ align: "top"
1093
+ }, lowerThumbWrapperProps), /*#__PURE__*/React.createElement("div", {
1094
+ className: lowerThumbClasses,
1095
+ role: "slider",
1096
+ id: twoHandles ? undefined : id,
1097
+ tabIndex: readOnly || disabled ? undefined : 0,
1098
+ "aria-valuetext": formatLabel(value, undefined),
1099
+ "aria-valuemax": twoHandles ? valueUpper : max,
1100
+ "aria-valuemin": min,
1101
+ "aria-valuenow": value,
1102
+ "aria-labelledby": twoHandles ? undefined : labelId,
1103
+ "aria-label": twoHandles ? ariaLabelInput : undefined,
1104
+ ref: thumbRef,
1105
+ onFocus: () => setState({
1106
+ activeHandle: HandlePosition.LOWER
1107
+ })
1108
+ }, twoHandles && !isRtl ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(LowerHandle, {
1109
+ "aria-label": ariaLabelInput
1110
+ }), /*#__PURE__*/React.createElement(LowerHandleFocus, {
1111
+ "aria-label": ariaLabelInput
1112
+ })) : twoHandles && isRtl ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(UpperHandle, {
1113
+ "aria-label": ariaLabelInputUpper
1114
+ }), /*#__PURE__*/React.createElement(UpperHandleFocus, {
1115
+ "aria-label": ariaLabelInputUpper
1116
+ })) : undefined)), hasUpperValue(valueUpper) ? /*#__PURE__*/React.createElement(ThumbWrapper, _extends({
1117
+ hasTooltip: hideTextInput,
1118
+ className: upperThumbWrapperClasses,
1119
+ label: formatLabel(valueUpper, undefined),
1120
+ align: "top"
1121
+ }, upperThumbWrapperProps), /*#__PURE__*/React.createElement("div", {
1122
+ className: upperThumbClasses,
1123
+ role: "slider",
1124
+ tabIndex: readOnly || disabled ? undefined : 0,
1125
+ "aria-valuemax": max,
1126
+ "aria-valuemin": value,
1127
+ "aria-valuenow": valueUpper,
1128
+ "aria-label": ariaLabelInputUpper,
1129
+ ref: thumbRefUpper,
1130
+ onFocus: () => setState({
1131
+ activeHandle: HandlePosition.UPPER
1132
+ })
1133
+ }, !isRtl ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(UpperHandle, {
1134
+ "aria-label": ariaLabelInputUpper
1135
+ }), /*#__PURE__*/React.createElement(UpperHandleFocus, {
1136
+ "aria-label": ariaLabelInputUpper
1137
+ })) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(LowerHandle, {
1138
+ "aria-label": ariaLabelInput
1139
+ }), /*#__PURE__*/React.createElement(LowerHandleFocus, {
1140
+ "aria-label": ariaLabelInput
1141
+ })))) : null, /*#__PURE__*/React.createElement("div", {
1142
+ className: `${prefix}--slider__track`,
1143
+ ref: node => {
1144
+ trackRef.current = node;
1145
+ }
1146
+ }), /*#__PURE__*/React.createElement("div", {
1147
+ className: `${prefix}--slider__filled-track`,
1148
+ ref: filledTrackRef
1149
+ })), /*#__PURE__*/React.createElement(Text, {
1150
+ className: `${prefix}--slider__range-label`
1151
+ }, formatLabel(max, maxLabel)), /*#__PURE__*/React.createElement("div", {
1152
+ className: upperInputWrapperClasses
1153
+ }, /*#__PURE__*/React.createElement("input", {
1154
+ type: hideTextInput ? 'hidden' : inputType,
1155
+ id: `${id}-${twoHandles ? 'upper-' : ''}input-for-slider`,
1156
+ name: twoHandles ? nameUpper : name,
1157
+ className: upperInputClasses,
1158
+ value: twoHandles ? valueUpper : value,
1159
+ "aria-labelledby": !ariaLabelInput && !twoHandles ? labelId : undefined,
1160
+ "aria-label": twoHandles ? ariaLabelInputUpper : ariaLabelInput ? ariaLabelInput : undefined,
1161
+ disabled: disabled,
1162
+ required: required,
1163
+ min: min,
1164
+ max: max,
1165
+ step: step,
1166
+ onChange: onChangeInput,
1167
+ onBlur: onBlurInput,
1168
+ onKeyDown: onInputKeyDown,
1169
+ onKeyUp: props.onInputKeyUp,
1170
+ "data-invalid": (twoHandles ? normalizedUpperProps.invalid : normalizedProps.invalid) ? true : null,
1171
+ "data-handle-position": twoHandles ? HandlePosition.UPPER : null,
1172
+ "aria-invalid": (twoHandles ? normalizedUpperProps.invalid : normalizedProps.invalid) ? true : undefined,
1173
+ readOnly: readOnly
1174
+ }), (twoHandles ? normalizedUpperProps.invalid : normalizedProps.invalid) && /*#__PURE__*/React.createElement(WarningFilled, {
1175
+ className: `${prefix}--slider__invalid-icon`
1176
+ }), showWarningUpper && /*#__PURE__*/React.createElement(WarningAltFilled, {
1177
+ className: `${prefix}--slider__invalid-icon ${prefix}--slider__invalid-icon--warning`
1178
+ }))), (normalizedProps.invalid || normalizedUpperProps.invalid) && /*#__PURE__*/React.createElement(Text, {
1179
+ as: "div",
1180
+ className: cx(`${prefix}--slider__validation-msg`, `${prefix}--slider__validation-msg--invalid`, `${prefix}--form-requirement`)
1181
+ }, invalidText), (normalizedProps.warn || normalizedUpperProps.warn) && /*#__PURE__*/React.createElement(Text, {
1182
+ as: "div",
1183
+ className: cx(`${prefix}--slider__validation-msg`, `${prefix}--form-requirement`)
1184
+ }, warnText), correctedValue && /*#__PURE__*/React.createElement(Text, {
1185
+ as: "div",
1186
+ role: "alert",
1187
+ className: cx(`${prefix}--slider__status-msg`, `${prefix}--form-requirement`)
1188
+ }, t(translationIds['carbon.slider.auto-correct-announcement'], {
1189
+ correctedValue
1190
+ })));
1216
1191
  };
1217
1192
  Slider.propTypes = {
1218
1193
  /**