carbon-react 153.0.1 → 153.0.3

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.
@@ -10,7 +10,9 @@ import IconButton from "../icon-button";
10
10
  import Icon from "../icon";
11
11
  import useLocale from "../../hooks/__internal__/useLocale";
12
12
  import useModalAria from "../../hooks/__internal__/useModalAria/useModalAria";
13
+ import Logger from "../../__internal__/utils/logger";
13
14
  const PADDING_VALUES = [0, 1, 2, 3, 4, 5, 6, 7, 8];
15
+ let deprecatedTimeoutTrigger = false;
14
16
  export const Dialog = /*#__PURE__*/forwardRef(({
15
17
  className,
16
18
  "data-component": dataComponent = "dialog",
@@ -54,6 +56,10 @@ export const Dialog = /*#__PURE__*/forwardRef(({
54
56
  current: subtitleId
55
57
  } = useRef(createGuid());
56
58
  const isTopModal = useModalAria(containerRef);
59
+ if (!deprecatedTimeoutTrigger && rest?.timeout) {
60
+ deprecatedTimeoutTrigger = true;
61
+ Logger.deprecate("The timeout prop in Dialog is deprecated and will soon be removed.");
62
+ }
57
63
  useImperativeHandle(ref, () => ({
58
64
  focus() {
59
65
  containerRef.current?.focus();
@@ -2,7 +2,7 @@ import React from "react";
2
2
  import { ModalProps } from "../modal";
3
3
  import { CustomRefObject } from "../../__internal__/focus-trap";
4
4
  import { TagProps } from "../../__internal__/utils/helpers/tags";
5
- export interface DialogFullScreenProps extends ModalProps {
5
+ export interface DialogFullScreenProps extends Omit<ModalProps, "disableClose"> {
6
6
  /** Prop to specify the aria-describedby property of the DialogFullscreen component */
7
7
  "aria-describedby"?: string;
8
8
  /**
@@ -54,6 +54,8 @@ export interface DialogFullScreenProps extends ModalProps {
54
54
  focusableSelectors?: string;
55
55
  /** A custom close event handler */
56
56
  onCancel?: (ev: React.KeyboardEvent<HTMLElement> | KeyboardEvent | React.MouseEvent<HTMLButtonElement>) => void;
57
+ /** @deprecated Determines if the Dialog can be closed */
58
+ disableClose?: boolean;
57
59
  }
58
60
  export declare const DialogFullScreen: ({ "aria-describedby": ariaDescribedBy, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, disableAutoFocus, focusFirstElement, bespokeFocusTrap, open, children, title, subtitle, pagesStyling, headerChildren, showCloseIcon, disableContentPadding, disableEscKey, onCancel, contentRef, help, role, focusableContainers, focusableSelectors, topModalOverride, closeButtonDataProps, restoreFocusOnClose, ...rest }: DialogFullScreenProps) => React.JSX.Element;
59
61
  export default DialogFullScreen;
@@ -12,6 +12,9 @@ import Icon from "../icon";
12
12
  import useLocale from "../../hooks/__internal__/useLocale";
13
13
  import useModalAria from "../../hooks/__internal__/useModalAria/useModalAria";
14
14
  import tagComponent from "../../__internal__/utils/helpers/tags";
15
+ import Logger from "../../__internal__/utils/logger";
16
+ let deprecatedDisableCloseTrigger = false;
17
+ let deprecatedTimeoutTrigger = false;
15
18
  export const DialogFullScreen = ({
16
19
  "aria-describedby": ariaDescribedBy,
17
20
  "aria-label": ariaLabel,
@@ -49,6 +52,14 @@ export const DialogFullScreen = ({
49
52
  current: subtitleId
50
53
  } = useRef(createGuid());
51
54
  const isTopModal = useModalAria(dialogRef);
55
+ if (!deprecatedDisableCloseTrigger && rest?.disableClose) {
56
+ deprecatedDisableCloseTrigger = true;
57
+ Logger.deprecate("The disableClose prop in DialogFullScreen is deprecated and will soon be removed.");
58
+ }
59
+ if (!deprecatedTimeoutTrigger && rest?.timeout) {
60
+ deprecatedTimeoutTrigger = true;
61
+ Logger.deprecate("The timeout prop in DialogFullScreen is deprecated and will soon be removed.");
62
+ }
52
63
  const closeIcon = () => {
53
64
  if (!showCloseIcon || !onCancel) return null;
54
65
  return /*#__PURE__*/React.createElement(IconButton, _extends({
@@ -21,7 +21,7 @@ export interface ModalProps extends TagProps {
21
21
  onCancel?: (ev: React.KeyboardEvent<HTMLElement> | KeyboardEvent) => void;
22
22
  /** Sets the open state of the modal */
23
23
  open: boolean;
24
- /** Transition time */
24
+ /** @deprecated Transition time */
25
25
  timeout?: number;
26
26
  /** Manually override the internal modal stacking order to set this as top */
27
27
  topModalOverride?: boolean;
@@ -48,7 +48,9 @@ const SwitchSlider = ({
48
48
  };
49
49
  const sliderContent = /*#__PURE__*/React.createElement(SwitchSliderPanel, _extends({
50
50
  "data-role": "slider-panel"
51
- }, sliderPanelStyleProps), loading ? /*#__PURE__*/React.createElement(Loader, _extends({
51
+ }, sliderPanelStyleProps, {
52
+ "aria-live": "polite"
53
+ }), loading ? /*#__PURE__*/React.createElement(Loader, _extends({
52
54
  "data-role": "switch-slider-loader"
53
55
  }, loaderProps)) : panelContent);
54
56
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(HiddenContent, {
@@ -60,9 +60,13 @@ export const Switch = /*#__PURE__*/React.forwardRef(({
60
60
  Logger.deprecate("Uncontrolled behaviour in `Switch` is deprecated and support will soon be removed. Please make sure all your inputs are controlled.");
61
61
  }
62
62
  const onChangeInternal = useCallback(e => {
63
- setCheckedInternal(e.target.checked);
64
- onChange?.(e);
65
- }, [setCheckedInternal, onChange]);
63
+ if (loading) {
64
+ e.preventDefault();
65
+ } else {
66
+ setCheckedInternal(e.target.checked);
67
+ onChange?.(e);
68
+ }
69
+ }, [setCheckedInternal, onChange, loading]);
66
70
  const largeScreen = useIsAboveBreakpoint(adaptiveLabelBreakpoint);
67
71
  let shouldLabelBeInline = labelInline;
68
72
  // Coverage has been ignored here as this functionality is covered in a Playwright test.
@@ -88,7 +92,7 @@ export const Switch = /*#__PURE__*/React.forwardRef(({
88
92
  };
89
93
  const switchSliderProps = {
90
94
  checked: isControlled ? checked : checkedInternal,
91
- disabled: disabled || loading,
95
+ disabled,
92
96
  loading,
93
97
  isDarkBackground,
94
98
  size,
@@ -102,7 +106,7 @@ export const Switch = /*#__PURE__*/React.forwardRef(({
102
106
  error,
103
107
  warning,
104
108
  info,
105
- disabled: disabled || loading,
109
+ disabled,
106
110
  loading,
107
111
  checked: isControlled ? checked : checkedInternal,
108
112
  label,
@@ -143,7 +147,7 @@ export const Switch = /*#__PURE__*/React.forwardRef(({
143
147
  };
144
148
  const switchSliderPropsForNewValidation = {
145
149
  checked: isControlled ? checked : checkedInternal,
146
- disabled: disabled || loading,
150
+ disabled,
147
151
  loading,
148
152
  isDarkBackground,
149
153
  size,
@@ -155,7 +159,7 @@ export const Switch = /*#__PURE__*/React.forwardRef(({
155
159
  // set aria-invalid but prevent validationIconId from being added to aria-describedby
156
160
  error: !!error,
157
161
  warning,
158
- disabled: disabled || loading,
162
+ disabled,
159
163
  loading,
160
164
  checked: isControlled ? checked : checkedInternal,
161
165
  onBlur,
@@ -15,11 +15,13 @@ var _iconButton = _interopRequireDefault(require("../icon-button"));
15
15
  var _icon = _interopRequireDefault(require("../icon"));
16
16
  var _useLocale = _interopRequireDefault(require("../../hooks/__internal__/useLocale"));
17
17
  var _useModalAria = _interopRequireDefault(require("../../hooks/__internal__/useModalAria/useModalAria"));
18
+ var _logger = _interopRequireDefault(require("../../__internal__/utils/logger"));
18
19
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
19
20
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
20
21
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
21
22
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
22
23
  const PADDING_VALUES = [0, 1, 2, 3, 4, 5, 6, 7, 8];
24
+ let deprecatedTimeoutTrigger = false;
23
25
  const Dialog = exports.Dialog = /*#__PURE__*/(0, _react.forwardRef)(({
24
26
  className,
25
27
  "data-component": dataComponent = "dialog",
@@ -63,6 +65,10 @@ const Dialog = exports.Dialog = /*#__PURE__*/(0, _react.forwardRef)(({
63
65
  current: subtitleId
64
66
  } = (0, _react.useRef)((0, _guid.default)());
65
67
  const isTopModal = (0, _useModalAria.default)(containerRef);
68
+ if (!deprecatedTimeoutTrigger && rest?.timeout) {
69
+ deprecatedTimeoutTrigger = true;
70
+ _logger.default.deprecate("The timeout prop in Dialog is deprecated and will soon be removed.");
71
+ }
66
72
  (0, _react.useImperativeHandle)(ref, () => ({
67
73
  focus() {
68
74
  containerRef.current?.focus();
@@ -2,7 +2,7 @@ import React from "react";
2
2
  import { ModalProps } from "../modal";
3
3
  import { CustomRefObject } from "../../__internal__/focus-trap";
4
4
  import { TagProps } from "../../__internal__/utils/helpers/tags";
5
- export interface DialogFullScreenProps extends ModalProps {
5
+ export interface DialogFullScreenProps extends Omit<ModalProps, "disableClose"> {
6
6
  /** Prop to specify the aria-describedby property of the DialogFullscreen component */
7
7
  "aria-describedby"?: string;
8
8
  /**
@@ -54,6 +54,8 @@ export interface DialogFullScreenProps extends ModalProps {
54
54
  focusableSelectors?: string;
55
55
  /** A custom close event handler */
56
56
  onCancel?: (ev: React.KeyboardEvent<HTMLElement> | KeyboardEvent | React.MouseEvent<HTMLButtonElement>) => void;
57
+ /** @deprecated Determines if the Dialog can be closed */
58
+ disableClose?: boolean;
57
59
  }
58
60
  export declare const DialogFullScreen: ({ "aria-describedby": ariaDescribedBy, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, disableAutoFocus, focusFirstElement, bespokeFocusTrap, open, children, title, subtitle, pagesStyling, headerChildren, showCloseIcon, disableContentPadding, disableEscKey, onCancel, contentRef, help, role, focusableContainers, focusableSelectors, topModalOverride, closeButtonDataProps, restoreFocusOnClose, ...rest }: DialogFullScreenProps) => React.JSX.Element;
59
61
  export default DialogFullScreen;
@@ -17,10 +17,13 @@ var _icon = _interopRequireDefault(require("../icon"));
17
17
  var _useLocale = _interopRequireDefault(require("../../hooks/__internal__/useLocale"));
18
18
  var _useModalAria = _interopRequireDefault(require("../../hooks/__internal__/useModalAria/useModalAria"));
19
19
  var _tags = _interopRequireDefault(require("../../__internal__/utils/helpers/tags"));
20
+ var _logger = _interopRequireDefault(require("../../__internal__/utils/logger"));
20
21
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
21
22
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
22
23
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
23
24
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
25
+ let deprecatedDisableCloseTrigger = false;
26
+ let deprecatedTimeoutTrigger = false;
24
27
  const DialogFullScreen = ({
25
28
  "aria-describedby": ariaDescribedBy,
26
29
  "aria-label": ariaLabel,
@@ -58,6 +61,14 @@ const DialogFullScreen = ({
58
61
  current: subtitleId
59
62
  } = (0, _react.useRef)((0, _guid.default)());
60
63
  const isTopModal = (0, _useModalAria.default)(dialogRef);
64
+ if (!deprecatedDisableCloseTrigger && rest?.disableClose) {
65
+ deprecatedDisableCloseTrigger = true;
66
+ _logger.default.deprecate("The disableClose prop in DialogFullScreen is deprecated and will soon be removed.");
67
+ }
68
+ if (!deprecatedTimeoutTrigger && rest?.timeout) {
69
+ deprecatedTimeoutTrigger = true;
70
+ _logger.default.deprecate("The timeout prop in DialogFullScreen is deprecated and will soon be removed.");
71
+ }
61
72
  const closeIcon = () => {
62
73
  if (!showCloseIcon || !onCancel) return null;
63
74
  return /*#__PURE__*/_react.default.createElement(_iconButton.default, _extends({
@@ -21,7 +21,7 @@ export interface ModalProps extends TagProps {
21
21
  onCancel?: (ev: React.KeyboardEvent<HTMLElement> | KeyboardEvent) => void;
22
22
  /** Sets the open state of the modal */
23
23
  open: boolean;
24
- /** Transition time */
24
+ /** @deprecated Transition time */
25
25
  timeout?: number;
26
26
  /** Manually override the internal modal stacking order to set this as top */
27
27
  topModalOverride?: boolean;
@@ -55,7 +55,9 @@ const SwitchSlider = ({
55
55
  };
56
56
  const sliderContent = /*#__PURE__*/_react.default.createElement(_switchSliderPanel.default, _extends({
57
57
  "data-role": "slider-panel"
58
- }, sliderPanelStyleProps), loading ? /*#__PURE__*/_react.default.createElement(_loader.default, _extends({
58
+ }, sliderPanelStyleProps, {
59
+ "aria-live": "polite"
60
+ }), loading ? /*#__PURE__*/_react.default.createElement(_loader.default, _extends({
59
61
  "data-role": "switch-slider-loader"
60
62
  }, loaderProps)) : panelContent);
61
63
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_switchSlider.HiddenContent, {
@@ -69,9 +69,13 @@ const Switch = exports.Switch = /*#__PURE__*/_react.default.forwardRef(({
69
69
  _logger.default.deprecate("Uncontrolled behaviour in `Switch` is deprecated and support will soon be removed. Please make sure all your inputs are controlled.");
70
70
  }
71
71
  const onChangeInternal = (0, _react.useCallback)(e => {
72
- setCheckedInternal(e.target.checked);
73
- onChange?.(e);
74
- }, [setCheckedInternal, onChange]);
72
+ if (loading) {
73
+ e.preventDefault();
74
+ } else {
75
+ setCheckedInternal(e.target.checked);
76
+ onChange?.(e);
77
+ }
78
+ }, [setCheckedInternal, onChange, loading]);
75
79
  const largeScreen = (0, _useIsAboveBreakpoint.default)(adaptiveLabelBreakpoint);
76
80
  let shouldLabelBeInline = labelInline;
77
81
  // Coverage has been ignored here as this functionality is covered in a Playwright test.
@@ -97,7 +101,7 @@ const Switch = exports.Switch = /*#__PURE__*/_react.default.forwardRef(({
97
101
  };
98
102
  const switchSliderProps = {
99
103
  checked: isControlled ? checked : checkedInternal,
100
- disabled: disabled || loading,
104
+ disabled,
101
105
  loading,
102
106
  isDarkBackground,
103
107
  size,
@@ -111,7 +115,7 @@ const Switch = exports.Switch = /*#__PURE__*/_react.default.forwardRef(({
111
115
  error,
112
116
  warning,
113
117
  info,
114
- disabled: disabled || loading,
118
+ disabled,
115
119
  loading,
116
120
  checked: isControlled ? checked : checkedInternal,
117
121
  label,
@@ -152,7 +156,7 @@ const Switch = exports.Switch = /*#__PURE__*/_react.default.forwardRef(({
152
156
  };
153
157
  const switchSliderPropsForNewValidation = {
154
158
  checked: isControlled ? checked : checkedInternal,
155
- disabled: disabled || loading,
159
+ disabled,
156
160
  loading,
157
161
  isDarkBackground,
158
162
  size,
@@ -164,7 +168,7 @@ const Switch = exports.Switch = /*#__PURE__*/_react.default.forwardRef(({
164
168
  // set aria-invalid but prevent validationIconId from being added to aria-describedby
165
169
  error: !!error,
166
170
  warning,
167
- disabled: disabled || loading,
171
+ disabled,
168
172
  loading,
169
173
  checked: isControlled ? checked : checkedInternal,
170
174
  onBlur,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "carbon-react",
3
- "version": "153.0.1",
3
+ "version": "153.0.3",
4
4
  "description": "A library of reusable React components for easily building user interfaces.",
5
5
  "files": [
6
6
  "lib",
@@ -8,6 +8,7 @@
8
8
  ],
9
9
  "scripts": {
10
10
  "start": "node ./scripts/check_node_version.mjs && dotenvx run -- storybook dev -p 9001 -c .storybook",
11
+ "start:strict-mode": "node ./scripts/check_node_version.mjs && dotenvx run --env ENABLE_REACT_STRICT_MODE=true -- storybook dev -p 9001 -c .storybook",
11
12
  "test": "jest --config=./jest.config.ts",
12
13
  "test-update": "jest --config=./jest.config.ts --updateSnapshot",
13
14
  "format": "prettier --write './{src,playwright}/**/*.{js,jsx,ts,tsx}'",