carbon-react 110.2.4 → 110.4.1

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 (101) hide show
  1. package/esm/__internal__/i18n-context/index.d.ts +2 -1
  2. package/esm/__internal__/popover/popover.component.d.ts +2 -1
  3. package/esm/__internal__/popover/popover.component.js +15 -4
  4. package/esm/__internal__/popover/popover.style.d.ts +6 -2
  5. package/esm/__internal__/popover/popover.style.js +6 -2
  6. package/esm/__internal__/radio-button-mapper/index.d.ts +2 -0
  7. package/esm/__internal__/radio-button-mapper/index.js +1 -0
  8. package/esm/__internal__/radio-button-mapper/radio-button-mapper.d.ts +21 -0
  9. package/esm/__internal__/sticky-footer/index.d.ts +1 -0
  10. package/esm/__internal__/sticky-footer/sticky-footer.component.d.ts +15 -0
  11. package/esm/__internal__/sticky-footer/sticky-footer.style.d.ts +2 -0
  12. package/esm/__internal__/utils/helpers/tags/index.d.ts +1 -0
  13. package/esm/__spec_helper__/mock-resize-observer.d.ts +1 -1
  14. package/esm/__spec_helper__/mock-resize-observer.js +2 -2
  15. package/esm/components/button-toggle/button-toggle.component.d.ts +3 -3
  16. package/esm/components/button-toggle/button-toggle.component.js +21 -20
  17. package/esm/components/button-toggle/button-toggle.style.d.ts +1 -1
  18. package/esm/components/button-toggle-group/button-toggle-group.component.d.ts +45 -0
  19. package/esm/components/button-toggle-group/button-toggle-group.component.js +187 -92
  20. package/esm/components/button-toggle-group/button-toggle-group.style.d.ts +4 -0
  21. package/esm/components/button-toggle-group/button-toggle-group.style.js +2 -2
  22. package/esm/components/button-toggle-group/index.d.ts +2 -1
  23. package/esm/components/drawer/drawer.component.d.ts +37 -0
  24. package/esm/components/drawer/drawer.component.js +43 -54
  25. package/esm/components/drawer/drawer.style.d.ts +27 -0
  26. package/esm/components/drawer/drawer.style.js +2 -2
  27. package/esm/components/drawer/index.d.ts +2 -1
  28. package/esm/components/drawer/index.js +1 -2
  29. package/esm/components/i18n-provider/i18n-provider.component.d.ts +8 -0
  30. package/esm/components/i18n-provider/i18n-provider.component.js +100 -80
  31. package/esm/components/i18n-provider/index.d.ts +2 -1
  32. package/esm/components/menu/__internal__/submenu/submenu.component.js +22 -4
  33. package/esm/components/menu/menu-item/menu-item.component.js +6 -1
  34. package/esm/components/menu/menu-item/menu-item.d.ts +4 -0
  35. package/esm/components/menu/menu-item/menu-item.style.js +158 -149
  36. package/esm/components/menu/scrollable-block/scrollable-block.component.js +21 -5
  37. package/esm/components/menu/scrollable-block/scrollable-block.d.ts +6 -0
  38. package/esm/components/menu/scrollable-block/scrollable-block.style.js +1 -1
  39. package/esm/components/select/filterable-select/filterable-select.component.js +7 -5
  40. package/esm/components/select/multi-select/multi-select.component.js +4 -3
  41. package/esm/components/select/select-list/select-list.component.js +34 -18
  42. package/esm/components/select/simple-select/simple-select.component.js +4 -3
  43. package/esm/components/tabs/__internal__/tabs-header/tabs-header.style.d.ts +6 -0
  44. package/esm/components/tabs/tab/tab.style.d.ts +2 -0
  45. package/esm/components/tabs/tabs.style.d.ts +2 -0
  46. package/lib/__internal__/i18n-context/index.d.ts +2 -1
  47. package/lib/__internal__/popover/popover.component.d.ts +2 -1
  48. package/lib/__internal__/popover/popover.component.js +16 -5
  49. package/lib/__internal__/popover/popover.style.d.ts +6 -2
  50. package/lib/__internal__/popover/popover.style.js +8 -3
  51. package/lib/__internal__/radio-button-mapper/index.d.ts +2 -0
  52. package/lib/{components/button-toggle-group/documentation → __internal__/radio-button-mapper}/index.js +2 -2
  53. package/lib/__internal__/radio-button-mapper/package.json +6 -0
  54. package/lib/__internal__/radio-button-mapper/radio-button-mapper.d.ts +21 -0
  55. package/lib/__internal__/sticky-footer/index.d.ts +1 -0
  56. package/lib/__internal__/sticky-footer/sticky-footer.component.d.ts +15 -0
  57. package/lib/__internal__/sticky-footer/sticky-footer.style.d.ts +2 -0
  58. package/lib/__internal__/utils/helpers/tags/index.d.ts +1 -0
  59. package/lib/__spec_helper__/mock-resize-observer.d.ts +1 -1
  60. package/lib/__spec_helper__/mock-resize-observer.js +2 -2
  61. package/lib/components/button-toggle/button-toggle.component.d.ts +3 -3
  62. package/lib/components/button-toggle/button-toggle.component.js +22 -20
  63. package/lib/components/button-toggle/button-toggle.style.d.ts +1 -1
  64. package/lib/components/button-toggle-group/button-toggle-group.component.d.ts +45 -0
  65. package/lib/components/button-toggle-group/button-toggle-group.component.js +190 -93
  66. package/lib/components/button-toggle-group/button-toggle-group.style.d.ts +4 -0
  67. package/lib/components/button-toggle-group/button-toggle-group.style.js +2 -2
  68. package/lib/components/button-toggle-group/index.d.ts +2 -1
  69. package/lib/components/drawer/drawer.component.d.ts +37 -0
  70. package/lib/components/drawer/drawer.component.js +43 -55
  71. package/lib/components/drawer/drawer.style.d.ts +27 -0
  72. package/lib/components/drawer/drawer.style.js +3 -3
  73. package/lib/components/drawer/index.d.ts +2 -1
  74. package/lib/components/i18n-provider/i18n-provider.component.d.ts +8 -0
  75. package/lib/components/i18n-provider/i18n-provider.component.js +102 -82
  76. package/lib/components/i18n-provider/index.d.ts +2 -1
  77. package/lib/components/menu/__internal__/submenu/submenu.component.js +23 -4
  78. package/lib/components/menu/menu-item/menu-item.component.js +6 -1
  79. package/lib/components/menu/menu-item/menu-item.d.ts +4 -0
  80. package/lib/components/menu/menu-item/menu-item.style.js +158 -149
  81. package/lib/components/menu/scrollable-block/scrollable-block.component.js +22 -5
  82. package/lib/components/menu/scrollable-block/scrollable-block.d.ts +6 -0
  83. package/lib/components/menu/scrollable-block/scrollable-block.style.js +1 -1
  84. package/lib/components/select/filterable-select/filterable-select.component.js +7 -5
  85. package/lib/components/select/multi-select/multi-select.component.js +4 -3
  86. package/lib/components/select/select-list/select-list.component.js +34 -18
  87. package/lib/components/select/simple-select/simple-select.component.js +4 -3
  88. package/lib/components/tabs/__internal__/tabs-header/tabs-header.style.d.ts +6 -0
  89. package/lib/components/tabs/tab/tab.style.d.ts +2 -0
  90. package/lib/components/tabs/tabs.style.d.ts +2 -0
  91. package/package.json +1 -1
  92. package/esm/components/button-toggle-group/__definition__.js +0 -38
  93. package/esm/components/button-toggle-group/button-toggle-group.d.ts +0 -58
  94. package/esm/components/button-toggle-group/documentation/index.js +0 -1
  95. package/esm/components/drawer/drawer.d.ts +0 -44
  96. package/esm/components/i18n-provider/i18n-provider.d.ts +0 -11
  97. package/lib/components/button-toggle-group/__definition__.js +0 -50
  98. package/lib/components/button-toggle-group/button-toggle-group.d.ts +0 -58
  99. package/lib/components/button-toggle-group/documentation/package.json +0 -6
  100. package/lib/components/drawer/drawer.d.ts +0 -44
  101. package/lib/components/i18n-provider/i18n-provider.d.ts +0 -11
