carbon-react 107.0.0 → 107.1.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.
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ export interface ClickAwayWrapperProps {
3
+ children: React.ReactNode;
4
+ handleClickAway: (ev: CustomEvent) => void;
5
+ eventTypeId?: "mousedown" | "click";
6
+ targets: React.RefObject<HTMLElement>[];
7
+ }
8
+ declare const ClickAwayWrapper: {
9
+ ({ children, handleClickAway, eventTypeId, targets, }: ClickAwayWrapperProps): JSX.Element;
10
+ displayName: string;
11
+ };
12
+ export default ClickAwayWrapper;
@@ -0,0 +1,43 @@
1
+ import React, { useEffect } from "react";
2
+ import PropTypes from "prop-types";
3
+ import Events from "../utils/helpers/events";
4
+
5
+ const ClickAwayWrapper = ({
6
+ children,
7
+ handleClickAway,
8
+ eventTypeId = "click",
9
+ targets
10
+ }) => {
11
+ useEffect(() => {
12
+ const fnClickAway = ev => {
13
+ const clickedElements = targets.filter(ref => (ref === null || ref === void 0 ? void 0 : ref.current) && Events.composedPath(ev).includes(ref.current));
14
+
15
+ if (!clickedElements || !clickedElements.length) {
16
+ handleClickAway(ev);
17
+ }
18
+ };
19
+
20
+ document.addEventListener(eventTypeId, fnClickAway);
21
+ return function cleanup() {
22
+ document.removeEventListener(eventTypeId, fnClickAway);
23
+ };
24
+ }, [handleClickAway, targets, eventTypeId]);
25
+ return /*#__PURE__*/React.createElement(React.Fragment, null, children);
26
+ };
27
+
28
+ ClickAwayWrapper.propTypes = {
29
+ "children": PropTypes.node,
30
+ "eventTypeId": PropTypes.oneOf(["click", "mousedown"]),
31
+ "handleClickAway": PropTypes.func.isRequired,
32
+ "targets": PropTypes.arrayOf(PropTypes.shape({
33
+ "current": PropTypes.oneOfType([PropTypes.oneOf([null]), function (props, propName) {
34
+ if (props[propName] == null) {
35
+ return new Error("Prop '" + propName + "' is required but wasn't specified");
36
+ } else if (typeof props[propName] !== 'object' || props[propName].nodeType !== 1) {
37
+ return new Error("Expected prop '" + propName + "' to be of type Element");
38
+ }
39
+ }]).isRequired
40
+ })).isRequired
41
+ };
42
+ ClickAwayWrapper.displayName = "ClickAwayWrapper";
43
+ export default ClickAwayWrapper;
@@ -0,0 +1,2 @@
1
+ export { default } from "./click-away-wrapper.component";
2
+ export type { ClickAwayWrapperProps } from "./click-away-wrapper.component";
@@ -0,0 +1 @@
1
+ export { default } from "./click-away-wrapper.component";
@@ -12,6 +12,7 @@ import StyledDateInput from "./date.style";
12
12
  import Textbox from "../textbox";
13
13
  import DatePicker from "./__internal__/date-picker";
14
14
  import DateRangeContext from "../date-range/date-range.context";
15
+ import ClickAwayWrapper from "../../__internal__/click-away-wrapper";
15
16
  const marginPropTypes = filterStyledSystemMarginProps(styledSystemPropTypes.space);
16
17
 
