@carbon/react 1.26.1 → 1.27.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 (108) hide show
  1. package/es/components/Checkbox/Checkbox.d.ts +20 -0
  2. package/es/components/Checkbox/Checkbox.js +58 -4
  3. package/es/components/CheckboxGroup/CheckboxGroup.js +119 -0
  4. package/es/components/ComboBox/ComboBox.js +11 -2
  5. package/es/components/ContentSwitcher/ContentSwitcher.js +9 -4
  6. package/es/components/Copy/Copy.js +1 -1
  7. package/es/components/DataTable/DataTable.js +44 -2
  8. package/es/components/DataTable/Table.js +1 -2
  9. package/es/components/DataTable/TableCell.js +1 -2
  10. package/es/components/DataTable/TableExpandRow.js +1 -2
  11. package/es/components/DataTable/TableExpandedRow.js +1 -2
  12. package/es/components/DataTable/TableHead.js +1 -2
  13. package/es/components/DataTable/TableHeader.js +1 -2
  14. package/es/components/DataTable/TableRow.js +1 -2
  15. package/es/components/DataTable/TableSelectAll.js +1 -2
  16. package/es/components/DataTable/TableSelectRow.js +1 -2
  17. package/es/components/DataTable/TableToolbar.js +2 -3
  18. package/es/components/DataTable/TableToolbarAction.js +1 -2
  19. package/es/components/DataTable/TableToolbarContent.js +1 -2
  20. package/es/components/DataTable/TableToolbarMenu.js +1 -2
  21. package/es/components/DataTable/index.d.ts +29 -0
  22. package/es/components/DataTable/index.js +70 -0
  23. package/es/components/DatePicker/DatePicker.js +25 -3
  24. package/es/components/DatePicker/plugins/fixEventsPlugin.js +15 -1
  25. package/es/components/DatePickerInput/DatePickerInput.js +7 -2
  26. package/es/components/Dropdown/Dropdown.js +16 -4
  27. package/es/components/ErrorBoundary/ErrorBoundary.js +1 -1
  28. package/es/components/FileUploader/FileUploader.js +1 -1
  29. package/es/components/FluidDatePicker/FluidDatePicker.js +9 -2
  30. package/es/components/IconButton/index.js +19 -5
  31. package/es/components/Modal/Modal.js +4 -2
  32. package/es/components/ModalWrapper/ModalWrapper.js +1 -1
  33. package/es/components/MultiSelect/FilterableMultiSelect.js +9 -1
  34. package/es/components/MultiSelect/MultiSelect.js +2 -1
  35. package/es/components/NumberInput/NumberInput.js +10 -2
  36. package/es/components/ProgressBar/ProgressBar.js +3 -0
  37. package/es/components/RadioButtonGroup/RadioButtonGroup.js +2 -1
  38. package/es/components/RadioTile/RadioTile.js +1 -1
  39. package/es/components/Select/Select.d.ts +1 -1
  40. package/es/components/Select/Select.js +10 -1
  41. package/es/components/StructuredList/StructuredList.js +2 -1
  42. package/es/components/Switch/IconSwitch.js +174 -0
  43. package/es/components/Tabs/Tabs.js +29 -17
  44. package/es/components/TextArea/TextArea.js +16 -1
  45. package/es/components/TextInput/ControlledPasswordInput.js +11 -2
  46. package/es/components/TextInput/PasswordInput.js +4 -1
  47. package/es/components/TextInput/index.js +0 -3
  48. package/es/components/TextInput/util.js +15 -2
  49. package/es/components/Tile/Tile.js +6 -4
  50. package/es/components/Toggle/Toggle.Skeleton.d.ts +58 -0
  51. package/es/components/Toggle/Toggle.Skeleton.js +1 -1
  52. package/es/components/ToggleSmall/ToggleSmall.Skeleton.js +1 -1
  53. package/es/components/Tooltip/Tooltip.d.ts +1 -1
  54. package/es/components/UIShell/HeaderMenu.js +1 -1
  55. package/es/index.d.ts +1 -0
  56. package/es/index.js +4 -1
  57. package/lib/components/Checkbox/Checkbox.d.ts +20 -0
  58. package/lib/components/Checkbox/Checkbox.js +58 -4
  59. package/lib/components/CheckboxGroup/CheckboxGroup.js +129 -0
  60. package/lib/components/ComboBox/ComboBox.js +10 -1
  61. package/lib/components/ContentSwitcher/ContentSwitcher.js +9 -4
  62. package/lib/components/Copy/Copy.js +1 -1
  63. package/lib/components/DataTable/DataTable.js +48 -6
  64. package/lib/components/DataTable/Table.js +1 -2
  65. package/lib/components/DataTable/TableCell.js +1 -2
  66. package/lib/components/DataTable/TableExpandRow.js +1 -2
  67. package/lib/components/DataTable/TableExpandedRow.js +1 -2
  68. package/lib/components/DataTable/TableHead.js +1 -2
  69. package/lib/components/DataTable/TableHeader.js +1 -2
  70. package/lib/components/DataTable/TableRow.js +1 -2
  71. package/lib/components/DataTable/TableSelectAll.js +1 -2
  72. package/lib/components/DataTable/TableSelectRow.js +1 -2
  73. package/lib/components/DataTable/TableToolbar.js +1 -2
  74. package/lib/components/DataTable/TableToolbarAction.js +1 -2
  75. package/lib/components/DataTable/TableToolbarContent.js +1 -2
  76. package/lib/components/DataTable/TableToolbarMenu.js +1 -2
  77. package/lib/components/DataTable/index.d.ts +29 -0
  78. package/lib/components/DataTable/index.js +76 -0
  79. package/lib/components/DatePicker/DatePicker.js +25 -3
  80. package/lib/components/DatePicker/plugins/fixEventsPlugin.js +15 -1
  81. package/lib/components/DatePickerInput/DatePickerInput.js +7 -2
  82. package/lib/components/Dropdown/Dropdown.js +15 -3
  83. package/lib/components/FluidDatePicker/FluidDatePicker.js +9 -2
  84. package/lib/components/IconButton/index.js +19 -5
  85. package/lib/components/Modal/Modal.js +4 -2
  86. package/lib/components/MultiSelect/FilterableMultiSelect.js +8 -0
  87. package/lib/components/MultiSelect/MultiSelect.js +2 -1
  88. package/lib/components/NumberInput/NumberInput.js +10 -2
  89. package/lib/components/ProgressBar/ProgressBar.js +3 -0
  90. package/lib/components/RadioButtonGroup/RadioButtonGroup.js +2 -1
  91. package/lib/components/RadioTile/RadioTile.js +1 -1
  92. package/lib/components/Select/Select.d.ts +1 -1
  93. package/lib/components/Select/Select.js +9 -0
  94. package/lib/components/StructuredList/StructuredList.js +2 -1
  95. package/lib/components/Switch/IconSwitch.js +184 -0
  96. package/lib/components/Tabs/Tabs.js +29 -17
  97. package/lib/components/TextArea/TextArea.js +16 -1
  98. package/lib/components/TextInput/ControlledPasswordInput.js +10 -1
  99. package/lib/components/TextInput/PasswordInput.js +4 -1
  100. package/lib/components/TextInput/index.js +0 -3
  101. package/lib/components/TextInput/util.js +15 -2
  102. package/lib/components/Tile/Tile.js +6 -4
  103. package/lib/components/Toggle/Toggle.Skeleton.d.ts +58 -0
  104. package/lib/components/Toggle/Toggle.Skeleton.js +1 -1
  105. package/lib/components/Tooltip/Tooltip.d.ts +1 -1
  106. package/lib/index.d.ts +1 -0
  107. package/lib/index.js +6 -1
  108. package/package.json +12 -12