@@ -1,2 +1,3 @@
1
- declare var _default: import("react").Context<import("../../locales/locale").default>;
1
+ /// <reference types="react" />
2
+ declare const _default: import("react").Context<import("../../locales/locale").default>;
2
3
  export default _default;
@@ -13,6 +13,7 @@ export interface PopoverProps {
13
13
  onFirstUpdate?: (state: Partial<State>) => void;
14
14
  disablePortal?: boolean;
15
15
  reference: React.RefObject<HTMLElement>;
16
+ isOpen?: boolean;
16
17
  }
17
- declare const Popover: ({ children, placement, disablePortal, reference, onFirstUpdate, modifiers, disableBackgroundUI, }: PopoverProps) => JSX.Element;
18
+ declare const Popover: ({ children, placement, disablePortal, reference, onFirstUpdate, modifiers, disableBackgroundUI, isOpen, }: PopoverProps) => JSX.Element;
18
19
  export default Popover;
@@ -3,7 +3,7 @@ import PropTypes from "prop-types";
3
3
  import ReactDOM from "react-dom";
4
4
  import { createPopper } from "@popperjs/core";
5
5
  import useResizeObserver from "../../hooks/__internal__/useResizeObserver";
6
- import StyledBackdrop from "./popover.style";
6
+ import { StyledBackdrop, StyledPopoverContent } from "./popover.style";
7
7
  import CarbonScopedTokensProvider from "../../style/design-tokens/carbon-scoped-tokens-provider/carbon-scoped-tokens-provider.component";
