@pingux/astro 2.213.0-alpha.0 → 2.213.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.
@@ -22,12 +22,12 @@ var _react = _interopRequireWildcard(require("react"));
22
22
  var _date = require("@internationalized/date");
23
23
  var _datepicker = require("@react-aria/datepicker");
24
24
  var _focus = require("@react-aria/focus");
25
- var _overlays = require("@react-aria/overlays");
26
25
  var _utils = require("@react-aria/utils");
27
26
  var _datepicker2 = require("@react-stately/datepicker");
28
27
  var _object = require("lodash/object");
29
28
  var _propTypes = _interopRequireDefault(require("prop-types"));
30
29
  var _index = require("../../index");
30
+ var _Popover = _interopRequireDefault(require("../Popover/Popover"));
31
31
  var _pendoID = require("../../utils/devUtils/constants/pendoID");
32
32
  var _statuses = _interopRequireDefault(require("../../utils/devUtils/constants/statuses"));
33
33
  var _isDateWithinRanges = require("../../utils/devUtils/props/isDateWithinRanges");
@@ -86,31 +86,24 @@ var DatePicker = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
86
86
  fieldProps = _useDatePicker.fieldProps,
87
87
  groupProps = _useDatePicker.groupProps,
88
88
  labelProps = _useDatePicker.labelProps;
