carbon-react 101.1.0 → 101.2.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.
@@ -11,6 +11,9 @@ export interface TooltipProviderProps {
11
11
  children: React.ReactNode;
12
12
  /** Aria label for rendered help component */
13
13
  helpAriaLabel?: string;
14
+ focusable?: boolean;
15
+ tooltipVisible?: boolean;
16
+ disabled?: boolean;
14
17
  }
15
18
 
16
19
  declare const ToolbarContext: React.Context<ToolbarContextProps>;
@@ -18,11 +18,17 @@ exports.TooltipContext = TooltipContext;
18
18
  const TooltipProvider = ({
19
19
  children,
20
20
  tooltipPosition,
21
- helpAriaLabel
21
+ helpAriaLabel,
22
+ focusable = true,
23
+ tooltipVisible,
24
+ disabled = false
22
25
  }) => /*#__PURE__*/_react.default.createElement(TooltipContext.Provider, {
23
26
  value: {
24
27
  tooltipPosition,
25
- helpAriaLabel
28
+ helpAriaLabel,
29
+ focusable,
30
+ tooltipVisible,
31
+ disabled
26
32
  }
27
33
  }, children);
28
34
 
@@ -30,5 +36,8 @@ exports.TooltipProvider = TooltipProvider;
30
36
  TooltipProvider.propTypes = {
31
37
  children: _propTypes.default.node.isRequired,
32
38
  tooltipPosition: _propTypes.default.oneOf(["top", "bottom", "left", "right"]),
33
- helpAriaLabel: _propTypes.default.string
39
+ helpAriaLabel: _propTypes.default.string,
40
+ focusable: _propTypes.default.bool,
41
+ tooltipVisible: _propTypes.default.bool,
42
+ disabled: _propTypes.default.bool
34
43
  };