8
8
  import { ModalContext } from "../../components/modal/modal.component";
9
9
 
@@ -14,12 +14,12 @@ const Popover = ({
14
14
  reference,
15
15
  onFirstUpdate,
16
16
  modifiers,
17
- disableBackgroundUI
17
+ disableBackgroundUI,
18
+ isOpen = true
18
19
  }) => {
19
20
  var _reference$current;
20
21
 
21
- const elementDOM = useRef(null); // TODO: Remove TempModalContext after modal has been converted to TS
22
-
22
+ const elementDOM = useRef(null);
23
23
  const {
24
24
  isInModal
25
25
  } = useContext(ModalContext);
@@ -52,6 +52,13 @@ const Popover = ({
52
52
 
53
53
  popperInstance === null || popperInstance === void 0 ? void 0 : (_popperInstance$curre = popperInstance.current) === null || _popperInstance$curre === void 0 ? void 0 : _popperInstance$curre.update();
54
54
  });
55
+ useEffect(() => {
56
+ if (isOpen) {
57
+ var _popperInstance$curre2;
58
+
59
+ popperInstance === null || popperInstance === void 0 ? void 0 : (_popperInstance$curre2 = popperInstance.current) === null || _popperInstance$curre2 === void 0 ? void 0 : _popperInstance$curre2.update();
60
+ }
61
+ }, [isOpen]);
55
62
  useLayoutEffect(() => {
56
63
  if (reference.current) {
57
64
  popperInstance.current = createPopper(reference.current, popperElementRef.current, {
@@ -82,6 +89,9 @@ const Popover = ({
82
89
  }
83
90
  };
84
91
  }, [disablePortal, mountNode]);
92
+ content = /*#__PURE__*/React.createElement(StyledPopoverContent, {
93
+ isOpen: isOpen
94
+ }, content);
85
95
 
86
96
  if (disableBackgroundUI) {
87
97
  content = /*#__PURE__*/React.createElement(StyledBackdrop, null, content);
@@ -98,6 +108,7 @@ Popover.propTypes = {
98
108
  "children": PropTypes.element.isRequired,
99
109
  "disableBackgroundUI": PropTypes.bool,
100
110
  "disablePortal": PropTypes.bool,
111
+ "isOpen": PropTypes.bool,
101
112
  "modifiers": PropTypes.arrayOf(PropTypes.shape({
102
113
  "enabled": PropTypes.bool,
103
114
  "name": PropTypes.string.isRequired,
@@ -1,2 +1,6 @@
1
- declare const StyledBackdrop: import("styled-components").StyledComponent<"div", any, {}, never>;
2
- export default StyledBackdrop;
1
+ export declare const StyledBackdrop: import("styled-components").StyledComponent<"div", any, {}, never>;
2
+ declare type StyledPopoverContentProps = {
3
+ isOpen?: boolean;
4
+ };
5
+ export declare const StyledPopoverContent: import("styled-components").StyledComponent<"div", any, StyledPopoverContentProps, never>;
6
+ export {};
@@ -1,6 +1,6 @@
1
1
  import styled from "styled-components";
2
2
  import baseTheme from "../../style/themes/base";
3
- const StyledBackdrop = styled.div`
3
+ export const StyledBackdrop = styled.div`
4
4
  bottom: 0;
5
5
  left: 0;
6
6
  position: fixed;
@@ -14,4 +14,8 @@ const StyledBackdrop = styled.div`
14
14
  StyledBackdrop.defaultProps = {
15
15
  theme: baseTheme
16
16
  };
17
- export default StyledBackdrop;
17
+ export const StyledPopoverContent = styled.div`
18
+ ${({
19
+ isOpen
20
+ }) => !isOpen && "display: none;"}
21
+ `;
@@ -0,0 +1,2 @@
1
+ export { default } from "./radio-button-mapper";
2
+ export * from "./radio-button-mapper";
@@ -0,0 +1 @@
1
+ export { default } from "./radio-button-mapper.component";
@@ -0,0 +1,21 @@
1
+ import React from "react";
2
+
3
+ export interface RadioButtonMapperProps {
4
+ /** The RadioButton objects to be rendered in the group */
5
+ children?: React.ReactNode;
6
+ /** Specifies the name prop to be applied to each button in the group */
7
+ name: string;
8
+ /** Callback fired when each RadioButton is blurred */
9
+ onBlur?: (ev: React.FocusEvent<HTMLInputElement>) => void;
10
+ /** Callback fired when the user selects a RadioButton */
11
+ onChange?: (ev: React.ChangeEvent<HTMLInputElement>) => void;
12
+ /** Callback fired on key down */
13
+ onKeyDown?: (ev: React.KeyboardEvent<HTMLInputElement>) => void;
14
+ /** Value of the selected RadioButton */
15
+ value?: string;
16
+ }
17
+
18
+ declare function RadioButtonMapper(props?: RadioButtonMapperProps): JSX.Element;
19
+ RadioButtonMapper.displayName = "RadioButtonMapper";
20
+
21
+ export default RadioButtonMapper;
@@ -0,0 +1 @@
1
+ export { default } from "./sticky-footer.component";
@@ -0,0 +1,15 @@
1
+ export default StickyFooter;
2
+ declare function StickyFooter({ children, containerRef, disableSticky, ...rest }: {
3
+ [x: string]: any;
4
+ children: any;
5
+ containerRef: any;
6
+ disableSticky: any;
7
+ }): JSX.Element;
8
+ declare namespace StickyFooter {
9
+ namespace propTypes {
10
+ const children: PropTypes.Validator<string | number | boolean | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
11
+ const containerRef: PropTypes.Validator<any>;
12
+ const disableSticky: PropTypes.Requireable<boolean>;
13
+ }
14
+ }
15
+ import PropTypes from "prop-types";
@@ -0,0 +1,2 @@
1
+ export default StyledStickyFooter;
2
+ declare const StyledStickyFooter: import("styled-components").StyledComponent<"div", any, {}, never>;
@@ -1 +1,2 @@
1
1
  export { default } from "./tags";
2
+ export type { TagProps } from "./tags";
@@ -1,2 +1,2 @@
1
+ declare const setupResizeObserverMock: () => void;
1
2
  export default setupResizeObserverMock;
2
- declare function setupResizeObserverMock(): void;
@@ -1,9 +1,9 @@
1
1
  const setupResizeObserverMock = () => {
2
- if (!global.window) {
2
+ if (!window) {
3
3
  return;
4
4
  }
5
5
 
6
- global.window.ResizeObserver = global.window.ResizeObserver || jest.fn().mockImplementation(() => ({
6
+ window.ResizeObserver = window.ResizeObserver || jest.fn().mockImplementation(() => ({
7
7
  disconnect: jest.fn(),
8
8
  observe: jest.fn(),
9
9
  unobserve: jest.fn()
@@ -2,8 +2,8 @@ import React from "react";
2
2
  import { StyledButtonToggleLabelProps } from "./button-toggle.style";
3
3
  import { ButtonToggleInputProps } from "./button-toggle-input.component";
4
4
  export interface ButtonToggleProps extends ButtonToggleInputProps, Partial<StyledButtonToggleLabelProps> {
5
- /** A required prop. This is the button text. */
6
- children: React.ReactNode;
5
+ /** Text to display for the button. */
6
+ children?: React.ReactNode;
7
7
  /** Identifier used for testing purposes, applied to the root element of the component. */
8
8
  "data-component"?: string;
9
9
  /** Identifier used for testing purposes, applied to the root element of the component. */
@@ -18,7 +18,7 @@ export interface ButtonToggleProps extends ButtonToggleInputProps, Partial<Style
18
18
  onClick?: (ev: React.MouseEvent<HTMLInputElement>) => void;
19
19
  }
20
20
  export declare const ButtonToggle: {
21
- (props: ButtonToggleProps): JSX.Element;
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): JSX.Element;
22
22
  displayName: string;
23
23
  };
24
24
  export default ButtonToggle;
@@ -1,31 +1,32 @@
1
1
  import React, { useContext, useRef } from "react";
2
2
  import PropTypes from "prop-types";
3
+ import invariant from "invariant";
3
4
  import { StyledButtonToggle, StyledButtonToggleLabel, StyledButtonToggleContentWrapper } from "./button-toggle.style";
4
5
  import guid from "../../__internal__/utils/helpers/guid";
5
6
  import ButtonToggleIcon from "./button-toggle-icon.component";
6
7
  import ButtonToggleInput from "./button-toggle-input.component";
7
8
  import { InputGroupContext } from "../../__internal__/input-behaviour";
8
9
 
9
- const ButtonToggle = props => {
10
- const {
11
- "aria-label": ariaLabel,
12
- "aria-labelledby": ariaLabelledBy,
13
- buttonIcon,
14
- buttonIconSize = "small",
15
- checked,
16
- children,
17
- "data-component": dataComponent,
18
- "data-element": dataElement,
19
- "data-role": dataRole,
20
- disabled,
21
- grouped,
22
- name,
23
- onBlur,
24
- onChange,
25
- onFocus,
26
- size = "medium",
27
- value
28
- } = props;
10
+ const ButtonToggle = ({
11
+ "aria-label": ariaLabel,
12
+ "aria-labelledby": ariaLabelledBy,
13
+ buttonIcon,
14
+ buttonIconSize = "small",
15
+ checked,
16
+ children,
17
+ "data-component": dataComponent,
18
+ "data-element": dataElement,
19
+ "data-role": dataRole,
20
+ disabled,
21
+ grouped,
22
+ name,
23
+ onBlur,
24
+ onChange,
25
+ onFocus,
26
+ size = "medium",
27
+ value
28
+ }) => {
29
+ !!!(children || buttonIcon) ? process.env.NODE_ENV !== "production" ? invariant(false, "Either prop `buttonIcon` must be defined, or this node must have children") : invariant(false) : void 0;
29
30
  const {
30
31
  onMouseEnter,
31
32
  onMouseLeave
@@ -2,7 +2,7 @@ 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
4
  export interface StyledButtonToggleLabelProps {
5
- /** buttonIcon to render. */
5
+ /** The icon to be rendered inside of the button */
6
6
  buttonIcon?: IconType;
7
7
  /** Sets the size of the buttonIcon (eg. large) */
8
8
  buttonIconSize?: ButtonToggleIconSizes;
@@ -0,0 +1,45 @@
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
+ /** The alignment for the text in the label. */
31
+ labelAlign?: "left" | "right";
32
+ /** Callback triggered by blur event on the input. */
33
+ onBlur?: (ev: React.FocusEvent<HTMLInputElement>) => void;
34
+ /** Callback triggered by change event on the input. */
35
+ onChange?: (ev: React.ChangeEvent<HTMLInputElement>) => void;
36
+ /** The value of the Button Toggle Group */
37
+ value?: string;
38
+ /** Aria label for rendered help component */
39
+ helpAriaLabel?: string;
40
+ }
41
+ declare const ButtonToggleGroup: {
42
+ ({ children, name, error, warning, info, validationOnLabel, label, labelHelp, labelSpacing, inputWidth, fieldHelp, fieldHelpInline, labelInline, labelWidth, labelAlign, onChange, onBlur, value, "data-component": dataComponent, "data-element": dataElement, "data-role": dataRole, helpAriaLabel, id, ...props }: ButtonToggleGroupProps): JSX.Element;
43
+ displayName: string;
44
+ };
45
+ export default ButtonToggleGroup;
@@ -1,17 +1,16 @@
1
1
  function _extends() { _extends = Object.assign || 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
2
 
3
- import React from "react";
3
+ import React, { useMemo } from "react";
4
4
  import PropTypes from "prop-types";
5
- import styledSystemPropTypes from "@styled-system/prop-types";
5
+ import invariant from "invariant";
6
6
  import FormField from "../../__internal__/form-field";
7
- import ButtonToggleGroupStyle from "./button-toggle-group.style";
7
+ import StyledButtonToggleGroup from "./button-toggle-group.style";
8
8
  import ButtonToggle from "../button-toggle";
9
- import RadioButtonMapper from "../../__internal__/radio-button-mapper/radio-button-mapper.component";
9
+ import RadioButtonMapper from "../../__internal__/radio-button-mapper";
10
10
  import ValidationIcon from "../../__internal__/validations/validation-icon.component";
11
11
  import { InputGroupBehaviour } from "../../__internal__/input-behaviour";
12
12
  import { filterStyledSystemMarginProps } from "../../style/utils";
13
13
  import { TooltipProvider } from "../../__internal__/tooltip-provider";
14
- const marginPropTypes = filterStyledSystemMarginProps(styledSystemPropTypes.space);
15
14
 
16
15
  const ButtonToggleGroup = ({
17
16
  children,
@@ -44,6 +43,13 @@ const ButtonToggleGroup = ({
44
43
  warning,
45
44
  info
46
45
  };
46
+ const hasCorrectItemStructure = useMemo(() => {
47
+ const incorrectChild = React.Children.toArray(children).find(child => {
48
+ return ! /*#__PURE__*/React.isValidElement(child) || child.type.displayName !== ButtonToggle.displayName;
49
+ });
50
+ return !incorrectChild;
51
+ }, [children]);
52
+ !hasCorrectItemStructure ? process.env.NODE_ENV !== "production" ? invariant(false, `\`ButtonToggleGroup\` only accepts children of type \`${ButtonToggle.displayName}\``) : invariant(false) : void 0;
47
53
  return /*#__PURE__*/React.createElement(TooltipProvider, {
48
54
  helpAriaLabel: helpAriaLabel
49
55
  }, /*#__PURE__*/React.createElement(InputGroupBehaviour, null, /*#__PURE__*/React.createElement(FormField, _extends({
@@ -60,7 +66,7 @@ const ButtonToggleGroup = ({
60
66
  "data-role": dataRole,
61
67
  "data-element": dataElement,
62
68
  id: id
63
- }, validationProps, filterStyledSystemMarginProps(props)), /*#__PURE__*/React.createElement(ButtonToggleGroupStyle, _extends({
69
+ }, validationProps, filterStyledSystemMarginProps(props)), /*#__PURE__*/React.createElement(StyledButtonToggleGroup, _extends({
64
70
  "aria-label": label,
65
71
  role: "radiogroup",
66
72
  inputWidth: inputWidth
@@ -74,95 +80,184 @@ const ButtonToggleGroup = ({
74
80
  }))))));
75
81
  };
76
82
 
77
- ButtonToggleGroup.propTypes = { ...marginPropTypes,
78
-
79
- /** Identifier used for testing purposes, applied to the root element of the component. */
83
+ ButtonToggleGroup.propTypes = {
84
+ "children": PropTypes.node,
80
85
  "data-component": PropTypes.string,
81
-
82
- /** Identifier used for testing purposes, applied to the root element of the component. */
83
86
  "data-element": PropTypes.string,
84
-
85
- /** Identifier used for testing purposes, applied to the root element of the component. */
86
87
  "data-role": PropTypes.string,
87
-
88
- /** Unique id for the root element of the component */
89
- id: PropTypes.string.isRequired,
90
-
91
- /** Specifies the name prop to be applied to each button in the group */
92
- name: PropTypes.string.isRequired,
93
-
94
- /** Togglable buttons to be rendered. Only accepts children of type ButtonToggle */
95
- children: (props, propName, componentName) => {
96
- let error;
97
- const prop = props[propName];
98
- React.Children.forEach(prop, child => {
99
- if (!child) {
100
- return;
101
- }
102
-
103
- if (ButtonToggle.displayName !== child.type.displayName) {
104
- error = new Error(`\`${componentName}\` only accepts children of type \`${ButtonToggle.displayName}\`.`);
105
- }
106
- });
107
- return error;
108
- },
109
-
110
- /** Indicate that error has occurred
111
- Pass string to display icon, tooltip and red border
112
- Pass true boolean to only display red border */
113
- error: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),
114
-
115
- /** Indicate that warning has occurred
116
- Pass string to display icon, tooltip and orange border
117
- Pass true boolean to only display orange border */
118
- warning: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),
119
-
120
- /** Indicate additional information
121
- Pass string to display icon, tooltip and blue border
122
- Pass true boolean to only display blue border */
123
- info: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),
124
-
125
- /** When true, validation icon will be placed on label instead of being placed on the input */
126
- validationOnLabel: PropTypes.bool,
127
-
128
- /** Text for the label. */
129
- label: PropTypes.string,
130
-
131
- /** Text for the labels help tooltip. */
132
- labelHelp: PropTypes.node,
133
-
134
- /** Spacing between label and a field for inline label, given number will be multiplied by base spacing unit (8) */
135
- labelSpacing: PropTypes.oneOf([1, 2]),
136
-
137
- /** The percentage width of the ButtonToggleGroup. */
138
- inputWidth: PropTypes.number,
139
-
140
- /** The text for the field help. */
141
- fieldHelp: PropTypes.string,
142
-
143
- /** Sets the field help to inline. */
144
- fieldHelpInline: PropTypes.bool,
145
-
146
- /** Sets the label to be inline. */
147
- labelInline: PropTypes.bool,
148
-
149
- /** The percentage width of the label. */
150
- labelWidth: PropTypes.number,
151
-
152
- /** The alignment for the text in the label. */
153
- labelAlign: PropTypes.string,
154
-
155
- /** Callback fired when each RadioButton is blurred */
156
- onBlur: PropTypes.func,
157
-
158
- /** callback to handle change event */
159
- onChange: PropTypes.func,
160
-
161
- /** The value of the Button Toggle Group */
162
- value: PropTypes.string,
163
-
164
- /** Aria label for rendered help component */
165
- helpAriaLabel: PropTypes.string
88
+ "error": PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),
89
+ "fieldHelp": PropTypes.string,
90
+ "fieldHelpInline": PropTypes.bool,
91
+ "helpAriaLabel": PropTypes.string,
92
+ "id": PropTypes.string.isRequired,
93
+ "info": PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),
94
+ "inputWidth": PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
95
+ "label": PropTypes.string,
96
+ "labelAlign": PropTypes.oneOf(["left", "right"]),
97
+ "labelHelp": PropTypes.node,
98
+ "labelInline": PropTypes.bool,
99
+ "labelSpacing": PropTypes.oneOf([1, 2]),
100
+ "labelWidth": PropTypes.number,
101
+ "m": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.number, PropTypes.shape({
102
+ "__@toStringTag": PropTypes.string.isRequired,
103
+ "description": PropTypes.string,
104
+ "toString": PropTypes.func.isRequired,
105
+ "valueOf": PropTypes.func.isRequired
106
+ }), PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.shape({
107
+ "__@toStringTag": PropTypes.string.isRequired,
108
+ "description": PropTypes.string,
109
+ "toString": PropTypes.func.isRequired,
110
+ "valueOf": PropTypes.func.isRequired
111
+ }), PropTypes.string]),
112
+ "margin": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.number, PropTypes.shape({
113
+ "__@toStringTag": PropTypes.string.isRequired,
114
+ "description": PropTypes.string,
115
+ "toString": PropTypes.func.isRequired,
116
+ "valueOf": PropTypes.func.isRequired
117
+ }), PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.shape({
118
+ "__@toStringTag": PropTypes.string.isRequired,
119
+ "description": PropTypes.string,
120
+ "toString": PropTypes.func.isRequired,
121
+ "valueOf": PropTypes.func.isRequired
122
+ }), PropTypes.string]),
123
+ "marginBottom": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.number, PropTypes.shape({
124
+ "__@toStringTag": PropTypes.string.isRequired,
125
+ "description": PropTypes.string,
126
+ "toString": PropTypes.func.isRequired,
127
+ "valueOf": PropTypes.func.isRequired
128
+ }), PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.shape({
129
+ "__@toStringTag": PropTypes.string.isRequired,
130
+ "description": PropTypes.string,
131
+ "toString": PropTypes.func.isRequired,
132
+ "valueOf": PropTypes.func.isRequired
133
+ }), PropTypes.string]),
134
+ "marginLeft": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.number, PropTypes.shape({
135
+ "__@toStringTag": PropTypes.string.isRequired,
136
+ "description": PropTypes.string,
137
+ "toString": PropTypes.func.isRequired,
138
+ "valueOf": PropTypes.func.isRequired
139
+ }), PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.shape({
140
+ "__@toStringTag": PropTypes.string.isRequired,
141
+ "description": PropTypes.string,
142
+ "toString": PropTypes.func.isRequired,
143
+ "valueOf": PropTypes.func.isRequired
144
+ }), PropTypes.string]),
145
+ "marginRight": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.number, PropTypes.shape({
146
+ "__@toStringTag": PropTypes.string.isRequired,
147
+ "description": PropTypes.string,
148
+ "toString": PropTypes.func.isRequired,
149
+ "valueOf": PropTypes.func.isRequired
150
+ }), PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.shape({
151
+ "__@toStringTag": PropTypes.string.isRequired,
152
+ "description": PropTypes.string,
153
+ "toString": PropTypes.func.isRequired,
154
+ "valueOf": PropTypes.func.isRequired
155
+ }), PropTypes.string]),
156
+ "marginTop": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.number, PropTypes.shape({
157
+ "__@toStringTag": PropTypes.string.isRequired,
158
+ "description": PropTypes.string,
159
+ "toString": PropTypes.func.isRequired,
160
+ "valueOf": PropTypes.func.isRequired
161
+ }), PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.shape({
162
+ "__@toStringTag": PropTypes.string.isRequired,
163
+ "description": PropTypes.string,
164
+ "toString": PropTypes.func.isRequired,
165
+ "valueOf": PropTypes.func.isRequired
166
+ }), PropTypes.string]),
167
+ "marginX": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.number, PropTypes.shape({
168
+ "__@toStringTag": PropTypes.string.isRequired,
169
+ "description": PropTypes.string,
170
+ "toString": PropTypes.func.isRequired,
171
+ "valueOf": PropTypes.func.isRequired
172
+ }), PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.shape({
173
+ "__@toStringTag": PropTypes.string.isRequired,
174
+ "description": PropTypes.string,
175
+ "toString": PropTypes.func.isRequired,
176
+ "valueOf": PropTypes.func.isRequired
177
+ }), PropTypes.string]),
178
+ "marginY": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.number, PropTypes.shape({
179
+ "__@toStringTag": PropTypes.string.isRequired,
180
+ "description": PropTypes.string,
181
+ "toString": PropTypes.func.isRequired,
182
+ "valueOf": PropTypes.func.isRequired
183
+ }), PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.shape({
184
+ "__@toStringTag": PropTypes.string.isRequired,
185
+ "description": PropTypes.string,
186
+ "toString": PropTypes.func.isRequired,
187
+ "valueOf": PropTypes.func.isRequired
188
+ }), PropTypes.string]),
189
+ "mb": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.number, PropTypes.shape({
190
+ "__@toStringTag": PropTypes.string.isRequired,
191
+ "description": PropTypes.string,
192
+ "toString": PropTypes.func.isRequired,
193
+ "valueOf": PropTypes.func.isRequired
194
+ }), PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.shape({
195
+ "__@toStringTag": PropTypes.string.isRequired,
196
+ "description": PropTypes.string,
197
+ "toString": PropTypes.func.isRequired,
198
+ "valueOf": PropTypes.func.isRequired
199
+ }), PropTypes.string]),
200
+ "ml": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.number, PropTypes.shape({
201
+ "__@toStringTag": PropTypes.string.isRequired,
202
+ "description": PropTypes.string,
203
+ "toString": PropTypes.func.isRequired,
204
+ "valueOf": PropTypes.func.isRequired
205
+ }), PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.shape({
206
+ "__@toStringTag": PropTypes.string.isRequired,
207
+ "description": PropTypes.string,
208
+ "toString": PropTypes.func.isRequired,
209
+ "valueOf": PropTypes.func.isRequired
210
+ }), PropTypes.string]),
211
+ "mr": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.number, PropTypes.shape({
212
+ "__@toStringTag": PropTypes.string.isRequired,
213
+ "description": PropTypes.string,
214
+ "toString": PropTypes.func.isRequired,
215
+ "valueOf": PropTypes.func.isRequired
216
+ }), PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.shape({
217
+ "__@toStringTag": PropTypes.string.isRequired,
218
+ "description": PropTypes.string,
219
+ "toString": PropTypes.func.isRequired,
220
+ "valueOf": PropTypes.func.isRequired
221
+ }), PropTypes.string]),
222
+ "mt": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.number, PropTypes.shape({
223
+ "__@toStringTag": PropTypes.string.isRequired,
224
+ "description": PropTypes.string,
225
+ "toString": PropTypes.func.isRequired,
226
+ "valueOf": PropTypes.func.isRequired
227
+ }), PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.shape({
228
+ "__@toStringTag": PropTypes.string.isRequired,
229
+ "description": PropTypes.string,
230
+ "toString": PropTypes.func.isRequired,
231
+ "valueOf": PropTypes.func.isRequired
232
+ }), PropTypes.string]),
233
+ "mx": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.number, PropTypes.shape({
234
+ "__@toStringTag": PropTypes.string.isRequired,
235
+ "description": PropTypes.string,
236
+ "toString": PropTypes.func.isRequired,
237
+ "valueOf": PropTypes.func.isRequired
238
+ }), PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.shape({
239
+ "__@toStringTag": PropTypes.string.isRequired,
240
+ "description": PropTypes.string,
241
+ "toString": PropTypes.func.isRequired,
242
+ "valueOf": PropTypes.func.isRequired
243
+ }), PropTypes.string]),
244
+ "my": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.number, PropTypes.shape({
245
+ "__@toStringTag": PropTypes.string.isRequired,
246
+ "description": PropTypes.string,
247
+ "toString": PropTypes.func.isRequired,
248
+ "valueOf": PropTypes.func.isRequired
249
+ }), PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.shape({
250
+ "__@toStringTag": PropTypes.string.isRequired,
251
+ "description": PropTypes.string,
252
+ "toString": PropTypes.func.isRequired,
253
+ "valueOf": PropTypes.func.isRequired
254
+ }), PropTypes.string]),
255
+ "name": PropTypes.string.isRequired,
256
+ "onBlur": PropTypes.func,
257
+ "onChange": PropTypes.func,
258
+ "validationOnLabel": PropTypes.bool,
259
+ "value": PropTypes.string,
260
+ "warning": PropTypes.oneOfType([PropTypes.string, PropTypes.bool])
166
261
  };
167
262
  ButtonToggleGroup.displayName = "ButtonToggleGroup";
168
263
  export default ButtonToggleGroup;
@@ -0,0 +1,4 @@
1
+ import { ButtonToggleGroupProps } from ".";
2
+ import { ValidationProps } from "../../__internal__/validations";
3
+ declare const StyledButtonToggleGroup: import("styled-components").StyledComponent<"div", any, ValidationProps & Pick<ButtonToggleGroupProps, "inputWidth">, never>;
4
+ export default StyledButtonToggleGroup;