89
- var _useOverlayPosition = (0, _overlays.useOverlayPosition)({
90
- targetRef: groupRef,
91
- overlayRef: popoverRef,
92
- offset: 15,
93
- crossOffset: 40,
94
- isOpen: state.isOpen,
95
- onClose: state.setOpen,
96
- shouldUpdatePosition: true
97
- }),
98
- positionProps = _useOverlayPosition.overlayProps;
99
- var calendar = !isReadOnly && (0, _react2.jsx)(_index.PopoverContainer, (0, _extends2["default"])({
89
+ var calendar = !isReadOnly && (0, _react2.jsx)(_Popover["default"], {
100
90
  hasNoArrow: true,
101
91
  isDismissable: true,
102
92
  isNonModal: true,
103
- ref: popoverRef,
104
- isOpen: state.isOpen,
105
- onClose: state.setOpen,
93
+ popoverRef: popoverRef,
94
+ triggerRef: groupRef,
95
+ state: state,
96
+ offset: 15,
97
+ crossOffset: 40,
98
+ "data-testid": "popover-container",
106
99
  overflow: "auto"
107
- }, (0, _utils.mergeProps)(dialogProps, positionProps)), (0, _react2.jsx)(_focus.FocusScope, {
100
+ }, (0, _react2.jsx)(_focus.FocusScope, {
108
101
  autoFocus: true,
109
102
  contain: true,
110
103
  restoreFocus: true
111
- }, (0, _react2.jsx)(_index.Calendar, (0, _extends2["default"])({}, calendarProps, {
104
+ }, (0, _react2.jsx)("div", dialogProps, (0, _react2.jsx)(_index.Calendar, (0, _extends2["default"])({}, calendarProps, {
112
105
  calendarWrapperProps: calendarWrapperProps
113
- }))));
106
+ })))));
114
107
  return (0, _react2.jsx)(_react["default"].Fragment, null, (0, _react2.jsx)(_DateField["default"], (0, _extends2["default"])({}, (0, _pendoID.getPendoID)('DatePicker'), props, {
115
108
  ref: ref,
116
109
  buttonProps: buttonProps,
@@ -219,7 +219,7 @@ test('should be able to select dates', /*#__PURE__*/(0, _asyncToGenerator2["defa
219
219
  return _userEvent["default"].click(_testWrapper.screen.queryByRole('button'));
220
220
  case 4:
221
221
  dateButtons = _testWrapper.screen.queryAllByRole('button');
222
- expect(dateButtons).toHaveLength(37);
222
+ expect(dateButtons).toHaveLength(38);
223
223
  expect(dateButtons[5]).toHaveAttribute('aria-label', 'Monday, August 1, 2022');
224
224
  _context4.next = 9;
225
225
  return _userEvent["default"].click(dateButtons[5]);
@@ -43,6 +43,7 @@ var _ariaAttributes = require("../../utils/docUtils/ariaAttributes");
43
43
  var _fieldAttributes = require("../../utils/docUtils/fieldAttributes");
44
44
  var _statusProp = require("../../utils/docUtils/statusProp");
45
45
  var _ListBox = _interopRequireDefault(require("../ListBox"));
46
+ var _Popover = _interopRequireDefault(require("../Popover/Popover"));
46
47
  var _react2 = require("@emotion/react");
47
48
  var _excluded = ["defaultSelectedKeys", "direction", "disabledKeys", "containerProps", "filter", "hasAutoFocus", "hasNoSelectAll", "hasNoStatusIndicator", "helperText", "inputProps", "isDisabled", "isFilteringDisabled", "isNotFlippable", "isReadOnly", "isRequired", "items", "label", "loadingState", "mode", "onBlur", "onFocus", "onInputChange", "onKeyDown", "onKeyUp", "onLoadMore", "onLoadPrev", "onOpenChange", "onSelectionChange", "placeholder", "selectedKeys", "selectedOptionText", "scrollBoxProps", "status"];
48
49
  function _interopRequireWildcard(e, t) { if ("function" == typeof _WeakMap) var r = new _WeakMap(), n = new _WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = _Object$defineProperty) && _Object$getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
@@ -171,30 +172,6 @@ var CondensedMultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (pr
171
172
  });
172
173
  var listBoxRef = (0, _react.useRef)();
173
174
  var popoverRef = (0, _react.useRef)();
174
- var _useOverlayPosition = (0, _reactAria.useOverlayPosition)({
175
- isOpen: isOpen,
176
- onClose: close,
177
- offset: 1,
178
- overlayRef: popoverRef,
179
- placement: "".concat(direction, " end"),
180
- scrollRef: listBoxRef,
181
- shouldFlip: !isNotFlippable,
182
- targetRef: inputWrapperRef
183
- }),
184
- overlayProps = _useOverlayPosition.overlayProps,
185
- placement = _useOverlayPosition.placement,
186
- updatePosition = _useOverlayPosition.updatePosition;
187
-
188
- // Update position once the ListBox has rendered. This ensures that
189
- // it flips properly when it doesn't fit in the available space.
190
- /* istanbul ignore next */
191
- (0, _utils.useLayoutEffect)(function () {
192
- if (isOpen) {
193
- requestAnimationFrame(function () {
194
- updatePosition();
195
- });
196
- }
197
- }, [isOpen, selectionManager.selectedKeys, updatePosition]);
198
175
 
199
176
  // Measure the width of the input to inform the width of the menu (below).
200
177
  var _useState9 = (0, _react.useState)(null),
@@ -212,10 +189,16 @@ var CondensedMultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (pr
212
189
  onResize: onResize
213
190
  });
214
191
  (0, _utils.useLayoutEffect)(onResize, [onResize]);
215
- var style = _objectSpread(_objectSpread({}, overlayProps.style), {}, {
192
+ var menuWidthSx = {
216
193
  width: menuWidth,
217
194
  minWidth: menuWidth
218
- });
195
+ };
196
+ var popoverState = (0, _react.useMemo)(function () {
197
+ return {
198
+ isOpen: !state.collection.size ? false : isOpen,
199
+ close: close
200
+ };
201
+ }, [state.collection.size, isOpen, close]);
219
202
  (0, _react.useEffect)(function () {
220
203
  if (defaultSelectedKeys) selectionManager.setSelectedKeys(defaultSelectedKeys);
221
204
  }, []);
@@ -317,7 +300,7 @@ var CondensedMultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (pr
317
300
  }
318
301
  }, selectionState), (0, _react2.jsx)(_reactAria.DismissButton, {
319
302
  onDismiss: close
320
- }), (0, _react2.jsx)(_.ScrollBox, scrollBoxProps, (0, _react2.jsx)(_ListBox["default"], (0, _extends2["default"])({
303
+ }), (0, _react2.jsx)(_.ScrollBox, scrollBoxProps, (0, _react2.jsx)(_ListBox["default"], {
321
304
  ref: listBoxRef,
322
305
  hasAutoFocus: hasAutoFocus,
323
306
  hasNoEmptySelection: true,
@@ -328,7 +311,7 @@ var CondensedMultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (pr
328
311
  isLoading: loadingState === _loadingStates["default"].LOADING_MORE,
329
312
  "aria-label": "List of options",
330
313
  isCondensed: mode === 'condensed'
331
- }, overlayProps))), (0, _react2.jsx)(_reactAria.DismissButton, {
314
+ })), (0, _react2.jsx)(_reactAria.DismissButton, {
332
315
  onDismiss: close
333
316
  }));
334
317
  var visuallyHidden = (0, _react2.jsx)(_visuallyHidden.VisuallyHidden, {
@@ -439,14 +422,16 @@ var CondensedMultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (pr
439
422
  value: filterString,
440
423
  helperText: helperText,
441
424
  "aria-invalid": status === 'error' && true
442
- }, (0, _pendoID.getPendoID)('MultivaluesField'), others, inputProps)), (0, _react2.jsx)(_.PopoverContainer, {
425
+ }, (0, _pendoID.getPendoID)('MultivaluesField'), others, inputProps)), (0, _react2.jsx)(_Popover["default"], {
443
426
  hasNoArrow: true,
444
427
  isNonModal: true,
445
- isOpen: !state.collection.size ? false : isOpen,
446
- onClose: close,
447
- placement: placement,
448
- ref: popoverRef,
449
- style: style,
428
+ popoverRef: popoverRef,
429
+ triggerRef: inputWrapperRef,
430
+ state: popoverState,
431
+ placement: "".concat(direction, " end"),
432
+ shouldFlip: !isNotFlippable,
433
+ scrollRef: listBoxRef,
434
+ sx: menuWidthSx,
450
435
  onBlur: function onBlur(e) {
451
436
  return handleBlur(e);
452
437
  }
@@ -45,6 +45,7 @@ var _ariaAttributes = require("../../utils/docUtils/ariaAttributes");
45
45
  var _fieldAttributes = require("../../utils/docUtils/fieldAttributes");
46
46
  var _statusProp = require("../../utils/docUtils/statusProp");
47
47
  var _ListBox = _interopRequireDefault(require("../ListBox"));
48
+ var _Popover = _interopRequireDefault(require("../Popover/Popover"));
48
49
  var _BadgeLabelTooltip = _interopRequireDefault(require("./BadgeLabelTooltip"));
49
50
  var _react2 = require("@emotion/react");
50
51
  var _excluded = ["items"],
@@ -172,30 +173,6 @@ var DefaultMultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (prop
172
173
  });
173
174
  var listBoxRef = (0, _react.useRef)();
174
175
  var popoverRef = (0, _react.useRef)();
175
- var _useOverlayPosition = (0, _reactAria.useOverlayPosition)({
176
- isOpen: isOpen,
177
- onClose: close,
178
- offset: 1,
179
- overlayRef: popoverRef,
180
- placement: "".concat(direction, " end"),
181
- scrollRef: listBoxRef,
182
- shouldFlip: !isNotFlippable,
183
- targetRef: inputWrapperRef
184
- }),
185
- overlayProps = _useOverlayPosition.overlayProps,
186
- placement = _useOverlayPosition.placement,
187
- updatePosition = _useOverlayPosition.updatePosition;
188
-
189
- // Update position once the ListBox has rendered. This ensures that
190
- // it flips properly when it doesn't fit in the available space.
191
- /* istanbul ignore next */
192
- (0, _utils.useLayoutEffect)(function () {
193
- if (isOpen) {
194
- requestAnimationFrame(function () {
195
- updatePosition();
196
- });
197
- }
198
- }, [isOpen, selectionManager.selectedKeys, updatePosition]);
199
176
 
200
177
  // Measure the width of the input to inform the width of the menu (below).
201
178
  var _useState1 = (0, _react.useState)(null),
@@ -213,10 +190,16 @@ var DefaultMultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (prop
213
190
  onResize: onResize
214
191
  });
215
192
  (0, _utils.useLayoutEffect)(onResize, [onResize]);
216
- var style = _objectSpread(_objectSpread({}, overlayProps.style), {}, {
193
+ var menuWidthSx = {
217
194
  width: menuWidth,
218
195
  minWidth: menuWidth
219
- });
196
+ };
197
+ var popoverState = (0, _react.useMemo)(function () {
198
+ return {
199
+ isOpen: !state.collection.size ? false : isOpen,
200
+ close: close
201
+ };
202
+ }, [state.collection.size, isOpen, close]);
220
203
  (0, _react.useEffect)(function () {
221
204
  if (defaultSelectedKeys) {
222
205
  selectionManager.setSelectedKeys(defaultSelectedKeys);
@@ -540,14 +523,16 @@ var DefaultMultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (prop
540
523
  value: filterString,
541
524
  helperText: helperText,
542
525
  "aria-invalid": status === 'error' && true
543
- }, (0, _pendoID.getPendoID)('MultivaluesField'), others, inputProps)), (0, _react2.jsx)(_.PopoverContainer, {
526
+ }, (0, _pendoID.getPendoID)('MultivaluesField'), others, inputProps)), (0, _react2.jsx)(_Popover["default"], {
544
527
  hasNoArrow: true,
545
528
  isNonModal: true,
546
- isOpen: !state.collection.size ? false : isOpen,
547
- onClose: close,
548
- placement: placement,
549
- ref: popoverRef,
550
- style: style
529
+ popoverRef: popoverRef,
530
+ triggerRef: inputWrapperRef,
531
+ state: popoverState,
532
+ placement: "".concat(direction, " end"),
533
+ shouldFlip: !isNotFlippable,
534
+ scrollRef: listBoxRef,
535
+ sx: menuWidthSx
551
536
  }, listbox), (0, _react2.jsx)(EmptyVisuallyHidden, null)));