@@ -57,6 +57,12 @@ const Icon = /*#__PURE__*/_react.default.forwardRef(({
57
57
  ...rest
58
58
  }, ref) => {
59
59
  const isInteractive = !!tooltipMessage && !disabled;
60
+ const {
61
+ tooltipPosition: tooltipPositionFromContext,
62
+ focusable: focusableFromContext,
63
+ tooltipVisible: tooltipVisibleFromContext,
64
+ disabled: disabledFromContext
65
+ } = (0, _react.useContext)(_tooltipProvider.TooltipContext);
60
66
  /** Return Icon type with overrides */
61
67
 
62
68
  const iconType = () => {
@@ -83,13 +89,14 @@ const Icon = /*#__PURE__*/_react.default.forwardRef(({
83
89
  }
84
90
  };
85
91
 
86
- const hasTooltip = !disabled && tooltipMessage && focusable;
92
+ const isFocusable = focusableFromContext !== undefined ? focusableFromContext : focusable;
93
+ const hasTooltip = !disabled && !disabledFromContext && tooltipMessage && isFocusable;
87
94
  const styleProps = {
88
95
  bg,
89
96
  bgSize,
90
97
  bgShape,
91
98
  color,
92
- disabled,
99
+ disabled: disabledFromContext || disabled,
93
100
  fontSize,
94
101
  isInteractive,
95
102
  type: iconType(),
@@ -108,12 +115,9 @@ const Icon = /*#__PURE__*/_react.default.forwardRef(({
108
115
  role: hasTooltip && role === undefined ? "tooltip" : role
109
116
  }));
110
117
 
111
- const {
112
- tooltipPosition: tooltipPositionFromContext
113
- } = (0, _react.useContext)(_tooltipProvider.TooltipContext);
114
-
115
118
  if (tooltipMessage) {
116
- const visible = disabled ? false : tooltipVisible;
119
+ const showTooltip = tooltipVisibleFromContext !== undefined ? tooltipVisibleFromContext : tooltipVisible;
120
+ const visible = disabled ? false : showTooltip;
117
121
  return /*#__PURE__*/_react.default.createElement(_tooltip.default, {
118
122
  message: tooltipMessage,
119
123
  position: tooltipPositionFromContext || tooltipPosition,
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- var _react = _interopRequireDefault(require("react"));
8
+ var _react = _interopRequireWildcard(require("react"));
9
9
 
10
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
11
11
 
@@ -19,8 +19,14 @@ var _icon = _interopRequireDefault(require("../icon"));
19
19
 
20
20
  var _utils = require("../../style/utils");
21
21
 
22
+ var _tooltipProvider = require("../../__internal__/tooltip-provider");
23
+
22
24
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
25
 
26
+ function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
27
+
28
+ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (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; }
29
+
24
30
  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); }
25
31
 
26
32
  const marginPropTypes = (0, _utils.filterStyledSystemMarginProps)(_propTypes2.default.space);
@@ -29,9 +35,16 @@ const IconButton = /*#__PURE__*/_react.default.forwardRef(({
29
35
  "aria-label": ariaLabel,
30
36
  onAction,
31
37
  children,
38
+ disabled,
32
39
  ...rest
33
40
  }, ref) => {
34
41
  const marginProps = (0, _utils.filterStyledSystemMarginProps)(rest);
42
+ const hasIconWithTooltip = !!_react.default.Children.toArray(children).find(child => {
43
+ var _child$props;
44
+
45
+ return child === null || child === void 0 ? void 0 : (_child$props = child.props) === null || _child$props === void 0 ? void 0 : _child$props.tooltipMessage;
46
+ });
47
+ const [tooltipVisible, setTooltipVisible] = (0, _react.useState)(undefined);
35
48
 
36
49
  const onKeyDown = e => {
37
50
  if (_events.default.isEnterKey(e) || _events.default.isSpaceKey(e)) {
@@ -46,12 +59,27 @@ const IconButton = /*#__PURE__*/_react.default.forwardRef(({
46
59
  onAction(e);
47
60
  };
48
61
 
62
+ const handleTooltipVisibility = (ev, callbackName) => {
63
+ setTooltipVisible(["onFocus", "onMouseEnter"].includes(callbackName));
64
+ if (rest[callbackName]) rest[callbackName](ev);
65
+ };
66
+
49
67
  return /*#__PURE__*/_react.default.createElement(_iconButton.default, _extends({}, rest, {
50
68
  "aria-label": ariaLabel,
51
69
  onKeyDown: onKeyDown,
52
70
  onClick: handleOnAction,
53
- ref: ref
54
- }, marginProps), children);
71
+ ref: ref,
72
+ disabled: disabled
73
+ }, !disabled && hasIconWithTooltip && {
74
+ onFocus: ev => handleTooltipVisibility(ev, "onFocus"),
75
+ onBlur: ev => handleTooltipVisibility(ev, "onBlur"),
76
+ onMouseEnter: ev => handleTooltipVisibility(ev, "onMouseEnter"),
77
+ onMouseLeave: ev => handleTooltipVisibility(ev, "onMouseLeave")
78
+ }, marginProps), /*#__PURE__*/_react.default.createElement(_tooltipProvider.TooltipProvider, {
79
+ disabled: disabled,
80
+ tooltipVisible: tooltipVisible,
81
+ focusable: false
82
+ }, children));
55
83
  });
56
84
 
57
85
  IconButton.propTypes = { ...marginPropTypes,
@@ -65,7 +93,10 @@ IconButton.propTypes = { ...marginPropTypes,
65
93
  onAction: _propTypes.default.func.isRequired,
66
94
 
67
95
  /** Prop to specify the aria-label of the icon-button component */
68
- "aria-label": _propTypes.default.string
96
+ "aria-label": _propTypes.default.string,
97
+
98
+ /** Set the button to disabled */
99
+ disabled: _propTypes.default.bool
69
100
  };
70
101
  var _default = IconButton;
71
102
  exports.default = _default;
@@ -7,6 +7,8 @@ export interface IconButtonProps extends MarginProps {
7
7
  children: React.ReactElement<IconProps>;
8
8
  /** Callback */
9
9
  onAction: React.MouseEventHandler<HTMLButtonElement>;
10
+ /** Set the button to disabled */
11
+ disabled?: boolean;
10
12
  }
11
13
 
12
14
  declare function IconButton(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "carbon-react",
3
- "version": "101.1.0",
3
+ "version": "101.2.0",
4
4
  "description": "A library of reusable React components for easily building user interfaces.",
5
5
  "engineStrict": true,
6
6
  "engines": {