carbon-react 118.6.0 → 119.0.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 (46) hide show
  1. package/esm/__internal__/form-field/form-field.component.d.ts +3 -1
  2. package/esm/__internal__/form-field/form-field.component.js +3 -1
  3. package/esm/__internal__/label/label.component.d.ts +3 -2
  4. package/esm/__internal__/label/label.component.js +10 -5
  5. package/esm/components/button-toggle/button-toggle-group/button-toggle-group.component.d.ts +64 -0
  6. package/esm/components/button-toggle/button-toggle-group/button-toggle-group.component.js +157 -0
  7. package/esm/components/button-toggle/button-toggle-group/button-toggle-group.style.d.ts +6 -0
  8. package/esm/components/button-toggle/button-toggle-group/button-toggle-group.style.js +64 -0
  9. package/esm/components/button-toggle/button-toggle.component.d.ts +21 -8
  10. package/esm/components/button-toggle/button-toggle.component.js +94 -27
  11. package/esm/components/button-toggle/button-toggle.style.d.ts +7 -6
  12. package/esm/components/button-toggle/button-toggle.style.js +46 -37
  13. package/esm/components/button-toggle/index.d.ts +3 -1
  14. package/esm/components/button-toggle/index.js +2 -1
  15. package/lib/__internal__/form-field/form-field.component.d.ts +3 -1
  16. package/lib/__internal__/form-field/form-field.component.js +3 -1
  17. package/lib/__internal__/label/label.component.d.ts +3 -2
  18. package/lib/__internal__/label/label.component.js +10 -5
  19. package/lib/components/button-toggle/button-toggle-group/button-toggle-group.component.d.ts +64 -0
  20. package/lib/components/button-toggle/button-toggle-group/button-toggle-group.component.js +168 -0
  21. package/lib/components/button-toggle/button-toggle-group/button-toggle-group.style.d.ts +6 -0
  22. package/lib/components/{button-toggle-group → button-toggle/button-toggle-group}/button-toggle-group.style.js +29 -46
  23. package/lib/components/button-toggle/button-toggle-group/package.json +6 -0
  24. package/lib/components/button-toggle/button-toggle.component.d.ts +21 -8
  25. package/lib/components/button-toggle/button-toggle.component.js +93 -26
  26. package/lib/components/button-toggle/button-toggle.style.d.ts +7 -6
  27. package/lib/components/button-toggle/button-toggle.style.js +48 -40
  28. package/lib/components/button-toggle/index.d.ts +3 -1
  29. package/lib/components/button-toggle/index.js +8 -1
  30. package/package.json +1 -1
  31. package/esm/components/button-toggle/button-toggle-input.component.d.ts +0 -25
  32. package/esm/components/button-toggle/button-toggle-input.component.js +0 -44
  33. package/esm/components/button-toggle-group/button-toggle-group.component.d.ts +0 -47
  34. package/esm/components/button-toggle-group/button-toggle-group.component.js +0 -84
  35. package/esm/components/button-toggle-group/button-toggle-group.style.d.ts +0 -4
  36. package/esm/components/button-toggle-group/button-toggle-group.style.js +0 -81
  37. package/lib/components/button-toggle/button-toggle-input.component.d.ts +0 -25
  38. package/lib/components/button-toggle/button-toggle-input.component.js +0 -54
  39. package/lib/components/button-toggle-group/button-toggle-group.component.d.ts +0 -47
  40. package/lib/components/button-toggle-group/button-toggle-group.component.js +0 -94
  41. package/lib/components/button-toggle-group/button-toggle-group.style.d.ts +0 -4
  42. package/lib/components/button-toggle-group/package.json +0 -6
  43. /package/esm/components/{button-toggle-group → button-toggle/button-toggle-group}/index.d.ts +0 -0
  44. /package/esm/components/{button-toggle-group → button-toggle/button-toggle-group}/index.js +0 -0
  45. /package/lib/components/{button-toggle-group → button-toggle/button-toggle-group}/index.d.ts +0 -0
  46. /package/lib/components/{button-toggle-group → button-toggle/button-toggle-group}/index.js +0 -0