552
537
  });
553
538
  DefaultMultivaluesField.propTypes = _objectSpread(_objectSpread(_objectSpread({
@@ -24,6 +24,8 @@ var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable
24
24
  var _fill = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/fill"));
25
25
  var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each"));
26
26
  var _isArray = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/is-array"));
27
+ var _from = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/from"));
28
+ var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find"));
27
29
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
28
30
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncToGenerator"));
29
31
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
@@ -38,7 +40,7 @@ var _universalFormSubmitTest = require("../../utils/testUtils/universalFormSubmi
38
40
  var _react2 = require("@emotion/react");
39
41
  function _interopRequireWildcard(e, t) { if ("function" == typeof _WeakMap) var r = new _WeakMap(), n = new _WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t2 in e) "default" !== _t2 && {}.hasOwnProperty.call(e, _t2) && ((i = (o = _Object$defineProperty) && _Object$getOwnPropertyDescriptor(e, _t2)) && (i.get || i.set) ? o(f, _t2, i) : f[_t2] = e[_t2]); return f; })(e, t); }
40
42
  function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
41
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context57, _context58; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty2(_context57 = ownKeys(Object(t), !0)).call(_context57, function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty2(_context58 = ownKeys(Object(t))).call(_context58, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
43
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context63, _context64; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty2(_context63 = ownKeys(Object(t), !0)).call(_context63, function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty2(_context64 = ownKeys(Object(t))).call(_context64, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
42
44
  function _regeneratorRuntime() { "use strict"; var r = _regenerator(), e = r.m(_regeneratorRuntime), t = (_Object$getPrototypeOf ? _Object$getPrototypeOf(e) : e.__proto__).constructor; function n(r) { var e = "function" == typeof r && r.constructor; return !!e && (e === t || "GeneratorFunction" === (e.displayName || e.name)); } var o = { "throw": 1, "return": 2, "break": 3, "continue": 3 }; function a(r) { var e, t; return function (n) { e || (e = { stop: function stop() { return t(n.a, 2); }, "catch": function _catch() { return n.v; }, abrupt: function abrupt(r, e) { return t(n.a, o[r], e); }, delegateYield: function delegateYield(r, o, a) { return e.resultName = o, t(n.d, _regeneratorValues(r), a); }, finish: function finish(r) { return t(n.f, r); } }, t = function t(r, _t, o) { n.p = e.prev, n.n = e.next; try { return r(_t, o); } finally { e.next = n.n; } }), e.resultName && (e[e.resultName] = n.v, e.resultName = void 0), e.sent = n.v, e.next = n.n; try { return r.call(this, e); } finally { n.p = e.prev, n.n = e.next; } }; } return (_regeneratorRuntime = function _regeneratorRuntime() { return { wrap: function wrap(e, t, n, o) { return r.w(a(e), t, n, o && _reverseInstanceProperty(o).call(o)); }, isGeneratorFunction: n, mark: r.m, awrap: function awrap(r, e) { return new _OverloadYield(r, e); }, AsyncIterator: _regeneratorAsyncIterator, async: function async(r, e, t, o, u) { return (n(e) ? _regeneratorAsyncGen : _regeneratorAsync)(a(r), e, t, o, u); }, keys: _regeneratorKeys, values: _regeneratorValues }; })(); }
43
45
  function _regeneratorValues(e) { if (null != e) { var t = e["function" == typeof _Symbol && _Symbol$iterator || "@@iterator"], r = 0; if (t) return t.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) return { next: function next() { return e && r >= e.length && (e = void 0), { value: e && e[r++], done: !e }; } }; } throw new TypeError(_typeof(e) + " is not iterable"); }
44
46
  function _regeneratorKeys(e) { var n = Object(e), r = []; for (var t in n) r.unshift(t); return function e() { for (; r.length;) if ((t = r.pop()) in n) return e.value = t, e.done = !1, e; return e.done = !0, e; }; }
@@ -2084,4 +2086,180 @@ test('in condensed mode, arrow icon SVG has an empty title element so no tooltip
2084
2086
  var titleElement = arrowIconSvg.querySelector('title');
2085
2087
  expect(titleElement).toBeInTheDocument();
2086
2088
  expect(titleElement).toHaveTextContent('');
2087
- });
2089
+ });
2090
+ test('MultivaluesField and DatePicker popovers open correctly when inside a Modal (UXE-8666)', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regeneratorRuntime().mark(function _callee59() {
2091
+ var multivaluesFieldItems, ModalApp, combobox, listbox, node, datepickerPopover, dateButtons, firstAvailableDate;
2092
+ return _regeneratorRuntime().wrap(function _callee59$(_context62) {
2093
+ while (1) switch (_context62.prev = _context62.next) {
2094
+ case 0:
2095
+ multivaluesFieldItems = [{
2096
+ id: 1,
2097
+ key: 'Aardvark',
2098
+ name: 'Aardvark'
2099
+ }, {
2100
+ id: 2,
2101
+ key: 'Kangaroo',
2102
+ name: 'Kangaroo'
2103
+ }, {
2104
+ id: 3,
2105
+ key: 'Snake',
2106
+ name: 'Snake'
2107
+ }];
2108
+ ModalApp = function ModalApp() {
2109
+ var _useState3 = (0, _react.useState)(false),
2110
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
2111
+ isOpen = _useState4[0],
2112
+ setIsOpen = _useState4[1];
2113
+ var _useState5 = (0, _react.useState)([]),
2114
+ _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
2115
+ selectedKeys = _useState6[0],
2116
+ setSelectedKeys = _useState6[1];
2117
+ var _useState7 = (0, _react.useState)(null),
2118
+ _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
2119
+ selectedDate = _useState8[0],
2120
+ setSelectedDate = _useState8[1];
2121
+ return (0, _react2.jsx)(_react["default"].Fragment, null, (0, _react2.jsx)(_index.Button, {
2122
+ onPress: function onPress() {
2123
+ return setIsOpen(true);
2124
+ }
2125
+ }, "Launch Modal"), isOpen && (0, _react2.jsx)(_index.Modal, {
2126
+ title: "test",
2127
+ isOpen: isOpen,
2128
+ onClose: function onClose() {
2129
+ return setIsOpen(false);
2130
+ },
2131
+ hasCloseButton: true,
2132
+ isDismissable: true
2133
+ }, (0, _react2.jsx)(_index.MultivaluesField, {
2134
+ label: "Test Multivalues",
2135
+ items: multivaluesFieldItems,
2136
+ selectedKeys: selectedKeys,
2137
+ onSelectionChange: function onSelectionChange(keys) {
2138
+ var _context57;
2139
+ return setSelectedKeys((0, _map["default"])(_context57 = (0, _from["default"])(keys)).call(_context57, function (k) {
2140
+ return k.toString();
2141
+ }));
2142
+ },
2143
+ mode: "non-restrictive"
2144
+ }, function (item) {
2145
+ return (0, _react2.jsx)(_index.Item, {
2146
+ key: item.key,
2147
+ "data-id": item.name,
2148
+ "aria-label": item.name
2149
+ }, item.name);
2150
+ }), (0, _react2.jsx)(_index.DatePicker, {
2151
+ label: "Select a date",
2152
+ value: selectedDate,
2153
+ onChange: setSelectedDate
2154
+ })));
2155
+ };
2156
+ (0, _testWrapper.render)((0, _react2.jsx)(_index.OverlayProvider, null, (0, _react2.jsx)(ModalApp, null)));
2157
+ _context62.next = 5;
2158
+ return _userEvent["default"].click(_testWrapper.screen.getByRole('button', {
2159
+ name: 'Launch Modal'
2160
+ }));
2161
+ case 5:
2162
+ expect(_testWrapper.screen.getByRole('dialog')).toBeInTheDocument();
2163
+
2164
+ // MultivaluesField: focus opens the listbox
2165
+ combobox = _testWrapper.screen.getByRole('combobox');
2166
+ _context62.next = 9;
2167
+ return (0, _testWrapper.act)(/*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regeneratorRuntime().mark(function _callee55() {
2168
+ return _regeneratorRuntime().wrap(function _callee55$(_context58) {
2169
+ while (1) switch (_context58.prev = _context58.next) {
2170
+ case 0:
2171
+ combobox.focus();
2172
+ case 1:
2173
+ case "end":
2174
+ return _context58.stop();
2175
+ }
2176
+ }, _callee55);
2177
+ })));
2178
+ case 9:
2179
+ _context62.next = 11;
2180
+ return (0, _testWrapper.act)(/*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regeneratorRuntime().mark(function _callee56() {
2181
+ return _regeneratorRuntime().wrap(function _callee56$(_context59) {
2182
+ while (1) switch (_context59.prev = _context59.next) {
2183
+ case 0:
2184
+ case "end":
2185
+ return _context59.stop();
2186
+ }
2187
+ }, _callee56);
2188
+ })));
2189
+ case 11:
2190
+ listbox = _testWrapper.screen.queryByRole('listbox');
2191
+ expect(listbox).toBeInTheDocument();
2192
+
2193
+ /* eslint-disable testing-library/no-node-access */
2194
+ node = listbox;
2195
+ while (node && node !== document.body) {
2196
+ expect(node).not.toHaveAttribute('aria-hidden', 'true');
2197
+ node = node.parentElement;
2198
+ }
2199
+ /* eslint-enable testing-library/no-node-access */
2200
+
2201
+ // Click an option — verify it is selectable (option disappears and a badge appears)
2202
+ _context62.next = 17;
2203
+ return _userEvent["default"].click(_testWrapper.screen.getByRole('option', {
2204
+ name: 'Aardvark'
2205
+ }));
2206
+ case 17:
2207
+ expect(_testWrapper.screen.getByText('Aardvark')).toBeInTheDocument();
2208
+
2209
+ // Close the listbox before opening DatePicker
2210
+ _context62.next = 20;
2211
+ return (0, _testWrapper.act)(/*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regeneratorRuntime().mark(function _callee57() {
2212
+ return _regeneratorRuntime().wrap(function _callee57$(_context60) {
2213
+ while (1) switch (_context60.prev = _context60.next) {
2214
+ case 0:
2215
+ combobox.blur();
2216
+ case 1:
2217
+ case "end":
2218
+ return _context60.stop();
2219
+ }
2220
+ }, _callee57);
2221
+ })));
2222
+ case 20:
2223
+ _context62.next = 22;
2224
+ return _userEvent["default"].click(_testWrapper.screen.getByRole('button', {
2225
+ name: /calendar/i
2226
+ }));
2227
+ case 22:
2228
+ _context62.next = 24;
2229
+ return (0, _testWrapper.act)(/*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regeneratorRuntime().mark(function _callee58() {
2230
+ return _regeneratorRuntime().wrap(function _callee58$(_context61) {
2231
+ while (1) switch (_context61.prev = _context61.next) {
2232
+ case 0:
2233
+ case "end":
2234
+ return _context61.stop();
2235
+ }
2236
+ }, _callee58);
2237
+ })));
2238
+ case 24:
2239
+ datepickerPopover = _testWrapper.screen.queryByTestId('popover-container');
2240
+ expect(datepickerPopover).toBeInTheDocument();
2241
+
2242
+ /* eslint-disable testing-library/no-node-access */
2243
+ node = datepickerPopover;
2244
+ while (node && node !== document.body) {
2245
+ expect(node).not.toHaveAttribute('aria-hidden', 'true');
2246
+ node = node.parentElement;
2247
+ }
2248
+ /* eslint-enable testing-library/no-node-access */
2249
+
2250
+ // Click a calendar date — verify the date field updates
2251
+ dateButtons = _testWrapper.screen.getAllByRole('button');
2252
+ firstAvailableDate = (0, _find["default"])(dateButtons).call(dateButtons, function (btn) {
2253
+ var _btn$getAttribute;
2254
+ return (_btn$getAttribute = btn.getAttribute('aria-label')) === null || _btn$getAttribute === void 0 ? void 0 : _btn$getAttribute.match(/\w+day,/);
2255
+ });
2256
+ _context62.next = 32;
2257
+ return _userEvent["default"].click(firstAvailableDate);
2258
+ case 32:
2259
+ expect(_testWrapper.screen.queryByTestId('date-field')).not.toHaveValue('');
2260
+ case 33:
2261
+ case "end":
2262
+ return _context62.stop();
2263
+ }
2264
+ }, _callee59);
2265
+ })));
@@ -15,12 +15,12 @@ import React, { forwardRef, useRef } from 'react';
15
15
  import { parseDate } from '@internationalized/date';
16
16
  import { useDatePicker } from '@react-aria/datepicker';
17
17
  import { FocusScope } from '@react-aria/focus';
18
- import { useOverlayPosition } from '@react-aria/overlays';
19
18
  import { mergeProps } from '@react-aria/utils';
20
19
  import { useDatePickerState } from '@react-stately/datepicker';
21
20
  import { omit } from 'lodash/object';
22
21
  import PropTypes from 'prop-types';
23
- import { Calendar, FieldHelperText, PopoverContainer } from '../../index';
22
+ import { Calendar, FieldHelperText } from '../../index';
23
+ import Popover from '../Popover/Popover';
24
24
  import { getPendoID } from '../../utils/devUtils/constants/pendoID';
25
25
  import statuses from '../../utils/devUtils/constants/statuses';
26
26
  import { isDateWithinRanges } from '../../utils/devUtils/props/isDateWithinRanges';
@@ -78,31 +78,24 @@ var DatePicker = /*#__PURE__*/forwardRef(function (props, ref) {
78
78
  fieldProps = _useDatePicker.fieldProps,
79
79
  groupProps = _useDatePicker.groupProps,
80
80
  labelProps = _useDatePicker.labelProps;
81
- var _useOverlayPosition = useOverlayPosition({
82
- targetRef: groupRef,
83
- overlayRef: popoverRef,
84
- offset: 15,
85
- crossOffset: 40,
86
- isOpen: state.isOpen,
87
- onClose: state.setOpen,
88
- shouldUpdatePosition: true
89
- }),
90
- positionProps = _useOverlayPosition.overlayProps;
91
- var calendar = !isReadOnly && ___EmotionJSX(PopoverContainer, _extends({
81
+ var calendar = !isReadOnly && ___EmotionJSX(Popover, {
92
82
  hasNoArrow: true,
93
83
  isDismissable: true,
94
84
  isNonModal: true,
95
- ref: popoverRef,
96
- isOpen: state.isOpen,
97
- onClose: state.setOpen,
85
+ popoverRef: popoverRef,
86
+ triggerRef: groupRef,
87
+ state: state,
88
+ offset: 15,
89
+ crossOffset: 40,
90
+ "data-testid": "popover-container",
98
91
  overflow: "auto"
99
- }, mergeProps(dialogProps, positionProps)), ___EmotionJSX(FocusScope, {
92
+ }, ___EmotionJSX(FocusScope, {
100
93
  autoFocus: true,
101
94
  contain: true,
102
95
  restoreFocus: true
103
- }, ___EmotionJSX(Calendar, _extends({}, calendarProps, {
96
+ }, ___EmotionJSX("div", dialogProps, ___EmotionJSX(Calendar, _extends({}, calendarProps, {
104
97
  calendarWrapperProps: calendarWrapperProps
105
- }))));
98
+ })))));
106
99
  return ___EmotionJSX(React.Fragment, null, ___EmotionJSX(DateField, _extends({}, getPendoID('DatePicker'), props, {
107
100
  ref: ref,
108
101
  buttonProps: buttonProps,
@@ -213,7 +213,7 @@ test('should be able to select dates', /*#__PURE__*/_asyncToGenerator(/*#__PURE_
213
213
  return userEvent.click(screen.queryByRole('button'));
214
214
  case 4:
215
215
  dateButtons = screen.queryAllByRole('button');
216
- expect(dateButtons).toHaveLength(37);
216
+ expect(dateButtons).toHaveLength(38);
217
217
  expect(dateButtons[5]).toHaveAttribute('aria-label', 'Monday, August 1, 2022');
218
218
  _context4.next = 9;
219
219
  return userEvent.click(dateButtons[5]);
@@ -18,15 +18,15 @@ import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance
18
18
  import _includesInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/includes";
19
19
  import _reduceInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/reduce";
20
20
  import _flatMapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/flat-map";
21
- import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react';
22
- import { DismissButton, FocusScope, mergeProps, useOverlayPosition } from 'react-aria';
21
+ import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
22
+ import { DismissButton, FocusScope, mergeProps } from 'react-aria';
23
23
  import { useFilter } from '@react-aria/i18n';
24
24
  import { useFocusWithin } from '@react-aria/interactions';
25
25
  import { useLayoutEffect, useResizeObserver } from '@react-aria/utils';
26
26
  import { VisuallyHidden } from '@react-aria/visually-hidden';
27
27
  import { useListState } from '@react-stately/list';
28
28
  import PropTypes from 'prop-types';
29
- import { Box, Button, Icon, Loader, PopoverContainer, ScrollBox, Text, TextField } from '../..';
29
+ import { Box, Button, Icon, Loader, ScrollBox, Text, TextField } from '../..';
30
30
  import { MultivaluesContext } from '../../context/MultivaluesContext';
31
31
  import { useGetTheme, useInputLoader, usePropWarning } from '../../hooks';
32
32
  import loadingStates from '../../utils/devUtils/constants/loadingStates';
@@ -36,6 +36,7 @@ import { ariaAttributesBasePropTypes } from '../../utils/docUtils/ariaAttributes
36
36
  import { inputFieldAttributesBasePropTypes } from '../../utils/docUtils/fieldAttributes';
37
37
  import { statusDefaultProp, statusPropTypes } from '../../utils/docUtils/statusProp';
38
38
  import ListBox from '../ListBox';
39
+ import Popover from '../Popover/Popover';
39
40
  import { jsx as ___EmotionJSX } from "@emotion/react";
40
41
  var CondensedMultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
41
42
  var _selectionManager$sta, _selectionManager$sta2, _selectionManager$sta3, _listBoxRef$current;
@@ -160,30 +161,6 @@ var CondensedMultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
160
161
  });
161
162
  var listBoxRef = useRef();
162
163
  var popoverRef = useRef();
163
- var _useOverlayPosition = useOverlayPosition({
164
- isOpen: isOpen,
165
- onClose: close,
166
- offset: 1,
167
- overlayRef: popoverRef,
168
- placement: "".concat(direction, " end"),
169
- scrollRef: listBoxRef,
170
- shouldFlip: !isNotFlippable,
171
- targetRef: inputWrapperRef
172
- }),
173
- overlayProps = _useOverlayPosition.overlayProps,
174
- placement = _useOverlayPosition.placement,
175
- updatePosition = _useOverlayPosition.updatePosition;
176
-
177
- // Update position once the ListBox has rendered. This ensures that
178
- // it flips properly when it doesn't fit in the available space.
179
- /* istanbul ignore next */
180
- useLayoutEffect(function () {
181
- if (isOpen) {
182
- requestAnimationFrame(function () {
183
- updatePosition();
184
- });
185
- }
186
- }, [isOpen, selectionManager.selectedKeys, updatePosition]);
187
164
 
188
165
  // Measure the width of the input to inform the width of the menu (below).
189
166
  var _useState9 = useState(null),
@@ -201,10 +178,16 @@ var CondensedMultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
201
178
  onResize: onResize
202
179
  });
203
180
  useLayoutEffect(onResize, [onResize]);
204
- var style = _objectSpread(_objectSpread({}, overlayProps.style), {}, {
181
+ var menuWidthSx = {
205
182
  width: menuWidth,
206
183
  minWidth: menuWidth
207
- });
184
+ };
185
+ var popoverState = useMemo(function () {
186
+ return {
187
+ isOpen: !state.collection.size ? false : isOpen,
188
+ close: close
189
+ };
190
+ }, [state.collection.size, isOpen, close]);
208
191
  useEffect(function () {
209
192
  if (defaultSelectedKeys) selectionManager.setSelectedKeys(defaultSelectedKeys);
210
193
  }, []);
@@ -306,7 +289,7 @@ var CondensedMultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
306
289
  }
307
290
  }, selectionState), ___EmotionJSX(DismissButton, {
308
291
  onDismiss: close
309
- }), ___EmotionJSX(ScrollBox, scrollBoxProps, ___EmotionJSX(ListBox, _extends({
292
+ }), ___EmotionJSX(ScrollBox, scrollBoxProps, ___EmotionJSX(ListBox, {
310
293
  ref: listBoxRef,
311
294
  hasAutoFocus: hasAutoFocus,
312
295
  hasNoEmptySelection: true,
@@ -317,7 +300,7 @@ var CondensedMultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
317
300
  isLoading: loadingState === loadingStates.LOADING_MORE,
318
301
  "aria-label": "List of options",
319
302
  isCondensed: mode === 'condensed'
320
- }, overlayProps))), ___EmotionJSX(DismissButton, {
303
+ })), ___EmotionJSX(DismissButton, {
321
304
  onDismiss: close
322
305
  }));
323
306
  var visuallyHidden = ___EmotionJSX(VisuallyHidden, {
@@ -428,14 +411,16 @@ var CondensedMultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
428
411
  value: filterString,
429
412
  helperText: helperText,
430
413
  "aria-invalid": status === 'error' && true
431
- }, getPendoID('MultivaluesField'), others, inputProps)), ___EmotionJSX(PopoverContainer, {
414
+ }, getPendoID('MultivaluesField'), others, inputProps)), ___EmotionJSX(Popover, {
432
415
  hasNoArrow: true,
433
416
  isNonModal: true,
434
- isOpen: !state.collection.size ? false : isOpen,
435
- onClose: close,
436
- placement: placement,
437
- ref: popoverRef,
438
- style: style,
417
+ popoverRef: popoverRef,
418
+ triggerRef: inputWrapperRef,
419
+ state: popoverState,
420
+ placement: "".concat(direction, " end"),
421
+ shouldFlip: !isNotFlippable,
422
+ scrollRef: listBoxRef,
423
+ sx: menuWidthSx,
439
424
  onBlur: function onBlur(e) {
440
425
  return handleBlur(e);
441
426
  }
@@ -23,13 +23,13 @@ import _findIndexInstanceProperty from "@babel/runtime-corejs3/core-js-stable/in
23
23
  import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
24
24
  import _findInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/find";
25
25
  import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
26
- import { DismissButton, FocusScope, useOverlayPosition } from 'react-aria';
26
+ import { DismissButton, FocusScope } from 'react-aria';
27
27
  import { useFilter } from '@react-aria/i18n';
28
28
  import { useLayoutEffect, useResizeObserver } from '@react-aria/utils';
29
29
  import { VisuallyHidden } from '@react-aria/visually-hidden';
30
30
  import { useListState } from '@react-stately/list';
31
31
  import PropTypes from 'prop-types';
32
- import { Badge, Box, Loader, PopoverContainer, ScrollBox, Text, TextField } from '../..';
32
+ import { Badge, Box, Loader, ScrollBox, Text, TextField } from '../..';
33
33
  import { MultivaluesContext } from '../../context/MultivaluesContext';
34
34
  import { useGetTheme, useInputLoader, usePropWarning } from '../../hooks';
35
35
  import loadingStates from '../../utils/devUtils/constants/loadingStates';
@@ -39,6 +39,7 @@ import { ariaAttributesBasePropTypes } from '../../utils/docUtils/ariaAttributes
39
39
  import { inputFieldAttributesBasePropTypes } from '../../utils/docUtils/fieldAttributes';
40
40
  import { statusDefaultProp, statusPropTypes } from '../../utils/docUtils/statusProp';
41
41
  import ListBox from '../ListBox';
42
+ import Popover from '../Popover/Popover';
42
43
  import BadgeLabelTooltip from './BadgeLabelTooltip';
43
44
  import { jsx as ___EmotionJSX } from "@emotion/react";
44
45
  var DefaultMultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
@@ -161,30 +162,6 @@ var DefaultMultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
161
162
  });
162
163
  var listBoxRef = useRef();
163
164
  var popoverRef = useRef();
164
- var _useOverlayPosition = useOverlayPosition({
165
- isOpen: isOpen,
166
- onClose: close,
167
- offset: 1,
168
- overlayRef: popoverRef,
169
- placement: "".concat(direction, " end"),
170
- scrollRef: listBoxRef,
171
- shouldFlip: !isNotFlippable,
172
- targetRef: inputWrapperRef
173
- }),
174
- overlayProps = _useOverlayPosition.overlayProps,
175
- placement = _useOverlayPosition.placement,
176
- updatePosition = _useOverlayPosition.updatePosition;
177
-
178
- // Update position once the ListBox has rendered. This ensures that
179
- // it flips properly when it doesn't fit in the available space.
180
- /* istanbul ignore next */
181
- useLayoutEffect(function () {
182
- if (isOpen) {
183
- requestAnimationFrame(function () {
184
- updatePosition();
185
- });
186
- }
187
- }, [isOpen, selectionManager.selectedKeys, updatePosition]);
188
165
 
189
166
  // Measure the width of the input to inform the width of the menu (below).
190
167
  var _useState1 = useState(null),
@@ -202,10 +179,16 @@ var DefaultMultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
202
179
  onResize: onResize
203
180
  });
204
181
  useLayoutEffect(onResize, [onResize]);
205
- var style = _objectSpread(_objectSpread({}, overlayProps.style), {}, {
182
+ var menuWidthSx = {
206
183
  width: menuWidth,
207
184
  minWidth: menuWidth
208
- });
185
+ };
186
+ var popoverState = useMemo(function () {
187
+ return {
188
+ isOpen: !state.collection.size ? false : isOpen,
189
+ close: close
190
+ };
191
+ }, [state.collection.size, isOpen, close]);
209
192
  useEffect(function () {
210
193
  if (defaultSelectedKeys) {
211
194
  selectionManager.setSelectedKeys(defaultSelectedKeys);
@@ -529,14 +512,16 @@ var DefaultMultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
529
512
  value: filterString,
530
513
  helperText: helperText,
531
514
  "aria-invalid": status === 'error' && true
532
- }, getPendoID('MultivaluesField'), others, inputProps)), ___EmotionJSX(PopoverContainer, {
515
+ }, getPendoID('MultivaluesField'), others, inputProps)), ___EmotionJSX(Popover, {
533
516
  hasNoArrow: true,
534
517
  isNonModal: true,
535
- isOpen: !state.collection.size ? false : isOpen,
536
- onClose: close,
537
- placement: placement,
538
- ref: popoverRef,
539
- style: style
518
+ popoverRef: popoverRef,
519
+ triggerRef: inputWrapperRef,
520
+ state: popoverState,
521
+ placement: "".concat(direction, " end"),
522
+ shouldFlip: !isNotFlippable,
523
+ scrollRef: listBoxRef,
524
+ sx: menuWidthSx
540
525
  }, listbox), ___EmotionJSX(EmptyVisuallyHidden, null)));