@@ -141,12 +141,13 @@ function StructuredListRow(props) {
141
141
  setHasFocusWithin = _useState2[1];
142
142
 
143
143
  var id = useId.useId('grid-input');
144
+ var selectedRow = React__default["default"].useContext(GridSelectedRowStateContext);
144
145
  var setSelectedRow = React__default["default"].useContext(GridSelectedRowDispatchContext);
145
146
  var prefix = usePrefix.usePrefix();
146
147
  var value = {
147
148
  id: id
148
149
  };
149
- var classes = cx__default["default"]("".concat(prefix, "--structured-list-row"), className, (_classNames2 = {}, _rollupPluginBabelHelpers.defineProperty(_classNames2, "".concat(prefix, "--structured-list-row--header-row"), head), _rollupPluginBabelHelpers.defineProperty(_classNames2, "".concat(prefix, "--structured-list-row--focused-within"), hasFocusWithin), _classNames2));
150
+ var classes = cx__default["default"]("".concat(prefix, "--structured-list-row"), className, (_classNames2 = {}, _rollupPluginBabelHelpers.defineProperty(_classNames2, "".concat(prefix, "--structured-list-row--header-row"), head), _rollupPluginBabelHelpers.defineProperty(_classNames2, "".concat(prefix, "--structured-list-row--focused-within"), hasFocusWithin), _rollupPluginBabelHelpers.defineProperty(_classNames2, "".concat(prefix, "--structured-list-row--selected"), selectedRow === id), _classNames2));
150
151
  return head ? /*#__PURE__*/React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({
151
152
  role: "row"
152
153
  }, other, {
@@ -0,0 +1,184 @@
1
+ /**
2
+ * Copyright IBM Corp. 2016, 2023
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ 'use strict';
9
+
10
+ Object.defineProperty(exports, '__esModule', { value: true });
11
+
12
+ var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelpers.js');
13
+ var PropTypes = require('prop-types');
14
+ var React = require('react');
15
+ var cx = require('classnames');
16
+ var index = require('../IconButton/index.js');
17
+ var usePrefix = require('../../internal/usePrefix.js');
18
+
19
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
20
+
21
+ var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
22
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
23
+ var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
24
+
25
+ var _excluded = ["align", "children", "className", "disabled", "enterDelayMs", "index", "leaveDelayMs", "name", "onClick", "onKeyDown", "selected", "size", "text"];
26
+
27
+ var noopFn = function noopFn() {};
28
+
29
+ var IconSwitch = /*#__PURE__*/React__default["default"].forwardRef(function Switch(props, tabRef) {
30
+ var _classNames2;
31
+
32
+ var align = props.align,
33
+ children = props.children,
34
+ className = props.className,
35
+ disabled = props.disabled,
36
+ enterDelayMs = props.enterDelayMs,
37
+ index$1 = props.index,
38
+ _props$leaveDelayMs = props.leaveDelayMs,
39
+ leaveDelayMs = _props$leaveDelayMs === void 0 ? 0 : _props$leaveDelayMs,
40
+ name = props.name,
41
+ _props$onClick = props.onClick,
42
+ onClick = _props$onClick === void 0 ? noopFn : _props$onClick,
43
+ _props$onKeyDown = props.onKeyDown,
44
+ onKeyDown = _props$onKeyDown === void 0 ? noopFn : _props$onKeyDown,
45
+ _props$selected = props.selected,
46
+ selected = _props$selected === void 0 ? false : _props$selected,
47
+ size = props.size,
48
+ text = props.text,
49
+ other = _rollupPluginBabelHelpers.objectWithoutProperties(props, _excluded);
50
+
51
+ var prefix = usePrefix.usePrefix();
52
+
53
+ var _useState = React.useState(false),
54
+ _useState2 = _rollupPluginBabelHelpers.slicedToArray(_useState, 2),
55
+ isHovered = _useState2[0],
56
+ setIsHovered = _useState2[1];
57
+
58
+ var handleClick = function handleClick(e) {
59
+ e.preventDefault();
60
+ onClick({
61
+ index: index$1,
62
+ name: name,
63
+ text: text
64
+ });
65
+ };
66
+
67
+ var handleKeyDown = function handleKeyDown(event) {
68
+ var key = event.key || event.which;
69
+ onKeyDown({
70
+ index: index$1,
71
+ name: name,
72
+ text: text,
73
+ key: key
74
+ });
75
+ };
76
+
77
+ var handleMouseEnter = function handleMouseEnter() {
78
+ setIsHovered(true);
79
+ };
80
+
81
+ var handleMouseLeave = function handleMouseLeave() {
82
+ setIsHovered(false);
83
+ };
84
+
85
+ var classes = cx__default["default"](className, "".concat(prefix, "--content-switcher-btn"), _rollupPluginBabelHelpers.defineProperty({}, "".concat(prefix, "--content-switcher--selected"), selected));
86
+ var iconButtonClasses = cx__default["default"]("".concat(prefix, "--content-switcher-popover__wrapper"), (_classNames2 = {}, _rollupPluginBabelHelpers.defineProperty(_classNames2, "".concat(prefix, "--content-switcher-popover--selected"), selected), _rollupPluginBabelHelpers.defineProperty(_classNames2, "".concat(prefix, "--content-switcher-popover--disabled"), disabled), _classNames2));
87
+ var commonProps = {
88
+ onClick: handleClick,
89
+ onKeyDown: handleKeyDown,
90
+ className: classes,
91
+ disabled: disabled,
92
+ align: align,
93
+ enterDelayMs: enterDelayMs,
94
+ leaveDelayMs: leaveDelayMs,
95
+ size: size
96
+ };
97
+ return /*#__PURE__*/React__default["default"].createElement(index.IconButton, _rollupPluginBabelHelpers["extends"]({
98
+ label: text,
99
+ type: "button",
100
+ ref: tabRef,
101
+ role: "tab",
102
+ tabIndex: selected || isHovered ? 0 : -1,
103
+ onMouseEnter: handleMouseEnter,
104
+ onMouseLeave: handleMouseLeave,
105
+ onFocus: handleMouseEnter,
106
+ onBlur: handleMouseLeave,
107
+ "aria-selected": selected,
108
+ "aria-label": text,
109
+ wrapperClasses: iconButtonClasses
110
+ }, other, commonProps), children);
111
+ });
112
+ IconSwitch.displayName = 'IconSwitch';
113
+ IconSwitch.propTypes = {
114
+ /**
115
+ * Specify how the trigger should align with the tooltip
116
+ */
117
+ align: PropTypes__default["default"].oneOf(['top', 'top-left', 'top-right', 'bottom', 'bottom-left', 'bottom-right', 'left', 'right']),
118
+
119
+ /**
120
+ * Provide child elements to be rendered inside of the Switch
121
+ */
122
+ children: PropTypes__default["default"].node,
123
+
124
+ /**
125
+ * Specify an optional className to be added to your Switch
126
+ */
127
+ className: PropTypes__default["default"].string,
128
+
129
+ /**
130
+ * Specify whether or not the Switch should be disabled
131
+ */
132
+ disabled: PropTypes__default["default"].bool,
133
+
134
+ /**
135
+ * Specify the duration in milliseconds to delay before displaying the tooltip
136
+ */
137
+ enterDelayMs: PropTypes__default["default"].number,
138
+
139
+ /**
140
+ * The index of your Switch in your ContentSwitcher that is used for event handlers.
141
+ * Reserved for usage in ContentSwitcher
142
+ */
143
+ index: PropTypes__default["default"].number,
144
+
145
+ /**
146
+ * Specify the duration in milliseconds to delay before hiding the tooltip
147
+ */
148
+ leaveDelayMs: PropTypes__default["default"].number,
149
+
150
+ /**
151
+ * Provide the name of your Switch that is used for event handlers
152
+ */
153
+ name: PropTypes__default["default"].oneOfType([PropTypes__default["default"].string, PropTypes__default["default"].number]),
154
+
155
+ /**
156
+ * A handler that is invoked when a user clicks on the control.
157
+ * Reserved for usage in ContentSwitcher
158
+ */
159
+ onClick: PropTypes__default["default"].func,
160
+
161
+ /**
162
+ * A handler that is invoked on the key down event for the control.
163
+ * Reserved for usage in ContentSwitcher
164
+ */
165
+ onKeyDown: PropTypes__default["default"].func,
166
+
167
+ /**
168
+ * Whether your Switch is selected. Reserved for usage in ContentSwitcher
169
+ */
170
+ selected: PropTypes__default["default"].bool,
171
+
172
+ /**
173
+ * Passed in from `ContentSwitcher` to render icon-only variant
174
+ */
175
+ size: PropTypes__default["default"].oneOf(['sm', 'md', 'lg']),
176
+
177
+ /**
178
+ * Provide the visible text displayed by the Tooltip
179
+ */
180
+ text: PropTypes__default["default"].string
181
+ };
182
+ var IconSwitch$1 = IconSwitch;
183
+
184
+ exports["default"] = IconSwitch$1;
@@ -39,7 +39,7 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
39
39
  var _ChevronLeft, _ChevronRight;
40
40
 
41
41
  var _excluded = ["activation", "aria-label", "children", "className", "contained", "iconSize", "leftOverflowButtonProps", "light", "rightOverflowButtonProps", "scrollDebounceWait", "scrollIntoView"],
42
- _excluded2 = ["as", "children", "className", "disabled", "onClick", "onKeyDown", "secondaryLabel", "hasSecondaryLabel"],
42
+ _excluded2 = ["as", "children", "className", "disabled", "onClick", "onKeyDown", "secondaryLabel", "renderIcon"],
43
43
  _excluded3 = ["children", "className", "defaultOpen", "enterDelayMs", "leaveDelayMs", "label"],
44
44
  _excluded4 = ["children", "className"];
45
45
 
@@ -336,12 +336,14 @@ function TabList(_ref2) {
336
336
  onKeyDown: onKeyDown
337
337
  }), React__default["default"].Children.map(children, function (child, index) {
338
338
  return /*#__PURE__*/React__default["default"].createElement(TabContext.Provider, {
339
- value: index
339
+ value: {
340
+ index: index,
341
+ hasSecondaryLabel: hasSecondaryLabelTabs
342
+ }
340
343
  }, /*#__PURE__*/React__default["default"].cloneElement(child, {
341
344
  ref: function ref(node) {
342
345
  tabs.current[index] = node;
343
- },
344
- hasSecondaryLabel: hasSecondaryLabelTabs
346
+ }
345
347
  }));
346
348
  })), /*#__PURE__*/React__default["default"].createElement("button", _rollupPluginBabelHelpers["extends"]({
347
349
  "aria-hidden": "true",
@@ -467,7 +469,7 @@ var Tab = /*#__PURE__*/React__default["default"].forwardRef(function Tab(_ref5,
467
469
  _onClick = _ref5.onClick,
468
470
  onKeyDown = _ref5.onKeyDown,
469
471
  secondaryLabel = _ref5.secondaryLabel,
470
- hasSecondaryLabel = _ref5.hasSecondaryLabel,
472
+ Icon = _ref5.renderIcon,
471
473
  rest = _rollupPluginBabelHelpers.objectWithoutProperties(_ref5, _excluded2);
472
474
 
473
475
  var prefix = usePrefix.usePrefix();
@@ -477,7 +479,10 @@ var Tab = /*#__PURE__*/React__default["default"].forwardRef(function Tab(_ref5,
477
479
  setSelectedIndex = _React$useContext2.setSelectedIndex,
478
480
  baseId = _React$useContext2.baseId;
479
481
 
480
- var index = React__default["default"].useContext(TabContext);
482
+ var _React$useContext3 = React__default["default"].useContext(TabContext),
483
+ index = _React$useContext3.index,
484
+ hasSecondaryLabel = _React$useContext3.hasSecondaryLabel;
485
+
481
486
  var id = "".concat(baseId, "-tab-").concat(index);
482
487
  var panelId = "".concat(baseId, "-tabpanel-").concat(index);
483
488
  var className = cx__default["default"]("".concat(prefix, "--tabs__nav-item"), "".concat(prefix, "--tabs__nav-link"), customClassName, (_cx4 = {}, _rollupPluginBabelHelpers.defineProperty(_cx4, "".concat(prefix, "--tabs__nav-item--selected"), selectedIndex === index), _rollupPluginBabelHelpers.defineProperty(_cx4, "".concat(prefix, "--tabs__nav-item--disabled"), disabled), _cx4));
@@ -504,9 +509,15 @@ var Tab = /*#__PURE__*/React__default["default"].forwardRef(function Tab(_ref5,
504
509
  onKeyDown: onKeyDown,
505
510
  tabIndex: selectedIndex === index ? '0' : '-1',
506
511
  type: "button"
507
- }), /*#__PURE__*/React__default["default"].createElement("span", {
512
+ }), /*#__PURE__*/React__default["default"].createElement("div", {
513
+ className: "".concat(prefix, "--tabs__nav-item-label-wrapper")
514
+ }, /*#__PURE__*/React__default["default"].createElement("span", {
508
515
  className: "".concat(prefix, "--tabs__nav-item-label")
509
- }, children), hasSecondaryLabel && /*#__PURE__*/React__default["default"].createElement("div", {
516
+ }, children), Icon && /*#__PURE__*/React__default["default"].createElement("div", {
517
+ className: "".concat(prefix, "--tabs__nav-item--icon")
518
+ }, /*#__PURE__*/React__default["default"].createElement(Icon, {
519
+ size: 16
520
+ }))), hasSecondaryLabel && /*#__PURE__*/React__default["default"].createElement("div", {
510
521
  className: "".concat(prefix, "--tabs__nav-item-secondary-label")
511
522
  }, secondaryLabel));
512
523
  });
@@ -531,11 +542,6 @@ Tab.propTypes = {
531
542
  */
532
543
  disabled: PropTypes__default["default"].bool,
533
544
 
534
- /*
535
- * Internal use only, determines wether a tab should render as a secondary label tab
536
- **/
537
- hasSecondaryLabel: PropTypes__default["default"].bool,
538
-
539
545
  /**
540
546
  * Provide a handler that is invoked when a user clicks on the control
541
547
  */
@@ -553,6 +559,12 @@ Tab.propTypes = {
553
559
  **/
554
560
  renderButton: PropTypes__default["default"].func,
555
561
 
562
+ /**
563
+ * Optional prop to render an icon next to the label.
564
+ * Can be a React component class
565
+ */
566
+ renderIcon: PropTypes__default["default"].oneOfType([PropTypes__default["default"].func, PropTypes__default["default"].object]),
567
+
556
568
  /*
557
569
  * An optional label to render under the primary tab label.
558
570
  /* This prop is only useful for conained tabs
@@ -570,7 +582,7 @@ var IconTab = /*#__PURE__*/React__default["default"].forwardRef(function IconTab
570
582
  rest = _rollupPluginBabelHelpers.objectWithoutProperties(_ref6, _excluded3);
571
583
 
572
584
  var prefix = usePrefix.usePrefix();
573
- var classNames = cx__default["default"]("".concat(prefix, "--tabs__nav-item--icon"), customClassName);
585
+ var classNames = cx__default["default"]("".concat(prefix, "--tabs__nav-item--icon-only"), customClassName);
574
586
  return /*#__PURE__*/React__default["default"].createElement(Tooltip.Tooltip, {
575
587
  align: "bottom",
576
588
  defaultOpen: defaultOpen,
@@ -636,9 +648,9 @@ var TabPanel = /*#__PURE__*/React__default["default"].forwardRef(function TabPan
636
648
  interactiveContent = _useState10[0],
637
649
  setInteractiveContent = _useState10[1];
638
650
 
639
- var _React$useContext3 = React__default["default"].useContext(TabsContext),
640
- selectedIndex = _React$useContext3.selectedIndex,
641
- baseId = _React$useContext3.baseId;
651
+ var _React$useContext4 = React__default["default"].useContext(TabsContext),
652
+ selectedIndex = _React$useContext4.selectedIndex,
653
+ baseId = _React$useContext4.baseId;
642
654
 
643
655
  var index = React__default["default"].useContext(TabPanelContext);
644
656
  var id = "".concat(baseId, "-tabpanel-").concat(index);
@@ -22,6 +22,7 @@ var FormContext = require('../FluidForm/FormContext.js');
22
22
  var useAnnouncer = require('../../internal/useAnnouncer.js');
23
23
  var useIsomorphicEffect = require('../../internal/useIsomorphicEffect.js');
24
24
  var useMergedRefs = require('../../internal/useMergedRefs.js');
25
+ var setupGetInstanceId = require('../../tools/setupGetInstanceId.js');
25
26
 
26
27
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
27
28
 
@@ -30,6 +31,7 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
30
31
  var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
31
32
 
32
33
  var _excluded = ["className", "id", "labelText", "hideLabel", "onChange", "onClick", "invalid", "invalidText", "helperText", "light", "placeholder", "enableCounter", "maxCount", "warn", "warnText"];
34
+ var getInstanceId = setupGetInstanceId["default"]();
33
35
  var TextArea = /*#__PURE__*/React__default["default"].forwardRef(function (props, forwardRef) {
34
36
  var _classNames, _classNames4, _classNames5;
35
37
 
@@ -66,6 +68,9 @@ var TextArea = /*#__PURE__*/React__default["default"].forwardRef(function (props
66
68
  textCount = _useState2[0],
67
69
  setTextCount = _useState2[1];
68
70
 
71
+ var _useRef = React.useRef(getInstanceId()),
72
+ textAreaInstanceId = _useRef.current;
73
+
69
74
  var textareaProps = {
70
75
  id: id,
71
76
  onChange: function onChange(evt) {
@@ -99,7 +104,9 @@ var TextArea = /*#__PURE__*/React__default["default"].forwardRef(function (props
99
104
  className: counterClasses
100
105
  }, "".concat(textCount, "/").concat(maxCount)) : null;
101
106
  var helperTextClasses = cx__default["default"]("".concat(prefix, "--form__helper-text"), _rollupPluginBabelHelpers.defineProperty({}, "".concat(prefix, "--form__helper-text--disabled"), other.disabled));
107
+ var helperId = !helperText ? undefined : "text-area-helper-text-".concat(textAreaInstanceId);
102
108
  var helper = helperText ? /*#__PURE__*/React__default["default"].createElement("div", {
109
+ id: helperId,
103
110
  className: helperTextClasses
104
111
  }, helperText) : null;
105
112
  var errorId = id + '-error-msg';
@@ -127,11 +134,19 @@ var TextArea = /*#__PURE__*/React__default["default"].forwardRef(function (props
127
134
  textareaRef.current.style.width = "100%";
128
135
  }
129
136
  }, [other.cols]);
137
+ var ariaDescribedBy;
138
+
139
+ if (invalid) {
140
+ ariaDescribedBy = errorId;
141
+ } else if (!invalid && !warn && !isFluid && helperText) {
142
+ ariaDescribedBy = helperId;
143
+ }
144
+
130
145
  var input = /*#__PURE__*/React__default["default"].createElement("textarea", _rollupPluginBabelHelpers["extends"]({}, other, textareaProps, {
131
146
  placeholder: placeholder,
132
147
  className: textareaClasses,
133
148
  "aria-invalid": invalid,
134
- "aria-describedby": invalid ? errorId : undefined,
149
+ "aria-describedby": ariaDescribedBy,
135
150
  disabled: other.disabled,
136
151
  readOnly: other.readOnly,
137
152
  ref: ref
@@ -18,6 +18,7 @@ var util = require('./util.js');
18
18
  var warning = require('../../internal/warning.js');
19
19
  var deprecate = require('../../prop-types/deprecate.js');
20
20
  var usePrefix = require('../../internal/usePrefix.js');
21
+ var setupGetInstanceId = require('../../tools/setupGetInstanceId.js');
21
22
 
22
23
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
23
24
 
@@ -26,6 +27,7 @@ var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
26
27
  var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
27
28
 
28
29
  var _excluded = ["labelText", "className", "id", "placeholder", "onChange", "onClick", "hideLabel", "invalid", "invalidText", "helperText", "light", "type", "togglePasswordVisibility", "tooltipPosition", "tooltipAlignment", "hidePasswordLabel", "showPasswordLabel", "size"];
30
+ var getInstanceId = setupGetInstanceId["default"]();
29
31
  var didWarnAboutDeprecation = false;
30
32
  var ControlledPasswordInput = /*#__PURE__*/React__default["default"].forwardRef(function ControlledPasswordInput(_ref, ref) {
31
33
  var _classNames, _classNames2, _classNames4;
@@ -57,6 +59,9 @@ var ControlledPasswordInput = /*#__PURE__*/React__default["default"].forwardRef(
57
59
 
58
60
  var prefix = usePrefix.usePrefix();
59
61
 
62
+ var _useRef = React.useRef(getInstanceId()),
63
+ controlledPasswordInstanceId = _useRef.current;
64
+
60
65
  if (process.env.NODE_ENV !== "production") {
61
66
  process.env.NODE_ENV !== "production" ? warning.warning(didWarnAboutDeprecation, '`<TextInput.ControlledPasswordInput>` has been deprecated in favor of `<TextInput.PasswordInput />` and will be removed in the next major release of `carbon-components-react`') : void 0;
62
67
  didWarnAboutDeprecation = true;
@@ -100,10 +105,13 @@ var ControlledPasswordInput = /*#__PURE__*/React__default["default"].forwardRef(
100
105
  className: "".concat(prefix, "--icon-visibility-on")
101
106
  });
102
107
  var passwordVisibilityToggleClasses = cx__default["default"]("".concat(prefix, "--text-input--password__visibility__toggle"), "".concat(prefix, "--btn"), "".concat(prefix, "--btn--icon-only"), "".concat(prefix, "--tooltip__trigger"), "".concat(prefix, "--tooltip--a11y"), (_classNames4 = {}, _rollupPluginBabelHelpers.defineProperty(_classNames4, "".concat(prefix, "--tooltip--").concat(tooltipPosition), tooltipPosition), _rollupPluginBabelHelpers.defineProperty(_classNames4, "".concat(prefix, "--tooltip--align-").concat(tooltipAlignment), tooltipAlignment), _classNames4));
108
+ var helperId = !helperText ? undefined : "controlled-password-helper-text-".concat(controlledPasswordInstanceId);
103
109
  var input = /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("input", _rollupPluginBabelHelpers["extends"]({}, util.textInputProps({
104
110
  invalid: invalid,
105
111
  sharedTextInputProps: sharedTextInputProps,
106
- invalidId: errorId
112
+ invalidId: errorId,
113
+ hasHelper: !error && helperText,
114
+ helperId: helperId
107
115
  }), {
108
116
  "data-toggle-password-visibility": type === 'password'
109
117
  })), /*#__PURE__*/React__default["default"].createElement("button", {
@@ -114,6 +122,7 @@ var ControlledPasswordInput = /*#__PURE__*/React__default["default"].forwardRef(
114
122
  className: "".concat(prefix, "--assistive-text")
115
123
  }, passwordIsVisible ? hidePasswordLabel : showPasswordLabel), passwordVisibilityIcon));
116
124
  var helper = helperText ? /*#__PURE__*/React__default["default"].createElement("div", {
125
+ id: helperId,
117
126
  className: helperTextClasses
118
127
  }, helperText) : null;
119
128
  return /*#__PURE__*/React__default["default"].createElement("div", {
@@ -122,6 +122,7 @@ var PasswordInput = /*#__PURE__*/React__default["default"].forwardRef(function P
122
122
  className: labelClasses
123
123
  }, labelText) : null;
124
124
  var helper = helperText ? /*#__PURE__*/React__default["default"].createElement("div", {
125
+ id: normalizedProps.helperId,
125
126
  className: helperTextClasses
126
127
  }, helperText) : null;
127
128
  var passwordIsVisible = inputType === 'text';
@@ -136,7 +137,9 @@ var PasswordInput = /*#__PURE__*/React__default["default"].forwardRef(function P
136
137
  invalid: normalizedProps.invalid,
137
138
  invalidId: normalizedProps.invalidId,
138
139
  warn: normalizedProps.warn,
139
- warnId: normalizedProps.warnId
140
+ warnId: normalizedProps.warnId,
141
+ hasHelper: Boolean(helperText && !isFluid && (inline || !inline && !normalizedProps.validation)),
142
+ helperId: normalizedProps.helperId
140
143
  }), {
141
144
  disabled: disabled,
142
145
  "data-toggle-password-visibility": inputType === 'password'
@@ -15,9 +15,6 @@ var PasswordInput = require('./PasswordInput.js');
15
15
  var TextInput = require('./TextInput.js');
16
16
  var TextInput_Skeleton = require('./TextInput.Skeleton.js');
17
17
 
18
- TextInput["default"].ControlledPasswordInput = ControlledPasswordInput["default"];
19
- TextInput["default"].PasswordInput = PasswordInput["default"];
20
-
21
18
  if (process.env.NODE_ENV !== "production") {
22
19
  deprecateFieldOnObject.deprecateFieldOnObject(TextInput["default"], 'ControlledPasswordInput', ControlledPasswordInput["default"]);
23
20
  deprecateFieldOnObject.deprecateFieldOnObject(TextInput["default"], 'PasswordInput', PasswordInput["default"]);
@@ -25,13 +25,26 @@ var warnProps = function warnProps(warnId) {
25
25
  };
26
26
  };
27
27
 
28
+ var helperProps = function helperProps(helperId) {
29
+ return {
30
+ 'aria-describedby': helperId
31
+ };
32
+ };
33
+ /**
34
+ * @param {{sharedTextInputProps: object, invalid?: boolean, invalidId?: string, warn?: boolean, warnId?: string, hasHelper?: boolean, helperId?: string}} config
35
+ * @returns {object}
36
+ */
37
+
38
+
28
39
  var textInputProps = function textInputProps(_ref) {
29
40
  var sharedTextInputProps = _ref.sharedTextInputProps,
30
41
  invalid = _ref.invalid,
31
42
  invalidId = _ref.invalidId,
32
43
  warn = _ref.warn,
33
- warnId = _ref.warnId;
34
- return _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({}, sharedTextInputProps), invalid ? invalidProps(invalidId) : {}), warn ? warnProps(warnId) : {});
44
+ warnId = _ref.warnId,
45
+ hasHelper = _ref.hasHelper,
46
+ helperId = _ref.helperId;
47
+ return _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({}, sharedTextInputProps), invalid ? invalidProps(invalidId) : {}), warn ? warnProps(warnId) : {}), hasHelper ? helperProps(helperId) : {});
35
48
  };
36
49
 
37
50
  exports.textInputProps = textInputProps;
@@ -20,6 +20,7 @@ var events = require('../../tools/events.js');
20
20
  var usePrefix = require('../../internal/usePrefix.js');
21
21
  var useIsomorphicEffect = require('../../internal/useIsomorphicEffect.js');
22
22
  var useNoInteractiveChildren = require('../../internal/useNoInteractiveChildren.js');
23
+ var useMergedRefs = require('../../internal/useMergedRefs.js');
23
24
  var match = require('../../internal/keyboard/match.js');
24
25
  var keys = require('../../internal/keyboard/keys.js');
25
26
 
@@ -328,7 +329,7 @@ SelectableTile.propTypes = {
328
329
  */
329
330
  value: PropTypes__default["default"].oneOfType([PropTypes__default["default"].string, PropTypes__default["default"].number]).isRequired
330
331
  };
331
- function ExpandableTile(_ref4) {
332
+ var ExpandableTile = /*#__PURE__*/React__default["default"].forwardRef(function ExpandableTile(_ref4, forwardRef) {
332
333
  var _cx4, _cx5;
333
334
 
334
335
  var tabIndex = _ref4.tabIndex,
@@ -386,6 +387,7 @@ function ExpandableTile(_ref4) {
386
387
  var tileContent = React.useRef(null);
387
388
  var tile = React.useRef(null);
388
389
  var prefix = usePrefix.usePrefix();
390
+ var ref = useMergedRefs.useMergedRefs([forwardRef, tile]);
389
391
 
390
392
  if (expanded !== prevExpanded) {
391
393
  setIsExpanded(expanded);
@@ -473,7 +475,7 @@ function ExpandableTile(_ref4) {
473
475
  };
474
476
  }, []);
475
477
  return interactive ? /*#__PURE__*/React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({
476
- ref: tile,
478
+ ref: ref,
477
479
  className: interactiveClassNames,
478
480
  "aria-expanded": isExpanded
479
481
  }, rest), /*#__PURE__*/React__default["default"].createElement("div", {
@@ -493,7 +495,7 @@ function ExpandableTile(_ref4) {
493
495
  className: "".concat(prefix, "--tile-content")
494
496
  }, childrenAsArray[1]))) : /*#__PURE__*/React__default["default"].createElement("button", _rollupPluginBabelHelpers["extends"]({
495
497
  type: "button",
496
- ref: tile,
498
+ ref: ref,
497
499
  className: classNames,
498
500
  "aria-expanded": isExpanded,
499
501
  title: isExpanded ? tileExpandedIconText : tileCollapsedIconText
@@ -512,7 +514,7 @@ function ExpandableTile(_ref4) {
512
514
  ref: belowTheFold,
513
515
  className: "".concat(prefix, "--tile-content")
514
516
  }, childrenAsArray[1])));
515
- }
517
+ });
516
518
  ExpandableTile.propTypes = {
517
519
  /**
518
520
  * The child nodes.
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Copyright IBM Corp. 2016, 2023
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import PropTypes from 'prop-types';
8
+ import React from 'react';
9
+ type ToggleSkeletonProps = {
10
+ 'aria-label': string;
11
+ /**
12
+ * Specify an optional className to add to the form item wrapper.
13
+ */
14
+ className?: string;
15
+ /**
16
+ * Provide an id that unique represents the underlying `<input>`
17
+ */
18
+ id?: string;
19
+ /**
20
+ * Provide the text that will be read by a screen reader when visiting this
21
+ * control
22
+ * `aria-label` is always required but will be null if `labelText` is also
23
+ * provided
24
+ */
25
+ labelText?: string;
26
+ /**
27
+ * Specify the size of the Toggle. Currently only supports 'sm' or 'md' (default)
28
+ */
29
+ size?: 'sm' | 'md';
30
+ } & React.HTMLAttributes<HTMLDivElement>;
31
+ declare class ToggleSkeleton extends React.Component<ToggleSkeletonProps> {
32
+ static propTypes: {
33
+ "aria-label": PropTypes.Validator<string>;
34
+ /**
35
+ * Specify an optional className to add to the form item wrapper.
36
+ */
37
+ className: PropTypes.Requireable<string>;
38
+ /**
39
+ * Provide an id that unique represents the underlying `<input>`
40
+ */
41
+ id: PropTypes.Requireable<string>;
42
+ /**
43
+ * Provide the text that will be read by a screen reader when visiting this
44
+ * control
45
+ * `aria-label` is always required but will be undefined if `labelText` is also
46
+ * provided
47
+ */
48
+ labelText: PropTypes.Requireable<string>;
49
+ /**
50
+ * Specify the size of the Toggle. Currently only supports 'sm' or 'md' (default)
51
+ */
52
+ size: PropTypes.Requireable<string>;
53
+ };
54
+ static defaultProps: Partial<ToggleSkeletonProps>;
55
+ render(): JSX.Element;
56
+ }
57
+ export default ToggleSkeleton;
58
+ export { ToggleSkeleton };
@@ -60,7 +60,7 @@ var ToggleSkeleton = /*#__PURE__*/function (_React$Component) {
60
60
  }), /*#__PURE__*/React__default["default"].createElement("label", {
61
61
  className: "".concat(prefix, "--toggle-input__label"),
62
62
  htmlFor: id,
63
- "aria-label": labelText ? null : _this.props['aria-label']
63
+ "aria-label": labelText ? undefined : _this.props['aria-label']
64
64
  }, labelText ? _div || (_div = /*#__PURE__*/React__default["default"].createElement("div", null, labelText)) : null, /*#__PURE__*/React__default["default"].createElement("span", {
65
65
  className: "".concat(prefix, "--toggle__switch")
66
66
  }, /*#__PURE__*/React__default["default"].createElement("span", {
@@ -22,7 +22,7 @@ interface TooltipBaseProps {
22
22
  */
23
23
  className?: string;
24
24
  /**
25
- * Determines wether the tooltip should close when inner content is activated (click, Enter or Space)
25
+ * Determines whether the tooltip should close when inner content is activated (click, Enter or Space)
26
26
  */
27
27
  closeOnActivation?: boolean;
28
28
  /**
package/lib/index.d.ts CHANGED
@@ -12,6 +12,7 @@ export * from './components/Breadcrumb';
12
12
  export * from './components/Button';
13
13
  export * from './components/ButtonSet';
14
14
  export * from './components/Checkbox';
15
+ export * from './components/CheckboxGroup';
15
16
  export * from './components/ClassPrefix';
16
17
  export * from './components/CodeSnippet';
17
18
  export * from './components/ComboBox';