@@ -1,7 +1,12 @@
1
1
  import React from "react";
2
- import { StyledButtonToggleLabelProps } from "./button-toggle.style";
3
- import { ButtonToggleInputProps } from "./button-toggle-input.component";
4
- export interface ButtonToggleProps extends ButtonToggleInputProps, Partial<StyledButtonToggleLabelProps> {
2
+ import { StyledButtonToggleProps } from "./button-toggle.style";
3
+ export interface ButtonToggleProps extends Partial<StyledButtonToggleProps> {
4
+ /** Prop to specify the aria-label of the component */
5
+ "aria-label"?: string;
6
+ /** Prop to specify the aria-labelledby property of the component */
7
+ "aria-labelledby"?: string;
8
+ /** DEPRECATED: A synonym for pressed, to keep backwards compatibility. */
9
+ checked?: boolean;
5
10
  /** Text to display for the button. */
6
11
  children?: React.ReactNode;
7
12
  /** Identifier used for testing purposes, applied to the root element of the component. */
@@ -10,15 +15,23 @@ export interface ButtonToggleProps extends ButtonToggleInputProps, Partial<Style
10
15
  "data-element"?: string;
11
16
  /** Identifier used for testing purposes, applied to the root element of the component. */
12
17
  "data-role"?: string;
13
- /** Set the default value of the Group if component is meant to be used as uncontrolled. */
14
- defaultChecked?: boolean;
15
18
  /** Remove spacing from between buttons. */
16
19
  grouped?: boolean;
17
- /** Callback triggered by click event on the input. */
18
- onClick?: (ev: React.MouseEvent<HTMLInputElement>) => void;
20
+ /** An optional string by which to identify the button in an onChange handler on the parent ButtonToggleGroup. */
21
+ name?: string;
22
+ /** Callback triggered by blur event on the button. */
23
+ onBlur?: (ev: React.FocusEvent<HTMLButtonElement>) => void;
24
+ /** Callback triggered by focus event on the button. */
25
+ onFocus?: (ev: React.FocusEvent<HTMLButtonElement>) => void;
26
+ /** Callback triggered by click event on the button. */
27
+ onClick?: (ev: React.MouseEvent<HTMLButtonElement>) => void;
28
+ /** Set the pressed state of the toggle button */
29
+ pressed?: boolean;
30
+ /** An optional string by which to identify the button in either an onClick handler, or an onChange handler on the parent ButtonToggleGroup. */
31
+ value?: string;
19
32
  }
20
33
  export declare const ButtonToggle: {
21
- ({ "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, buttonIcon, buttonIconSize, checked, children, "data-component": dataComponent, "data-element": dataElement, "data-role": dataRole, disabled, grouped, name, onBlur, onChange, onFocus, size, value, }: ButtonToggleProps): React.JSX.Element;
34
+ ({ "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, buttonIcon, buttonIconSize, checked, children, "data-component": dataComponent, "data-element": dataElement, "data-role": dataRole, disabled, grouped, name, onBlur, onFocus, onClick, pressed, size, value, }: ButtonToggleProps): React.JSX.Element;
22
35
  displayName: string;
23
36
  };
24
37
  export default ButtonToggle;
@@ -9,13 +9,16 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
  var _invariant = _interopRequireDefault(require("invariant"));
10
10
  var _buttonToggle = require("./button-toggle.style");
11
11
  var _guid = _interopRequireDefault(require("../../__internal__/utils/helpers/guid"));
12
+ var _buttonToggleGroup = require("./button-toggle-group/button-toggle-group.component");
12
13
  var _buttonToggleIcon = _interopRequireDefault(require("./button-toggle-icon.component"));
13
- var _buttonToggleInput = _interopRequireDefault(require("./button-toggle-input.component"));
14
- var _inputBehaviour = require("../../__internal__/input-behaviour");
15
14
  var _logger = _interopRequireDefault(require("../../__internal__/utils/logger"));
15
+ var _inputBehaviour = require("../../__internal__/input-behaviour");
16
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
17
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
18
18
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
19
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
20
+ let deprecateCheckedWarnTriggered = false;
21
+ let deprecateNameWarnTriggered = false;
19
22
  let deprecateUncontrolledWarnTriggered = false;
20
23
  const ButtonToggle = _ref => {
21
24
  let {
@@ -32,18 +35,48 @@ const ButtonToggle = _ref => {
32
35
  grouped,
33
36
  name,
34
37
  onBlur,
35
- onChange,
36
38
  onFocus,
39
+ onClick,
40
+ pressed,
37
41
  size = "medium",
38
42
  value
39
43
  } = _ref;
40
44
  !!!(children || buttonIcon) ? process.env.NODE_ENV !== "production" ? (0, _invariant.default)(false, "Either prop `buttonIcon` must be defined, or this node must have children") : (0, _invariant.default)(false) : void 0;
45
+ if (checked !== undefined && !deprecateCheckedWarnTriggered) {
46
+ deprecateCheckedWarnTriggered = true;
47
+ _logger.default.deprecate("The `checked` prop in `ButtonToggle` component is deprecated and will soon be removed. Please use `pressed` instead.");
48
+ }
49
+ if (name && !deprecateNameWarnTriggered) {
50
+ deprecateNameWarnTriggered = true;
51
+ _logger.default.deprecate(`The \`name\` prop in \`ButtonToggle\` component is deprecated and will soon be removed. It does not provide any functionality
52
+ since the component can no longer be used in an uncontrolled fashion.`);
53
+ }
54
+ const pressedPropValue = pressed === undefined ? checked : pressed;
55
+ const buttonRef = (0, _react.useRef)(null);
41
56
  const {
42
57
  onMouseEnter,
43
- onMouseLeave
58
+ onMouseLeave,
59
+ onBlur: inputGroupOnBlur,
60
+ onFocus: inputGroupOnFocus
44
61
  } = (0, _react.useContext)(_inputBehaviour.InputGroupContext);
45
- const inputGuid = (0, _guid.default)();
46
- const inputRef = (0, _react.useRef)(null);
62
+ const {
63
+ onButtonClick,
64
+ handleKeyDown,
65
+ pressedButtonValue,
66
+ onChange,
67
+ name: groupName,
68
+ allowDeselect,
69
+ isInGroup,
70
+ firstButton,
71
+ childButtonCallbackRef
72
+ } = (0, _react.useContext)(_buttonToggleGroup.ButtonToggleGroupContext);
73
+ const callbackRef = element => {
74
+ buttonRef.current = element;
75
+ if (childButtonCallbackRef) {
76
+ childButtonCallbackRef(element);
77
+ }
78
+ };
79
+ const inputGuid = (0, _react.useRef)((0, _guid.default)());
47
80
  let icon;
48
81
  if (buttonIcon) {
49
82
  icon = /*#__PURE__*/_react.default.createElement(_buttonToggleIcon.default, {
@@ -53,42 +86,76 @@ const ButtonToggle = _ref => {
53
86
  hasContent: !!children
54
87
  });
55
88
  }
56
- function handleClick() {
57
- inputRef.current?.focus();
89
+ function handleClick(ev) {
90
+ if (onClick) {
91
+ onClick(ev);
92
+ }
93
+ if (onChange) {
94
+ let newValue = value;
95
+ if (allowDeselect && pressedButtonValue === value) {
96
+ newValue = undefined;
97
+ }
98
+ onChange(ev, newValue, groupName || name);
99
+ }
100
+ if (value) {
101
+ onButtonClick(value);
102
+ }
58
103
  }
59
104
  if (!deprecateUncontrolledWarnTriggered && !onChange) {
60
105
  deprecateUncontrolledWarnTriggered = true;
61
106
  _logger.default.deprecate("Uncontrolled behaviour in `Button Toggle` is deprecated and support will soon be removed. Please make sure all your inputs are controlled.");
62
107
  }
63
- return /*#__PURE__*/_react.default.createElement(_buttonToggle.StyledButtonToggle, {
108
+ function handleFocus(ev) {
109
+ if (onFocus) {
110
+ onFocus(ev);
111
+ }
112
+ if (inputGroupOnFocus) {
113
+ inputGroupOnFocus();
114
+ }
115
+ }
116
+ function handleBlur(ev) {
117
+ if (onBlur) {
118
+ onBlur(ev);
119
+ }
120
+ if (inputGroupOnBlur) {
121
+ inputGroupOnBlur();
122
+ }
123
+ }
124
+ const isPressed = isInGroup ? pressedButtonValue === value : pressedPropValue;
125
+ const isFirstButton = buttonRef.current === firstButton;
126
+
127
+ // if we're in a ButtonToggleGroup, only one button should be tabbable - the pressed button if there is one, or
128
+ // the first one if not
129
+ const tabbable = !isInGroup || isPressed || !pressedButtonValue && isFirstButton;
130
+ return /*#__PURE__*/_react.default.createElement(_buttonToggle.StyledButtonToggleWrapper, {
64
131
  "data-component": dataComponent || "button-toggle",
65
132
  "data-element": dataElement,
66
133
  "data-role": dataRole,
67
- grouped: grouped,
68
- onClick: handleClick
69
- }, /*#__PURE__*/_react.default.createElement(_buttonToggleInput.default, {
134
+ grouped: grouped
135
+ }, /*#__PURE__*/_react.default.createElement(_buttonToggle.StyledButtonToggle, _extends({
70
136
  "aria-label": ariaLabel,
71
137
  "aria-labelledby": ariaLabelledBy,
72
- "data-element": "button-toggle-input",
73
- name: name,
74
- checked: checked,
75
- disabled: disabled,
76
- guid: inputGuid,
77
- value: value,
78
- onChange: onChange,
79
- onFocus: onFocus,
80
- onBlur: onBlur,
81
- ref: inputRef
82
- }), /*#__PURE__*/_react.default.createElement(_buttonToggle.StyledButtonToggleLabel, {
138
+ "aria-pressed": !!isPressed,
83
139
  buttonIcon: buttonIcon,
84
140
  buttonIconSize: buttonIconSize,
141
+ "data-element": "button-toggle-button",
85
142
  disabled: disabled,
86
- htmlFor: inputGuid,
143
+ id: inputGuid.current,
87
144
  onMouseEnter: onMouseEnter,
88
145
  onMouseLeave: onMouseLeave,
89
146
  size: size,
90
- grouped: grouped
91
- }, /*#__PURE__*/_react.default.createElement(_buttonToggle.StyledButtonToggleContentWrapper, null, icon, children)));
147
+ grouped: grouped,
148
+ value: value,
149
+ onFocus: handleFocus,
150
+ onBlur: handleBlur,
151
+ onClick: handleClick,
152
+ onKeyDown: handleKeyDown
153
+ }, tabbable ? {} : {
154
+ tabIndex: -1
155
+ }, {
156
+ allowDeselect: allowDeselect,
157
+ ref: callbackRef
158
+ }), icon, children));
92
159
  };
93
160
  exports.ButtonToggle = ButtonToggle;
94
161
  ButtonToggle.displayName = "ButtonToggle";
@@ -1,7 +1,7 @@
1
1
  import { IconType } from "../icon";
2
2
  export declare type ButtonToggleIconSizes = "small" | "large";
3
3
  declare const StyledButtonToggleContentWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
4
- export interface StyledButtonToggleLabelProps {
4
+ export interface StyledButtonToggleProps {
5
5
  /** The icon to be rendered inside of the button */
6
6
  buttonIcon?: IconType;
7
7
  /** Sets the size of the buttonIcon (eg. large) */
@@ -11,17 +11,18 @@ export interface StyledButtonToggleLabelProps {
11
11
  /** ButtonToggle size */
12
12
  size: "small" | "medium" | "large";
13
13
  grouped?: boolean;
14
+ /** set this to true to allow the button to be deselected when already selected */
15
+ allowDeselect?: boolean;
14
16
  }
15
- declare const StyledButtonToggleLabel: import("styled-components").StyledComponent<"label", any, StyledButtonToggleLabelProps, never>;
17
+ declare const StyledButtonToggle: import("styled-components").StyledComponent<"button", any, StyledButtonToggleProps, never>;
16
18
  export interface StyledButtonToggleIconProps {
17
19
  /** Sets the size of the buttonIcon (eg. large) */
18
20
  buttonIconSize?: ButtonToggleIconSizes;
19
21
  hasContent?: boolean;
20
22
  }
21
23
  declare const StyledButtonToggleIcon: import("styled-components").StyledComponent<"div", any, StyledButtonToggleIconProps, never>;
22
- export interface StyledButtonToggleProps {
24
+ export interface StyledButtonToggleWrapperProps {
23
25
  grouped?: boolean;
24
26
  }
25
- declare const StyledButtonToggle: import("styled-components").StyledComponent<"div", any, StyledButtonToggleProps, never>;
26
- declare const StyledButtonToggleInput: import("styled-components").StyledComponent<"input", any, {}, never>;
27
- export { StyledButtonToggle, StyledButtonToggleLabel, StyledButtonToggleIcon, StyledButtonToggleInput, StyledButtonToggleContentWrapper, };
27
+ declare const StyledButtonToggleWrapper: import("styled-components").StyledComponent<"div", any, StyledButtonToggleWrapperProps, never>;
28
+ export { StyledButtonToggle, StyledButtonToggleWrapper, StyledButtonToggleIcon, StyledButtonToggleContentWrapper, };
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.StyledButtonToggleLabel = exports.StyledButtonToggleInput = exports.StyledButtonToggleIcon = exports.StyledButtonToggleContentWrapper = exports.StyledButtonToggle = void 0;
6
+ exports.StyledButtonToggleWrapper = exports.StyledButtonToggleIcon = exports.StyledButtonToggleContentWrapper = exports.StyledButtonToggle = void 0;
7
7
  var _styledComponents = _interopRequireWildcard(require("styled-components"));
8
8
  var _icon = _interopRequireDefault(require("../icon/icon.style"));
9
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -43,8 +43,10 @@ const StyledButtonToggleContentWrapper = _styledComponents.default.div`
43
43
  flex-flow: wrap;
44
44
  `;
45
45
  exports.StyledButtonToggleContentWrapper = StyledButtonToggleContentWrapper;
46
- const StyledButtonToggleLabel = _styledComponents.default.label`
47
- display: inline-block;
46
+ const StyledButtonToggle = _styledComponents.default.button`
47
+ display: inline-flex;
48
+ justify-content: center;
49
+ align-items: center;
48
50
  position: relative;
49
51
  box-sizing: border-box;
50
52
  max-width: 100%;
@@ -60,22 +62,32 @@ const StyledButtonToggleLabel = _styledComponents.default.label`
60
62
  `;
61
63
  }}
62
64
  font-weight: 700;
65
+ background-color: transparent;
63
66
  cursor: pointer;
67
+ text-align: start;
68
+ color: inherit;
69
+
64
70
  border: 1px solid var(--colorsActionMinor500);
65
- ${_icon.default} {
66
- color: var(--colorsActionMinor500);
71
+
72
+ :focus {
73
+ outline: 3px solid var(--colorsSemanticFocus500);
74
+ z-index: 100;
67
75
  }
68
- input:checked ~ && {
76
+
77
+ &[aria-pressed="true"] {
69
78
  background-color: var(--colorsActionMinor300);
70
79
  color: var(--colorsActionMinor600);
71
- cursor: auto;
72
- }
73
- input:focus ~ & {
74
- outline: 3px solid var(--colorsSemanticFocus500);
75
- z-index: 100;
80
+ ${_ref2 => {
81
+ let {
82
+ allowDeselect
83
+ } = _ref2;
84
+ return !allowDeselect && (0, _styledComponents.css)`
85
+ cursor: auto;
86
+ `;
87
+ }}
76
88
  }
77
89
 
78
- input:not(:checked):not(:disabled) ~ &:hover {
90
+ :not([aria-pressed="true"]):not(:disabled):hover {
79
91
  background-color: var(--colorsActionMinor200);
80
92
  border-color: var(--colorsActionMinor500);
81
93
  color: var(--colorsActionMinor500);
@@ -83,24 +95,27 @@ const StyledButtonToggleLabel = _styledComponents.default.label`
83
95
  color: var(--colorsActionMinor500);
84
96
  }
85
97
  }
86
- ${_ref2 => {
98
+
99
+ ${_icon.default} {
100
+ color: var(--colorsActionMinor500);
101
+ }
102
+
103
+ ${_ref3 => {
87
104
  let {
88
105
  buttonIcon,
89
106
  buttonIconSize,
90
107
  size
91
- } = _ref2;
108
+ } = _ref3;
92
109
  return buttonIcon && buttonIconSize === "large" && (0, _styledComponents.css)`
93
110
  height: ${heightLargeIconConfig[size]}px;
94
111
  padding: 0 ${paddingLargeIconConfig[size]}px;
95
- ${StyledButtonToggleContentWrapper} {
96
- flex-direction: column;
97
- }
112
+ flex-direction: column;
98
113
  `;
99
114
  }}
100
- ${_ref3 => {
115
+ ${_ref4 => {
101
116
  let {
102
117
  disabled
103
- } = _ref3;
118
+ } = _ref4;
104
119
  return disabled && (0, _styledComponents.css)`
105
120
  & {
106
121
  border-color: var(--colorsActionDisabled500);
@@ -113,22 +128,22 @@ const StyledButtonToggleLabel = _styledComponents.default.label`
113
128
  `;
114
129
  }};
115
130
  `;
116
- exports.StyledButtonToggleLabel = StyledButtonToggleLabel;
131
+ exports.StyledButtonToggle = StyledButtonToggle;
117
132
  const iconFontSizes = {
118
133
  smallIcon: 16,
119
134
  largeIcon: 32
120
135
  };
121
136
  const StyledButtonToggleIcon = _styledComponents.default.div`
122
- ${_ref4 => {
137
+ ${_ref5 => {
123
138
  let {
124
139
  hasContent
125
- } = _ref4;
140
+ } = _ref5;
126
141
  return hasContent && `margin-right: 8px;`;
127
142
  }}
128
- ${_ref5 => {
143
+ ${_ref6 => {
129
144
  let {
130
145
  buttonIconSize
131
- } = _ref5;
146
+ } = _ref6;
132
147
  return buttonIconSize === "large" && (0, _styledComponents.css)`
133
148
  margin-right: 0;
134
149
  ${_icon.default} {
@@ -148,18 +163,18 @@ const StyledButtonToggleIcon = _styledComponents.default.div`
148
163
  }}
149
164
  `;
150
165
  exports.StyledButtonToggleIcon = StyledButtonToggleIcon;
151
- const StyledButtonToggle = _styledComponents.default.div`
166
+ const StyledButtonToggleWrapper = _styledComponents.default.div`
152
167
  display: inline-block;
153
168
  vertical-align: middle;
154
169
 
155
- ${_ref6 => {
170
+ ${_ref7 => {
156
171
  let {
157
172
  grouped
158
- } = _ref6;
173
+ } = _ref7;
159
174
  return (0, _styledComponents.css)`
160
175
  ${!grouped && (0, _styledComponents.css)`
161
176
  &&&& {
162
- ${StyledButtonToggleLabel} {
177
+ ${StyledButtonToggle} {
163
178
  border-radius: var(--borderRadius400);
164
179
  }
165
180
  }
@@ -168,14 +183,14 @@ const StyledButtonToggle = _styledComponents.default.div`
168
183
  ${grouped && (0, _styledComponents.css)`
169
184
  &&&& {
170
185
  :first-of-type {
171
- ${StyledButtonToggleLabel} {
186
+ ${StyledButtonToggle} {
172
187
  border-top-left-radius: var(--borderRadius400);
173
188
  border-bottom-left-radius: var(--borderRadius400);
174
189
  }
175
190
  }
176
191
 
177
192
  :last-of-type {
178
- ${StyledButtonToggleLabel} {
193
+ ${StyledButtonToggle} {
179
194
  border-top-right-radius: var(--borderRadius400);
180
195
  border-bottom-right-radius: var(--borderRadius400);
181
196
  }
@@ -189,10 +204,10 @@ const StyledButtonToggle = _styledComponents.default.div`
189
204
  margin-left: 8px;
190
205
  }
191
206
 
192
- ${_ref7 => {
207
+ ${_ref8 => {
193
208
  let {
194
209
  grouped
195
- } = _ref7;
210
+ } = _ref8;
196
211
  return grouped && (0, _styledComponents.css)`
197
212
  &:not(:first-of-type) {
198
213
  margin-left: -1px;
@@ -200,11 +215,4 @@ const StyledButtonToggle = _styledComponents.default.div`
200
215
  `;
201
216
  }};
202
217
  `;
203
- exports.StyledButtonToggle = StyledButtonToggle;
204
- const StyledButtonToggleInput = _styledComponents.default.input`
205
- position: absolute;
206
- width: 0;
207
- height: 0;
208
- opacity: 0;
209
- `;
210
- exports.StyledButtonToggleInput = StyledButtonToggleInput;
218
+ exports.StyledButtonToggleWrapper = StyledButtonToggleWrapper;
@@ -1,2 +1,4 @@
1
- export { default } from "./button-toggle.component";
1
+ export { default as ButtonToggle } from "./button-toggle.component";
2
2
  export type { ButtonToggleProps } from "./button-toggle.component";
3
+ export { default as ButtonToggleGroup } from "./button-toggle-group";
4
+ export type { ButtonToggleGroupProps } from "./button-toggle-group";
@@ -3,11 +3,18 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- Object.defineProperty(exports, "default", {
6
+ Object.defineProperty(exports, "ButtonToggle", {
7
7
  enumerable: true,
8
8
  get: function () {
9
9
  return _buttonToggle.default;
10
10
  }
11
11
  });
12
+ Object.defineProperty(exports, "ButtonToggleGroup", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _buttonToggleGroup.default;
16
+ }
17
+ });
12
18
  var _buttonToggle = _interopRequireDefault(require("./button-toggle.component"));
19
+ var _buttonToggleGroup = _interopRequireDefault(require("./button-toggle-group"));
13
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "carbon-react",
3
- "version": "118.6.0",
3
+ "version": "119.0.0",
4
4
  "description": "A library of reusable React components for easily building user interfaces.",
5
5
  "files": [
6
6
  "lib",
@@ -1,25 +0,0 @@
1
- import React from "react";
2
- export interface ButtonToggleInputProps {
3
- /** Prop to specify the aria-label of the component */
4
- "aria-label"?: string;
5
- /** Prop to specify the aria-labelledby property of the component */
6
- "aria-labelledby"?: string;
7
- /** Set the checked value of the radio button */
8
- checked?: boolean;
9
- /** Disable all user interaction. */
10
- disabled?: boolean;
11
- /** Unique ID attribute for input */
12
- guid?: string;
13
- /** Name used on the hidden radio button. */
14
- name?: string;
15
- /** Callback triggered by blur event on the input. */
16
- onBlur?: (ev: React.FocusEvent<HTMLInputElement>) => void;
17
- /** Callback triggered by change event on the input. */
18
- onChange?: (ev: React.ChangeEvent<HTMLInputElement>) => void;
19
- /** Callback triggered by focus event on the input. */
20
- onFocus?: (ev: React.FocusEvent<HTMLInputElement>) => void;
21
- /** Value for the input */
22
- value?: string;
23
- }
24
- declare const ButtonToggleInput: React.ForwardRefExoticComponent<ButtonToggleInputProps & React.RefAttributes<HTMLInputElement>>;
25
- export default ButtonToggleInput;
@@ -1,44 +0,0 @@
1
- function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
- import React, { useContext } from "react";
3
- import PropTypes from "prop-types";
4
- import { StyledButtonToggleInput } from "./button-toggle.style";
5
- import { InputGroupContext } from "../../__internal__/input-behaviour";
6
- const ButtonToggleInput = /*#__PURE__*/React.forwardRef((props, forwardRef) => {
7
- const {
8
- onFocus,
9
- onBlur
10
- } = useContext(InputGroupContext);
11
- const handleBlur = ev => {
12
- if (props.onBlur) {
13
- props.onBlur(ev);
14
- }
15
- if (onBlur) onBlur();
16
- };
17
- const handleFocus = ev => {
18
- if (props.onFocus) {
19
- props.onFocus(ev);
20
- }
21
- if (onFocus) onFocus();
22
- };
23
- return /*#__PURE__*/React.createElement(StyledButtonToggleInput, _extends({}, props, {
24
- type: "radio",
25
- id: props.guid,
26
- onBlur: handleBlur,
27
- onFocus: handleFocus,
28
- ref: forwardRef
29
- }));
30
- });
31
- ButtonToggleInput.propTypes = {
32
- "aria-label": PropTypes.string,
33
- "aria-labelledby": PropTypes.string,
34
- "checked": PropTypes.bool,
35
- "disabled": PropTypes.bool,
36
- "guid": PropTypes.string,
37
- "name": PropTypes.string,
38
- "onBlur": PropTypes.func,
39
- "onChange": PropTypes.func,
40
- "onFocus": PropTypes.func,
41
- "value": PropTypes.string
42
- };
43
- ButtonToggleInput.displayName = "ButtonToggleInput";
44
- export default ButtonToggleInput;
@@ -1,47 +0,0 @@
1
- import React from "react";
2
- import { MarginProps } from "styled-system";
3
- import { ValidationProps } from "../../__internal__/validations";
4
- import { TagProps } from "../../__internal__/utils/helpers/tags";
5
- export interface ButtonToggleGroupProps extends ValidationProps, MarginProps, TagProps {
6
- /** Unique id for the root element of the component */
7
- id: string;
8
- /** Specifies the name prop to be applied to each button in the group */
9
- name: string;
10
- /** Togglable buttons to be rendered. Only accepts children of type ButtonToggle */
11
- children?: React.ReactNode;
12
- /** When true, validation icon will be placed on label instead of being placed on the input */
13
- validationOnLabel?: boolean;
14
- /** Text for the label. */
15
- label?: string;
16
- /** Text for the labels help tooltip. */
17
- labelHelp?: React.ReactNode;
18
- /** Spacing between label and a field for inline label, given number will be multiplied by base spacing unit (8) */
19
- labelSpacing?: 1 | 2;
20
- /** The percentage width of the ButtonToggleGroup. */
21
- inputWidth?: number | string;
22
- /** The text for the field help. */
23
- fieldHelp?: string;
24
- /** Sets the field help to inline. */
25
- fieldHelpInline?: boolean;
26
- /** Sets the label to be inline. */
27
- labelInline?: boolean;
28
- /** The percentage width of the label. */
29
- labelWidth?: number;
30
- /** If true all ButtonToggle children will flex to the full width of the ButtonToggleGroup parent */
31
- fullWidth?: boolean;
32
- /** The alignment for the text in the label. */
33
- labelAlign?: "left" | "right";
34
- /** Callback triggered by blur event on the input. */
35
- onBlur?: (ev: React.FocusEvent<HTMLInputElement>) => void;
36
- /** Callback triggered by change event on the input. */
37
- onChange?: (ev: React.ChangeEvent<HTMLInputElement>) => void;
38
- /** The value of the Button Toggle Group */
39
- value?: string;
40
- /** Aria label for rendered help component */
41
- helpAriaLabel?: string;
42
- }
43
- declare const ButtonToggleGroup: {
44
- ({ children, name, error, warning, info, validationOnLabel, label, labelHelp, labelSpacing, inputWidth, fullWidth, fieldHelp, fieldHelpInline, labelInline, labelWidth, labelAlign, onChange, onBlur, value, "data-component": dataComponent, "data-element": dataElement, "data-role": dataRole, helpAriaLabel, id, ...props }: ButtonToggleGroupProps): React.JSX.Element;
45
- displayName: string;
46
- };
47
- export default ButtonToggleGroup;