541
526
  });
542
527
  DefaultMultivaluesField.propTypes = _objectSpread(_objectSpread(_objectSpread({
@@ -20,7 +20,7 @@ import _asyncToGenerator from "@babel/runtime-corejs3/helpers/esm/asyncToGenerat
20
20
  import _slicedToArray from "@babel/runtime-corejs3/helpers/esm/slicedToArray";
21
21
  import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
22
22
  function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
23
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context57, _context58; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context57 = ownKeys(Object(t), !0)).call(_context57, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context58 = ownKeys(Object(t))).call(_context58, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
23
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context63, _context64; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context63 = ownKeys(Object(t), !0)).call(_context63, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context64 = ownKeys(Object(t))).call(_context64, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
24
24
  function _regeneratorRuntime() { "use strict"; var r = _regenerator(), e = r.m(_regeneratorRuntime), t = (_Object$getPrototypeOf ? _Object$getPrototypeOf(e) : e.__proto__).constructor; function n(r) { var e = "function" == typeof r && r.constructor; return !!e && (e === t || "GeneratorFunction" === (e.displayName || e.name)); } var o = { "throw": 1, "return": 2, "break": 3, "continue": 3 }; function a(r) { var e, t; return function (n) { e || (e = { stop: function stop() { return t(n.a, 2); }, "catch": function _catch() { return n.v; }, abrupt: function abrupt(r, e) { return t(n.a, o[r], e); }, delegateYield: function delegateYield(r, o, a) { return e.resultName = o, t(n.d, _regeneratorValues(r), a); }, finish: function finish(r) { return t(n.f, r); } }, t = function t(r, _t, o) { n.p = e.prev, n.n = e.next; try { return r(_t, o); } finally { e.next = n.n; } }), e.resultName && (e[e.resultName] = n.v, e.resultName = void 0), e.sent = n.v, e.next = n.n; try { return r.call(this, e); } finally { n.p = e.prev, n.n = e.next; } }; } return (_regeneratorRuntime = function _regeneratorRuntime() { return { wrap: function wrap(e, t, n, o) { return r.w(a(e), t, n, o && _reverseInstanceProperty(o).call(o)); }, isGeneratorFunction: n, mark: r.m, awrap: function awrap(r, e) { return new _OverloadYield(r, e); }, AsyncIterator: _regeneratorAsyncIterator, async: function async(r, e, t, o, u) { return (n(e) ? _regeneratorAsyncGen : _regeneratorAsync)(a(r), e, t, o, u); }, keys: _regeneratorKeys, values: _regeneratorValues }; })(); }
25
25
  function _regeneratorValues(e) { if (null != e) { var t = e["function" == typeof _Symbol && _Symbol$iterator || "@@iterator"], r = 0; if (t) return t.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) return { next: function next() { return e && r >= e.length && (e = void 0), { value: e && e[r++], done: !e }; } }; } throw new TypeError(_typeof(e) + " is not iterable"); }
26
26
  function _regeneratorKeys(e) { var n = Object(e), r = []; for (var t in n) r.unshift(t); return function e() { for (; r.length;) if ((t = r.pop()) in n) return e.value = t, e.done = !1, e; return e.done = !0, e; }; }
@@ -34,9 +34,11 @@ import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance
34
34
  import _fillInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/fill";
35
35
  import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each";
36
36
  import _Array$isArray from "@babel/runtime-corejs3/core-js-stable/array/is-array";
37
+ import _Array$from from "@babel/runtime-corejs3/core-js-stable/array/from";
38
+ import _findInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/find";
37
39
  import React, { useState } from 'react';
38
40
  import userEvent from '@testing-library/user-event';
39
- import { Item, MultivaluesField, OverlayProvider, Section } from '../../index';
41
+ import { Button, DatePicker, Item, Modal, MultivaluesField, OverlayProvider, Section } from '../../index';
40
42
  import statuses from '../../utils/devUtils/constants/statuses';
41
43
  import { act, fireEvent, getDefaultNormalizer, render, screen, within } from '../../utils/testUtils/testWrapper';
42
44
  import { universalComponentTests } from '../../utils/testUtils/universalComponentTest';
@@ -2078,4 +2080,180 @@ test('in condensed mode, arrow icon SVG has an empty title element so no tooltip
2078
2080
  var titleElement = arrowIconSvg.querySelector('title');
2079
2081
  expect(titleElement).toBeInTheDocument();
2080
2082
  expect(titleElement).toHaveTextContent('');
2081
- });
2083
+ });
2084
+ test('MultivaluesField and DatePicker popovers open correctly when inside a Modal (UXE-8666)', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee59() {
2085
+ var multivaluesFieldItems, ModalApp, combobox, listbox, node, datepickerPopover, dateButtons, firstAvailableDate;
2086
+ return _regeneratorRuntime().wrap(function _callee59$(_context62) {
2087
+ while (1) switch (_context62.prev = _context62.next) {
2088
+ case 0:
2089
+ multivaluesFieldItems = [{
2090
+ id: 1,
2091
+ key: 'Aardvark',
2092
+ name: 'Aardvark'
2093
+ }, {
2094
+ id: 2,
2095
+ key: 'Kangaroo',
2096
+ name: 'Kangaroo'
2097
+ }, {
2098
+ id: 3,
2099
+ key: 'Snake',
2100
+ name: 'Snake'
2101
+ }];
2102
+ ModalApp = function ModalApp() {
2103
+ var _useState3 = useState(false),
2104
+ _useState4 = _slicedToArray(_useState3, 2),
2105
+ isOpen = _useState4[0],
2106
+ setIsOpen = _useState4[1];
2107
+ var _useState5 = useState([]),
2108
+ _useState6 = _slicedToArray(_useState5, 2),
2109
+ selectedKeys = _useState6[0],
2110
+ setSelectedKeys = _useState6[1];
2111
+ var _useState7 = useState(null),
2112
+ _useState8 = _slicedToArray(_useState7, 2),
2113
+ selectedDate = _useState8[0],
2114
+ setSelectedDate = _useState8[1];
2115
+ return ___EmotionJSX(React.Fragment, null, ___EmotionJSX(Button, {
2116
+ onPress: function onPress() {
2117
+ return setIsOpen(true);
2118
+ }
2119
+ }, "Launch Modal"), isOpen && ___EmotionJSX(Modal, {
2120
+ title: "test",
2121
+ isOpen: isOpen,
2122
+ onClose: function onClose() {
2123
+ return setIsOpen(false);
2124
+ },
2125
+ hasCloseButton: true,
2126
+ isDismissable: true
2127
+ }, ___EmotionJSX(MultivaluesField, {
2128
+ label: "Test Multivalues",
2129
+ items: multivaluesFieldItems,
2130
+ selectedKeys: selectedKeys,
2131
+ onSelectionChange: function onSelectionChange(keys) {
2132
+ var _context57;
2133
+ return setSelectedKeys(_mapInstanceProperty(_context57 = _Array$from(keys)).call(_context57, function (k) {
2134
+ return k.toString();
2135
+ }));
2136
+ },
2137
+ mode: "non-restrictive"
2138
+ }, function (item) {
2139
+ return ___EmotionJSX(Item, {
2140
+ key: item.key,
2141
+ "data-id": item.name,
2142
+ "aria-label": item.name
2143
+ }, item.name);
2144
+ }), ___EmotionJSX(DatePicker, {
2145
+ label: "Select a date",
2146
+ value: selectedDate,
2147
+ onChange: setSelectedDate
2148
+ })));
2149
+ };
2150
+ render(___EmotionJSX(OverlayProvider, null, ___EmotionJSX(ModalApp, null)));
2151
+ _context62.next = 5;
2152
+ return userEvent.click(screen.getByRole('button', {
2153
+ name: 'Launch Modal'
2154
+ }));
2155
+ case 5:
2156
+ expect(screen.getByRole('dialog')).toBeInTheDocument();
2157
+
2158
+ // MultivaluesField: focus opens the listbox
2159
+ combobox = screen.getByRole('combobox');
2160
+ _context62.next = 9;
2161
+ return act(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee55() {
2162
+ return _regeneratorRuntime().wrap(function _callee55$(_context58) {
2163
+ while (1) switch (_context58.prev = _context58.next) {
2164
+ case 0:
2165
+ combobox.focus();
2166
+ case 1:
2167
+ case "end":
2168
+ return _context58.stop();
2169
+ }
2170
+ }, _callee55);
2171
+ })));
2172
+ case 9:
2173
+ _context62.next = 11;
2174
+ return act(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee56() {
2175
+ return _regeneratorRuntime().wrap(function _callee56$(_context59) {
2176
+ while (1) switch (_context59.prev = _context59.next) {
2177
+ case 0:
2178
+ case "end":
2179
+ return _context59.stop();
2180
+ }
2181
+ }, _callee56);
2182
+ })));
2183
+ case 11:
2184
+ listbox = screen.queryByRole('listbox');
2185
+ expect(listbox).toBeInTheDocument();
2186
+
2187
+ /* eslint-disable testing-library/no-node-access */
2188
+ node = listbox;
2189
+ while (node && node !== document.body) {
2190
+ expect(node).not.toHaveAttribute('aria-hidden', 'true');
2191
+ node = node.parentElement;
2192
+ }
2193
+ /* eslint-enable testing-library/no-node-access */
2194
+
2195
+ // Click an option — verify it is selectable (option disappears and a badge appears)
2196
+ _context62.next = 17;
2197
+ return userEvent.click(screen.getByRole('option', {
2198
+ name: 'Aardvark'
2199
+ }));
2200
+ case 17:
2201
+ expect(screen.getByText('Aardvark')).toBeInTheDocument();
2202
+
2203
+ // Close the listbox before opening DatePicker
2204
+ _context62.next = 20;
2205
+ return act(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee57() {
2206
+ return _regeneratorRuntime().wrap(function _callee57$(_context60) {
2207
+ while (1) switch (_context60.prev = _context60.next) {
2208
+ case 0:
2209
+ combobox.blur();
2210
+ case 1:
2211
+ case "end":
2212
+ return _context60.stop();
2213
+ }
2214
+ }, _callee57);
2215
+ })));
2216
+ case 20:
2217
+ _context62.next = 22;
2218
+ return userEvent.click(screen.getByRole('button', {
2219
+ name: /calendar/i
2220
+ }));
2221
+ case 22:
2222
+ _context62.next = 24;
2223
+ return act(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee58() {
2224
+ return _regeneratorRuntime().wrap(function _callee58$(_context61) {
2225
+ while (1) switch (_context61.prev = _context61.next) {
2226
+ case 0:
2227
+ case "end":
2228
+ return _context61.stop();
2229
+ }
2230
+ }, _callee58);
2231
+ })));
2232
+ case 24:
2233
+ datepickerPopover = screen.queryByTestId('popover-container');
2234
+ expect(datepickerPopover).toBeInTheDocument();
2235
+
2236
+ /* eslint-disable testing-library/no-node-access */
2237
+ node = datepickerPopover;
2238
+ while (node && node !== document.body) {
2239
+ expect(node).not.toHaveAttribute('aria-hidden', 'true');
2240
+ node = node.parentElement;
2241
+ }
2242
+ /* eslint-enable testing-library/no-node-access */
2243
+
2244
+ // Click a calendar date — verify the date field updates
2245
+ dateButtons = screen.getAllByRole('button');
2246
+ firstAvailableDate = _findInstanceProperty(dateButtons).call(dateButtons, function (btn) {
2247
+ var _btn$getAttribute;
2248
+ return (_btn$getAttribute = btn.getAttribute('aria-label')) === null || _btn$getAttribute === void 0 ? void 0 : _btn$getAttribute.match(/\w+day,/);
2249
+ });
2250
+ _context62.next = 32;
2251
+ return userEvent.click(firstAvailableDate);
2252
+ case 32:
2253
+ expect(screen.queryByTestId('date-field')).not.toHaveValue('');
2254
+ case 33:
2255
+ case "end":
2256
+ return _context62.stop();
2257
+ }
2258
+ }, _callee59);
2259
+ })));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pingux/astro",
3
- "version": "2.213.0-alpha.0",
3
+ "version": "2.213.1",
4
4
  "description": "React component library for Ping Identity's design system",
5
5
  "repository": {
6
6
  "type": "git",