17
18
  const DateInput = ({
@@ -234,23 +235,6 @@ const DateInput = ({
234
235
  }
235
236
  };
236
237
 
237
- useEffect(() => {
238
- const fnClosePicker = ev => {
239
- if (open && !Events.composedPath(ev).includes(parentRef.current) && !Events.composedPath(ev).includes(pickerRef.current)) {
240
- alreadyFocused.current = true;
241
- inputRef.current.focus();
242
- isBlurBlocked.current = false;
243
- inputRef.current.blur();
244
- setOpen(false);
245
- alreadyFocused.current = false;
246
- }
247
- };
248
-
249
- document.addEventListener("mousedown", fnClosePicker);
250
- return function cleanup() {
251
- document.removeEventListener("mousedown", fnClosePicker);
252
- };
253
- }, [open]);
254
238
  useEffect(() => {
255
239
  const [matchedFormat, matchedValue] = findMatchedFormatAndValue(value, formats);
256
240
 
@@ -282,7 +266,22 @@ const DateInput = ({
282
266
  return value;
283
267
  };
284
268
 
285
- return /*#__PURE__*/React.createElement(StyledDateInput, _extends({
269
+ const handleClickAway = () => {
270
+ if (open) {
271
+ alreadyFocused.current = true;
272
+ inputRef.current.focus();
273
+ isBlurBlocked.current = false;
274
+ inputRef.current.blur();
275
+ setOpen(false);
276
+ alreadyFocused.current = false;
277
+ }
278
+ };
279
+
280
+ return /*#__PURE__*/React.createElement(ClickAwayWrapper, {
281
+ handleClickAway: handleClickAway,
282
+ eventTypeId: "mousedown",
283
+ targets: [parentRef, pickerRef]
284
+ }, /*#__PURE__*/React.createElement(StyledDateInput, _extends({
286
285
  ref: wrapperRef,
287
286
  role: "presentation",
288
287
  size: size,
@@ -322,13 +321,13 @@ const DateInput = ({
322
321
  ref: pickerRef,
323
322
  pickerMouseDown: handlePickerMouseDown,
324
323
  open: open
325
- }));
324
+ })));
326
325
  };
327
326
 
328
327
  DateInput.propTypes = { ...Textbox.propTypes,
329
328
  ...marginPropTypes,
330
329
 
331
- /** Pass any props that match the [DayPickerProps](https://react-day-picker.js.org/api/DayPicker)
330
+ /** Pass any props that match the [DayPickerProps](https://react-day-picker-v7.netlify.app/docs/getting-started/)
332
331
  * interface to override default behaviors
333
332
  * */
334
333
  pickerProps: PropTypes.object,
@@ -12,6 +12,7 @@ import MenuItem from "../../menu-item";
12
12
  import { characterNavigation } from "../keyboard-navigation";
13
13
  import ScrollableBlock from "../../scrollable-block";
14
14
  import SubmenuContext from "./submenu.context";
15
+ import ClickAwayWrapper from "../../../../__internal__/click-away-wrapper";
15
16
  const Submenu = /*#__PURE__*/React.forwardRef(({
16
17
  children,
17
18
  className,
@@ -183,12 +184,11 @@ const Submenu = /*#__PURE__*/React.forwardRef(({
183
184
  }
184
185
  }
185
186
  }, [submenuFocusIndex, submenuOpen, href, menuContext, arrayOfFormattedChildren, numberOfChildren, openSubmenu, closeSubmenu, onKeyDown, characterString, restartCharacterTimeout, startCharacterTimeout]);
186
- const onClickOutside = useCallback(event => {
187
- if (!Events.composedPath(event).includes(submenuRef.current)) {
188
- document.removeEventListener("click", onClickOutside);
189
- closeSubmenu();
190
- }
191
- }, [closeSubmenu]);
187
+
188
+ const handleClickAway = () => {
189
+ document.removeEventListener("click", handleClickAway);
190
+ closeSubmenu();
191
+ };
192
192
 
193
193
  const handleClick = event => {
194
194
  if (clickToOpen) {
@@ -207,15 +207,6 @@ const Submenu = /*#__PURE__*/React.forwardRef(({
207
207
  } // eslint-disable-next-line react-hooks/exhaustive-deps
208
208
 
209
209
  }, [characterString]);
210
- useEffect(() => {
211
- if (submenuOpen) {
212
- document.addEventListener("click", onClickOutside);
213
- }
214
-
215
- return function cleanup() {
216
- document.removeEventListener("click", onClickOutside);
217
- };
218
- }, [onClickOutside, submenuOpen]);
219
210
 
220
211
  if (inFullscreenView) {
221
212
  return /*#__PURE__*/React.createElement(StyledSubmenuWrapper, {
@@ -249,7 +240,10 @@ const Submenu = /*#__PURE__*/React.forwardRef(({
249
240
  }, child))));
250
241
  }
251
242
 
252
- return /*#__PURE__*/React.createElement(StyledSubmenuWrapper, {
243
+ return /*#__PURE__*/React.createElement(ClickAwayWrapper, {
244
+ handleClickAway: handleClickAway,
245
+ targets: [submenuRef]
246
+ }, /*#__PURE__*/React.createElement(StyledSubmenuWrapper, {
253
247
  "data-component": "submenu-wrapper",
254
248
  onMouseOver: !clickToOpen ? () => openSubmenu() : undefined,
255
249
  onMouseLeave: () => closeSubmenu(),
@@ -287,7 +281,7 @@ const Submenu = /*#__PURE__*/React.forwardRef(({
287
281
  updateFocusIndex: setSubmenuFocusIndex,
288
282
  itemIndex: child.type === MenuItem ? index : undefined
289
283
  }
290
- }, child))));
284
+ }, child)))));
291
285
  });
292
286
  Submenu.propTypes = {
293
287
  /** Children elements */
@@ -8,6 +8,7 @@ import { PopoverContainerWrapperStyle, PopoverContainerHeaderStyle, PopoverConta
8
8
  import Icon from "../icon";
9
9
  import createGuid from "../../__internal__/utils/helpers/guid";
10
10
  import { filterStyledSystemPaddingProps } from "../../style/utils";
11
+ import ClickAwayWrapper from "../../__internal__/click-away-wrapper";
11
12
  const paddingPropTypes = filterStyledSystemPaddingProps(styledSystemPropTypes.space);
12
13
 
13
14
  const PopoverContainer = ({
@@ -28,6 +29,7 @@ const PopoverContainer = ({
28
29
  }) => {
29
30
  const isControlled = open !== undefined;
30
31
  const [isOpenInternal, setIsOpenInternal] = useState(false);
32
+ const ref = useRef();
31
33
  const closeButtonRef = useRef();
32
34
  const openButtonRef = useRef();
33
35
  const guid = useRef(createGuid());
@@ -68,10 +70,21 @@ const PopoverContainer = ({
68
70
  ref: closeButtonRef,
69
71
  ariaLabel: closeButtonAriaLabel
70
72
  };
71
- return /*#__PURE__*/React.createElement(PopoverContainerWrapperStyle, {
73
+
74
+ const handleClickAway = e => {
75
+ if (!isControlled) setIsOpenInternal(false);
76
+ if (onClose) onClose(e);
77
+ };
78
+
79
+ return /*#__PURE__*/React.createElement(ClickAwayWrapper, {
80
+ targets: [ref],
81
+ handleClickAway: handleClickAway,
82
+ eventTypeId: "mousedown"
83
+ }, /*#__PURE__*/React.createElement(PopoverContainerWrapperStyle, {
72
84
  "data-component": "popover-container",
73
85
  role: "region",
74
- "aria-labelledby": popoverContainerId
86
+ "aria-labelledby": popoverContainerId,
87
+ ref: ref
75
88
  }, renderOpenComponent(renderOpenComponentProps), /*#__PURE__*/React.createElement(Transition, {
76
89
  in: isOpen,
77
90
  timeout: {
@@ -95,7 +108,7 @@ const PopoverContainer = ({
95
108
  }, filterStyledSystemPaddingProps(rest)), /*#__PURE__*/React.createElement(PopoverContainerHeaderStyle, null, /*#__PURE__*/React.createElement(PopoverContainerTitleStyle, {
96
109
  id: popoverContainerId,
97
110
  "data-element": "popover-container-title"
98
- }, title), renderCloseComponent(renderCloseComponentProps)), children)));
111
+ }, title), renderCloseComponent(renderCloseComponentProps)), children))));
99
112
  };
100
113
 
101
114
  PopoverContainer.propTypes = { ...paddingPropTypes,
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ export interface ClickAwayWrapperProps {
3
+ children: React.ReactNode;
4
+ handleClickAway: (ev: CustomEvent) => void;
5
+ eventTypeId?: "mousedown" | "click";
6
+ targets: React.RefObject<HTMLElement>[];
7
+ }
8
+ declare const ClickAwayWrapper: {
9
+ ({ children, handleClickAway, eventTypeId, targets, }: ClickAwayWrapperProps): JSX.Element;
10
+ displayName: string;
11
+ };
12
+ export default ClickAwayWrapper;
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ var _events = _interopRequireDefault(require("../utils/helpers/events"));
13
+
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+
16
+ function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
17
+
18
+ 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; }
19
+
20
+ const ClickAwayWrapper = ({
21
+ children,
22
+ handleClickAway,
23
+ eventTypeId = "click",
24
+ targets
25
+ }) => {
26
+ (0, _react.useEffect)(() => {
27
+ const fnClickAway = ev => {
28
+ const clickedElements = targets.filter(ref => (ref === null || ref === void 0 ? void 0 : ref.current) && _events.default.composedPath(ev).includes(ref.current));
29
+
30
+ if (!clickedElements || !clickedElements.length) {
31
+ handleClickAway(ev);
32
+ }
33
+ };
34
+
35
+ document.addEventListener(eventTypeId, fnClickAway);
36
+ return function cleanup() {
37
+ document.removeEventListener(eventTypeId, fnClickAway);
38
+ };
39
+ }, [handleClickAway, targets, eventTypeId]);
40
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children);
41
+ };
42
+
43
+ ClickAwayWrapper.propTypes = {
44
+ "children": _propTypes.default.node,
45
+ "eventTypeId": _propTypes.default.oneOf(["click", "mousedown"]),
46
+ "handleClickAway": _propTypes.default.func.isRequired,
47
+ "targets": _propTypes.default.arrayOf(_propTypes.default.shape({
48
+ "current": _propTypes.default.oneOfType([_propTypes.default.oneOf([null]), function (props, propName) {
49
+ if (props[propName] == null) {
50
+ return new Error("Prop '" + propName + "' is required but wasn't specified");
51
+ } else if (typeof props[propName] !== 'object' || props[propName].nodeType !== 1) {
52
+ return new Error("Expected prop '" + propName + "' to be of type Element");
53
+ }
54
+ }]).isRequired
55
+ })).isRequired
56
+ };
57
+ ClickAwayWrapper.displayName = "ClickAwayWrapper";
58
+ var _default = ClickAwayWrapper;
59
+ exports.default = _default;
@@ -0,0 +1,2 @@
1
+ export { default } from "./click-away-wrapper.component";
2
+ export type { ClickAwayWrapperProps } from "./click-away-wrapper.component";
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "default", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _clickAwayWrapper.default;
10
+ }
11
+ });
12
+
13
+ var _clickAwayWrapper = _interopRequireDefault(require("./click-away-wrapper.component"));
14
+
15
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -0,0 +1,6 @@
1
+ {
2
+ "sideEffects": false,
3
+ "module": "../../../esm/__internal__/click-away-wrapper/index.js",
4
+ "main": "./index.js",
5
+ "types": "./index.d.ts"
6
+ }
@@ -29,6 +29,8 @@ var _datePicker = _interopRequireDefault(require("./__internal__/date-picker"));
29
29
 
30
30
  var _dateRange = _interopRequireDefault(require("../date-range/date-range.context"));
31
31
 
32
+ var _clickAwayWrapper = _interopRequireDefault(require("../../__internal__/click-away-wrapper"));
33
+
32
34
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
33
35
 
34
36
  function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
@@ -259,23 +261,6 @@ const DateInput = ({
259
261
  }
260
262
  };
261
263
 
262
- (0, _react.useEffect)(() => {
263
- const fnClosePicker = ev => {
264
- if (open && !_events.default.composedPath(ev).includes(parentRef.current) && !_events.default.composedPath(ev).includes(pickerRef.current)) {
265
- alreadyFocused.current = true;
266
- inputRef.current.focus();
267
- isBlurBlocked.current = false;
268
- inputRef.current.blur();
269
- setOpen(false);
270
- alreadyFocused.current = false;
271
- }
272
- };
273
-
274
- document.addEventListener("mousedown", fnClosePicker);
275
- return function cleanup() {
276
- document.removeEventListener("mousedown", fnClosePicker);
277
- };
278
- }, [open]);
279
264
  (0, _react.useEffect)(() => {
280
265
  const [matchedFormat, matchedValue] = (0, _utils.findMatchedFormatAndValue)(value, formats);
281
266
 
@@ -307,7 +292,22 @@ const DateInput = ({
307
292
  return value;
308
293
  };
309
294
 
310
- return /*#__PURE__*/_react.default.createElement(_date.default, _extends({
295
+ const handleClickAway = () => {
296
+ if (open) {
297
+ alreadyFocused.current = true;
298
+ inputRef.current.focus();
299
+ isBlurBlocked.current = false;
300
+ inputRef.current.blur();
301
+ setOpen(false);
302
+ alreadyFocused.current = false;
303
+ }
304
+ };
305
+
306
+ return /*#__PURE__*/_react.default.createElement(_clickAwayWrapper.default, {
307
+ handleClickAway: handleClickAway,
308
+ eventTypeId: "mousedown",
309
+ targets: [parentRef, pickerRef]
310
+ }, /*#__PURE__*/_react.default.createElement(_date.default, _extends({
311
311
  ref: wrapperRef,
312
312
  role: "presentation",
313
313
  size: size,
@@ -347,13 +347,13 @@ const DateInput = ({
347
347
  ref: pickerRef,
348
348
  pickerMouseDown: handlePickerMouseDown,
349
349
  open: open
350
- }));
350
+ })));
351
351
  };
352
352
 
353
353
  DateInput.propTypes = { ..._textbox.default.propTypes,
354
354
  ...marginPropTypes,
355
355
 
356
- /** Pass any props that match the [DayPickerProps](https://react-day-picker.js.org/api/DayPicker)
356
+ /** Pass any props that match the [DayPickerProps](https://react-day-picker-v7.netlify.app/docs/getting-started/)
357
357
  * interface to override default behaviors
358
358
  * */
359
359
  pickerProps: _propTypes.default.object,
@@ -27,6 +27,8 @@ var _scrollableBlock = _interopRequireDefault(require("../../scrollable-block"))
27
27
 
28
28
  var _submenu2 = _interopRequireDefault(require("./submenu.context"));
29
29
 
30
+ var _clickAwayWrapper = _interopRequireDefault(require("../../../../__internal__/click-away-wrapper"));
31
+
30
32
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
31
33
 
32
34
  function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
@@ -209,12 +211,11 @@ const Submenu = /*#__PURE__*/_react.default.forwardRef(({
209
211
  }
210
212
  }
211
213
  }, [submenuFocusIndex, submenuOpen, href, menuContext, arrayOfFormattedChildren, numberOfChildren, openSubmenu, closeSubmenu, onKeyDown, characterString, restartCharacterTimeout, startCharacterTimeout]);
212
- const onClickOutside = (0, _react.useCallback)(event => {
213
- if (!_events.default.composedPath(event).includes(submenuRef.current)) {
214
- document.removeEventListener("click", onClickOutside);
215
- closeSubmenu();
216
- }
217
- }, [closeSubmenu]);
214
+
215
+ const handleClickAway = () => {
216
+ document.removeEventListener("click", handleClickAway);
217
+ closeSubmenu();
218
+ };
218
219
 
219
220
  const handleClick = event => {
220
221
  if (clickToOpen) {
@@ -233,15 +234,6 @@ const Submenu = /*#__PURE__*/_react.default.forwardRef(({
233
234
  } // eslint-disable-next-line react-hooks/exhaustive-deps
234
235
 
235
236
  }, [characterString]);
236
- (0, _react.useEffect)(() => {
237
- if (submenuOpen) {
238
- document.addEventListener("click", onClickOutside);
239
- }
240
-
241
- return function cleanup() {
242
- document.removeEventListener("click", onClickOutside);
243
- };
244
- }, [onClickOutside, submenuOpen]);
245
237
 
246
238
  if (inFullscreenView) {
247
239
  return /*#__PURE__*/_react.default.createElement(_submenu.StyledSubmenuWrapper, {
@@ -275,7 +267,10 @@ const Submenu = /*#__PURE__*/_react.default.forwardRef(({
275
267
  }, child))));
276
268
  }
277
269
 
278
- return /*#__PURE__*/_react.default.createElement(_submenu.StyledSubmenuWrapper, {
270
+ return /*#__PURE__*/_react.default.createElement(_clickAwayWrapper.default, {
271
+ handleClickAway: handleClickAway,
272
+ targets: [submenuRef]
273
+ }, /*#__PURE__*/_react.default.createElement(_submenu.StyledSubmenuWrapper, {
279
274
  "data-component": "submenu-wrapper",
280
275
  onMouseOver: !clickToOpen ? () => openSubmenu() : undefined,
281
276
  onMouseLeave: () => closeSubmenu(),
@@ -313,7 +308,7 @@ const Submenu = /*#__PURE__*/_react.default.forwardRef(({
313
308
  updateFocusIndex: setSubmenuFocusIndex,
314
309
  itemIndex: child.type === _menuItem2.default ? index : undefined
315
310
  }
316
- }, child))));
311
+ }, child)))));
317
312
  });
318
313
 
319
314
  Submenu.propTypes = {
@@ -21,6 +21,8 @@ var _guid = _interopRequireDefault(require("../../__internal__/utils/helpers/gui
21
21
 
22
22
  var _utils = require("../../style/utils");
23
23
 
24
+ var _clickAwayWrapper = _interopRequireDefault(require("../../__internal__/click-away-wrapper"));
25
+
24
26
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
27
 
26
28
  function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
@@ -49,6 +51,7 @@ const PopoverContainer = ({
49
51
  }) => {
50
52
  const isControlled = open !== undefined;
51
53
  const [isOpenInternal, setIsOpenInternal] = (0, _react.useState)(false);
54
+ const ref = (0, _react.useRef)();
52
55
  const closeButtonRef = (0, _react.useRef)();
53
56
  const openButtonRef = (0, _react.useRef)();
54
57
  const guid = (0, _react.useRef)((0, _guid.default)());
@@ -89,10 +92,21 @@ const PopoverContainer = ({
89
92
  ref: closeButtonRef,
90
93
  ariaLabel: closeButtonAriaLabel
91
94
  };
92
- return /*#__PURE__*/_react.default.createElement(_popoverContainer.PopoverContainerWrapperStyle, {
95
+
96
+ const handleClickAway = e => {
97
+ if (!isControlled) setIsOpenInternal(false);
98
+ if (onClose) onClose(e);
99
+ };
100
+
101
+ return /*#__PURE__*/_react.default.createElement(_clickAwayWrapper.default, {
102
+ targets: [ref],
103
+ handleClickAway: handleClickAway,
104
+ eventTypeId: "mousedown"
105
+ }, /*#__PURE__*/_react.default.createElement(_popoverContainer.PopoverContainerWrapperStyle, {
93
106
  "data-component": "popover-container",
94
107
  role: "region",
95
- "aria-labelledby": popoverContainerId
108
+ "aria-labelledby": popoverContainerId,
109
+ ref: ref
96
110
  }, renderOpenComponent(renderOpenComponentProps), /*#__PURE__*/_react.default.createElement(_reactTransitionGroup.Transition, {
97
111
  in: isOpen,
98
112
  timeout: {
@@ -116,7 +130,7 @@ const PopoverContainer = ({
116
130
  }, (0, _utils.filterStyledSystemPaddingProps)(rest)), /*#__PURE__*/_react.default.createElement(_popoverContainer.PopoverContainerHeaderStyle, null, /*#__PURE__*/_react.default.createElement(_popoverContainer.PopoverContainerTitleStyle, {
117
131
  id: popoverContainerId,
118
132
  "data-element": "popover-container-title"
119
- }, title), renderCloseComponent(renderCloseComponentProps)), children)));
133
+ }, title), renderCloseComponent(renderCloseComponentProps)), children))));
120
134
  };
121
135
 
122
136
  PopoverContainer.propTypes = { ...paddingPropTypes,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "carbon-react",
3
- "version": "107.0.0",
3
+ "version": "107.1.0",
4
4
  "description": "A library of reusable React components for easily building user interfaces.",
5
5
  "engineStrict": true,
6
6
  "engines": {