@pingux/astro 2.147.0 → 2.147.1-alpha.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.
- package/lib/cjs/components/GridList/GridList.d.ts +2 -15
- package/lib/cjs/components/GridList/GridList.stories.d.ts +1 -12
- package/lib/cjs/components/ImageUploadField/ImageUploadField.test.js +3 -1
- package/lib/cjs/components/Modal/Modal.stories.d.ts +1 -0
- package/lib/cjs/components/Modal/Modal.stories.js +27 -1
- package/lib/cjs/components/Modal/tests/Modal.unit.test.js +51 -2
- package/lib/cjs/components/Popover/Popover.d.ts +1 -11
- package/lib/cjs/components/Popover/Popover.js +12 -5
- package/lib/cjs/components/PopoverMenu/PopoverMenu.js +12 -27
- package/lib/cjs/hooks/useOverlappingMenuHoverState/useOverlappingMenuHoverState.test.js +15 -5
- package/lib/cjs/types/gridList.d.ts +11 -5
- package/lib/cjs/types/popoverContainer.d.ts +18 -0
- package/lib/cjs/utils/testUtils/universalFormSubmitTest.js +3 -0
- package/lib/components/ImageUploadField/ImageUploadField.test.js +3 -1
- package/lib/components/Modal/Modal.stories.js +26 -1
- package/lib/components/Modal/tests/Modal.unit.test.js +52 -2
- package/lib/components/Popover/Popover.js +12 -5
- package/lib/components/PopoverMenu/PopoverMenu.js +13 -28
- package/lib/hooks/useOverlappingMenuHoverState/useOverlappingMenuHoverState.test.js +15 -5
- package/lib/utils/testUtils/universalFormSubmitTest.js +3 -0
- package/package.json +1 -1
|
@@ -1,17 +1,4 @@
|
|
|
1
|
-
import React
|
|
2
|
-
import {
|
|
3
|
-
import type { Node } from '@react-types/shared';
|
|
4
|
-
type GridListProps = {
|
|
5
|
-
containerProps: object;
|
|
6
|
-
rowProps: object;
|
|
7
|
-
cellProps: object;
|
|
8
|
-
children?: React.ReactNode;
|
|
9
|
-
isReorderable?: boolean;
|
|
10
|
-
items: Iterable<object>;
|
|
11
|
-
keyboardNavigationBehavior?: 'arrow' | 'tab';
|
|
12
|
-
onAction?: (key: Key) => void;
|
|
13
|
-
onSelectionChange?: (keys: Selection) => void;
|
|
14
|
-
collection: Collection<Node<object>>;
|
|
15
|
-
};
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { GridListProps } from '../../types/gridList';
|
|
16
3
|
declare const GridList: (props: GridListProps) => React.JSX.Element;
|
|
17
4
|
export default GridList;
|
|
@@ -1,18 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
declare const _default: {
|
|
3
3
|
title: string;
|
|
4
|
-
component: (props:
|
|
5
|
-
containerProps: object;
|
|
6
|
-
rowProps: object;
|
|
7
|
-
cellProps: object;
|
|
8
|
-
children?: React.ReactNode;
|
|
9
|
-
isReorderable?: boolean | undefined;
|
|
10
|
-
items: Iterable<object>;
|
|
11
|
-
keyboardNavigationBehavior?: "tab" | "arrow" | undefined;
|
|
12
|
-
onAction?: ((key: React.Key) => void) | undefined;
|
|
13
|
-
onSelectionChange?: ((keys: Selection) => void) | undefined;
|
|
14
|
-
collection: import("react-stately").Collection<import("@react-types/shared").Node<object>>;
|
|
15
|
-
}) => React.JSX.Element;
|
|
4
|
+
component: (props: import("../../types/gridList").GridListProps) => React.JSX.Element;
|
|
16
5
|
argTypes: {
|
|
17
6
|
isReorderable: {
|
|
18
7
|
description: string;
|
|
@@ -366,7 +366,9 @@ test('should show the menu if label clicked when preview image exists', /*#__PUR
|
|
|
366
366
|
// Click on the image preview button
|
|
367
367
|
imageUploadLabel = _testWrapper.screen.getByText(testLabel);
|
|
368
368
|
_react2.fireEvent.click(imageUploadLabel);
|
|
369
|
-
expect(_testWrapper.screen.getAllByRole('button'
|
|
369
|
+
expect(_testWrapper.screen.getAllByRole('button', {
|
|
370
|
+
hidden: true
|
|
371
|
+
})[0]).toHaveAttribute('aria-expanded', 'true');
|
|
370
372
|
expect(_testWrapper.screen.getByRole('menu')).toBeInTheDocument();
|
|
371
373
|
expect(_testWrapper.screen.getByText('Upload New Image')).toBeInTheDocument();
|
|
372
374
|
expect(_testWrapper.screen.getByText('Remove Image')).toBeInTheDocument();
|
|
@@ -8,7 +8,7 @@ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequ
|
|
|
8
8
|
_Object$defineProperty(exports, "__esModule", {
|
|
9
9
|
value: true
|
|
10
10
|
});
|
|
11
|
-
exports["default"] = exports.WithInputField = exports.LargeContent = exports.Default = void 0;
|
|
11
|
+
exports["default"] = exports.WithPopoverMenu = exports.WithInputField = exports.LargeContent = exports.Default = void 0;
|
|
12
12
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
|
|
13
13
|
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
|
14
14
|
var _react = _interopRequireWildcard(require("react"));
|
|
@@ -248,6 +248,32 @@ var WithInputField = function WithInputField() {
|
|
|
248
248
|
}, "Cancel")))));
|
|
249
249
|
};
|
|
250
250
|
exports.WithInputField = WithInputField;
|
|
251
|
+
var WithPopoverMenu = function WithPopoverMenu() {
|
|
252
|
+
var state = (0, _hooks.useModalState)();
|
|
253
|
+
return (0, _react2.jsx)(_index.OverlayProvider, null, (0, _react2.jsx)(_index.Button, {
|
|
254
|
+
onPress: state.open,
|
|
255
|
+
"aria-label": "Open modal"
|
|
256
|
+
}, "Open Modal"), state.isOpen && (0, _react2.jsx)(_index.Modal, {
|
|
257
|
+
isOpen: state.isOpen,
|
|
258
|
+
onClose: state.close
|
|
259
|
+
}, (0, _react2.jsx)(_index.Box, {
|
|
260
|
+
gap: "lg"
|
|
261
|
+
}, (0, _react2.jsx)(_index.Text, null, "Lorem ipsum dolor sit amet consectetur"), (0, _react2.jsx)(_index.PopoverMenu, null, (0, _react2.jsx)(_index.Button, null, "Click me"), (0, _react2.jsx)(_index.Menu, {
|
|
262
|
+
onAction: function onAction() {
|
|
263
|
+
return console.log('on action');
|
|
264
|
+
}
|
|
265
|
+
}, (0, _react2.jsx)(_index.Item, {
|
|
266
|
+
key: "edit"
|
|
267
|
+
}, "Edit"), (0, _react2.jsx)(_index.Item, {
|
|
268
|
+
key: "duplicate"
|
|
269
|
+
}, "Duplicate"), (0, _react2.jsx)(_index.Item, {
|
|
270
|
+
key: "delete",
|
|
271
|
+
textValue: "delete"
|
|
272
|
+
}, (0, _react2.jsx)(_index.Text, {
|
|
273
|
+
color: "critical.bright"
|
|
274
|
+
}, "Delete")))))));
|
|
275
|
+
};
|
|
276
|
+
exports.WithPopoverMenu = WithPopoverMenu;
|
|
251
277
|
WithInputField.parameters = {
|
|
252
278
|
a11y: {
|
|
253
279
|
config: {
|
|
@@ -1,13 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _typeof = require("@babel/runtime-corejs3/helpers/typeof");
|
|
4
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
|
5
|
+
var _Symbol = require("@babel/runtime-corejs3/core-js-stable/symbol");
|
|
6
|
+
var _Object$create = require("@babel/runtime-corejs3/core-js-stable/object/create");
|
|
7
|
+
var _Object$getPrototypeOf = require("@babel/runtime-corejs3/core-js-stable/object/get-prototype-of");
|
|
8
|
+
var _forEachInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/for-each");
|
|
9
|
+
var _Object$setPrototypeOf = require("@babel/runtime-corejs3/core-js-stable/object/set-prototype-of");
|
|
10
|
+
var _Promise = require("@babel/runtime-corejs3/core-js-stable/promise");
|
|
11
|
+
var _reverseInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/reverse");
|
|
12
|
+
var _sliceInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/slice");
|
|
3
13
|
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
|
14
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncToGenerator"));
|
|
4
15
|
var _react = _interopRequireDefault(require("react"));
|
|
5
16
|
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
|
6
17
|
var _index = require("../../../index");
|
|
7
18
|
var _testWrapper = require("../../../utils/testUtils/testWrapper");
|
|
8
19
|
var _universalComponentTest = require("../../../utils/testUtils/universalComponentTest");
|
|
9
20
|
var _react2 = require("@emotion/react");
|
|
10
|
-
// For testing the modal alone
|
|
21
|
+
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = _Object$defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof _Symbol ? _Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return _Object$defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = _Object$create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = _Object$getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = _Object$create(IteratorPrototype); function defineIteratorMethods(prototype) { var _context2; _forEachInstanceProperty(_context2 = ["next", "throw", "return"]).call(_context2, function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], _forEachInstanceProperty(tryLocsList).call(tryLocsList, pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return _Object$setPrototypeOf ? _Object$setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = _Object$create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = _Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) keys.push(key); return _reverseInstanceProperty(keys).call(keys), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { var _context3; if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, _forEachInstanceProperty(_context3 = this.tryEntries).call(_context3, resetTryEntry), !skipTempReset) for (var name in this) "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+_sliceInstanceProperty(name).call(name, 1)) && (this[name] = undefined); }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; } // For testing the modal alone
|
|
11
22
|
var getComponent = function getComponent() {
|
|
12
23
|
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
13
24
|
return (0, _testWrapper.render)((0, _react2.jsx)(_index.OverlayProvider, null, (0, _react2.jsx)(_index.Modal, props)));
|
|
@@ -28,6 +39,24 @@ var getModalWithRadioFieldGroup = function getModalWithRadioFieldGroup() {
|
|
|
28
39
|
"data-testid": "option2"
|
|
29
40
|
})))));
|
|
30
41
|
};
|
|
42
|
+
var buttonText = 'Click me';
|
|
43
|
+
var onAction = jest.fn();
|
|
44
|
+
var option1 = 'option1';
|
|
45
|
+
var getModalWithPopoverMenu = function getModalWithPopoverMenu() {
|
|
46
|
+
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
47
|
+
return (0, _testWrapper.render)((0, _react2.jsx)(_index.OverlayProvider, null, (0, _react2.jsx)(_index.Modal, props, (0, _react2.jsx)(_index.PopoverMenu, null, (0, _react2.jsx)(_index.Button, null, buttonText), (0, _react2.jsx)(_index.Menu, {
|
|
48
|
+
onAction: onAction
|
|
49
|
+
}, (0, _react2.jsx)(_index.Item, {
|
|
50
|
+
key: "edit"
|
|
51
|
+
}, option1), (0, _react2.jsx)(_index.Item, {
|
|
52
|
+
key: "duplicate"
|
|
53
|
+
}, "Duplicate"), (0, _react2.jsx)(_index.Item, {
|
|
54
|
+
key: "delete",
|
|
55
|
+
textValue: "delete"
|
|
56
|
+
}, (0, _react2.jsx)(_index.Text, {
|
|
57
|
+
color: "critical.bright"
|
|
58
|
+
}, "Delete")))))));
|
|
59
|
+
};
|
|
31
60
|
|
|
32
61
|
// **********
|
|
33
62
|
// Unit tests
|
|
@@ -252,4 +281,24 @@ test('should not show focus ring (is-focused class) on radio buttons when clicke
|
|
|
252
281
|
expect(radioB).toBeChecked();
|
|
253
282
|
expect(labelA).not.toHaveClass('is-focused');
|
|
254
283
|
expect(labelB).not.toHaveClass('is-focused');
|
|
255
|
-
});
|
|
284
|
+
});
|
|
285
|
+
test('popover menu onAction is called when menu is inside modal', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
286
|
+
var button, option1Text;
|
|
287
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
288
|
+
while (1) switch (_context.prev = _context.next) {
|
|
289
|
+
case 0:
|
|
290
|
+
getModalWithPopoverMenu();
|
|
291
|
+
button = _testWrapper.screen.getByText(buttonText);
|
|
292
|
+
_userEvent["default"].click(button);
|
|
293
|
+
_context.next = 5;
|
|
294
|
+
return _testWrapper.screen.findByText(option1);
|
|
295
|
+
case 5:
|
|
296
|
+
option1Text = _context.sent;
|
|
297
|
+
_userEvent["default"].click(option1Text);
|
|
298
|
+
expect(onAction).toHaveBeenCalled();
|
|
299
|
+
case 8:
|
|
300
|
+
case "end":
|
|
301
|
+
return _context.stop();
|
|
302
|
+
}
|
|
303
|
+
}, _callee);
|
|
304
|
+
})));
|
|
@@ -1,14 +1,4 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import
|
|
3
|
-
import type { AriaPopoverProps } from '@react-aria/overlays';
|
|
4
|
-
export interface PopoverProps extends Omit<AriaPopoverProps, 'popoverRef'> {
|
|
5
|
-
children?: React.ReactNode;
|
|
6
|
-
state: OverlayTriggerState;
|
|
7
|
-
className?: string;
|
|
8
|
-
popoverRef?: React.RefObject<HTMLDivElement>;
|
|
9
|
-
style?: React.CSSProperties;
|
|
10
|
-
width?: string | number;
|
|
11
|
-
'data-testid'?: string;
|
|
12
|
-
}
|
|
2
|
+
import { PopoverProps } from '../../types';
|
|
13
3
|
declare const Popover: (props: PopoverProps) => React.JSX.Element | null;
|
|
14
4
|
export default Popover;
|
|
@@ -22,23 +22,29 @@ var React = _interopRequireWildcard(require("react"));
|
|
|
22
22
|
var _overlays = require("@react-aria/overlays");
|
|
23
23
|
var _hooks = require("../../hooks");
|
|
24
24
|
var _Box = _interopRequireDefault(require("../Box"));
|
|
25
|
+
var _PopoverContainer = require("../PopoverContainer");
|
|
25
26
|
var _react2 = require("@emotion/react");
|
|
26
|
-
var _excluded = ["popoverRef", "state", "children", "className", "isNonModal", "width"];
|
|
27
|
+
var _excluded = ["arrowProps", "arrowCrossOffset", "direction", "popoverRef", "state", "children", "className", "isNonModal", "hasNoArrow", "width"];
|
|
27
28
|
function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
28
29
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && 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
30
|
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
30
31
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context, _context2; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
31
32
|
var Popover = function Popover(props) {
|
|
32
33
|
var ref = React.useRef(null);
|
|
33
|
-
var
|
|
34
|
+
var arrowProps = props.arrowProps,
|
|
35
|
+
arrowCrossOffset = props.arrowCrossOffset,
|
|
36
|
+
direction = props.direction,
|
|
37
|
+
_props$popoverRef = props.popoverRef,
|
|
34
38
|
popoverRef = _props$popoverRef === void 0 ? ref : _props$popoverRef,
|
|
35
39
|
state = props.state,
|
|
36
40
|
children = props.children,
|
|
37
41
|
className = props.className,
|
|
38
42
|
isNonModal = props.isNonModal,
|
|
43
|
+
hasNoArrow = props.hasNoArrow,
|
|
39
44
|
width = props.width,
|
|
40
45
|
others = (0, _objectWithoutProperties2["default"])(props, _excluded);
|
|
41
46
|
var _usePopover = (0, _overlays.usePopover)(_objectSpread(_objectSpread({}, props), {}, {
|
|
47
|
+
offset: 5,
|
|
42
48
|
popoverRef: popoverRef
|
|
43
49
|
}), state),
|
|
44
50
|
popoverProps = _usePopover.popoverProps,
|
|
@@ -57,9 +63,10 @@ var Popover = function Popover(props) {
|
|
|
57
63
|
className: classNames,
|
|
58
64
|
role: "presentation",
|
|
59
65
|
width: width
|
|
60
|
-
}, popoverProps, others),
|
|
61
|
-
|
|
62
|
-
|
|
66
|
+
}, popoverProps, others), children, hasNoArrow ? null : (0, _react2.jsx)(_PopoverContainer.PopoverArrow, (0, _extends2["default"])({}, arrowProps, {
|
|
67
|
+
arrowCrossOffset: arrowCrossOffset,
|
|
68
|
+
direction: direction
|
|
69
|
+
})), (0, _react2.jsx)(_overlays.DismissButton, {
|
|
63
70
|
onDismiss: state.close
|
|
64
71
|
})));
|
|
65
72
|
};
|
|
@@ -24,8 +24,7 @@ var _reactAria = require("react-aria");
|
|
|
24
24
|
var _reactStately = require("react-stately");
|
|
25
25
|
var _interactions = require("@react-aria/interactions");
|
|
26
26
|
var _MenuContext = require("../../context/MenuContext");
|
|
27
|
-
var
|
|
28
|
-
var _PopoverContainer = _interopRequireDefault(require("../PopoverContainer"));
|
|
27
|
+
var _Popover = _interopRequireDefault(require("../Popover/Popover"));
|
|
29
28
|
var _react2 = require("@emotion/react");
|
|
30
29
|
function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
31
30
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && 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; }
|
|
@@ -33,7 +32,6 @@ function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (
|
|
|
33
32
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context2, _context3; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context2 = ownKeys(Object(source), !0)).call(_context2, function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context3 = ownKeys(Object(source))).call(_context3, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
34
33
|
var PopoverMenu = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
35
34
|
var _context;
|
|
36
|
-
var menuPopoverRef = (0, _hooks.useLocalOrForwardRef)(ref);
|
|
37
35
|
var triggerRef = (0, _react.useRef)(null);
|
|
38
36
|
var menuRef = (0, _react.useRef)(null);
|
|
39
37
|
var children = props.children,
|
|
@@ -57,20 +55,6 @@ var PopoverMenu = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
|
57
55
|
var _useMenuTrigger = (0, _reactAria.useMenuTrigger)({}, state, triggerRef),
|
|
58
56
|
menuTriggerProps = _useMenuTrigger.menuTriggerProps,
|
|
59
57
|
menuProps = _useMenuTrigger.menuProps;
|
|
60
|
-
var _useOverlayPosition = (0, _reactAria.useOverlayPosition)({
|
|
61
|
-
targetRef: triggerRef,
|
|
62
|
-
overlayRef: menuPopoverRef,
|
|
63
|
-
scrollRef: menuRef,
|
|
64
|
-
offset: 5,
|
|
65
|
-
placement: (0, _concat["default"])(_context = "".concat(direction, " ")).call(_context, align),
|
|
66
|
-
// Our API preference is for default false so we invert this since it should be default true
|
|
67
|
-
shouldFlip: !isNotFlippable,
|
|
68
|
-
isOpen: state.isOpen,
|
|
69
|
-
onClose: state.close,
|
|
70
|
-
shouldUpdatePosition: true
|
|
71
|
-
}),
|
|
72
|
-
positionProps = _useOverlayPosition.overlayProps,
|
|
73
|
-
placement = _useOverlayPosition.placement;
|
|
74
58
|
|
|
75
59
|
/* eslint-disable react/jsx-no-constructed-context-values */
|
|
76
60
|
var menuContext = _objectSpread(_objectSpread({}, menuProps), {}, {
|
|
@@ -88,22 +72,23 @@ var PopoverMenu = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
|
88
72
|
}), menu, (0, _react2.jsx)(_reactAria.DismissButton, {
|
|
89
73
|
onDismiss: state.close
|
|
90
74
|
}));
|
|
75
|
+
var placement = (0, _concat["default"])(_context = "".concat(direction, " ")).call(_context, align);
|
|
91
76
|
return (0, _react2.jsx)(_react["default"].Fragment, null, (0, _react2.jsx)(_interactions.PressResponder, (0, _extends2["default"])({}, menuTriggerProps, {
|
|
92
77
|
ref: triggerRef,
|
|
93
78
|
isPressed: state.isOpen
|
|
94
79
|
}), menuTrigger), (0, _react2.jsx)(_MenuContext.MenuContext.Provider, {
|
|
95
80
|
value: menuContext
|
|
96
|
-
}, (0, _react2.jsx)(
|
|
97
|
-
isOpen: state.isOpen,
|
|
98
|
-
ref: menuPopoverRef,
|
|
81
|
+
}, (0, _react2.jsx)(_reactAria.OverlayContainer, null, (0, _react2.jsx)(_Popover["default"], (0, _extends2["default"])({
|
|
99
82
|
placement: placement,
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
83
|
+
hasNoArrow: hasNoArrow
|
|
84
|
+
}, menuProps, {
|
|
85
|
+
"data-popover-placement": direction,
|
|
86
|
+
"data-testid": "popover-container",
|
|
87
|
+
role: "presentation",
|
|
88
|
+
triggerRef: triggerRef,
|
|
89
|
+
state: state,
|
|
90
|
+
direction: direction
|
|
91
|
+
}), contents))));
|
|
107
92
|
});
|
|
108
93
|
PopoverMenu.defaultProps = {
|
|
109
94
|
align: 'middle',
|
|
@@ -67,7 +67,9 @@ describe('useOverlappingMenuHoverState', function () {
|
|
|
67
67
|
case 0:
|
|
68
68
|
getComponent();
|
|
69
69
|
_context.next = 3;
|
|
70
|
-
return _userEvent["default"].hover(_react2.screen.getByRole('listitem'
|
|
70
|
+
return _userEvent["default"].hover(_react2.screen.getByRole('listitem', {
|
|
71
|
+
hidden: true
|
|
72
|
+
}));
|
|
71
73
|
case 3:
|
|
72
74
|
_react2.screen.getByText(IS_HOVERED);
|
|
73
75
|
case 4:
|
|
@@ -106,7 +108,9 @@ describe('useOverlappingMenuHoverState', function () {
|
|
|
106
108
|
return _userEvent["default"].click(_react2.screen.getByRole('button'));
|
|
107
109
|
case 3:
|
|
108
110
|
_context3.next = 5;
|
|
109
|
-
return _userEvent["default"].unhover(_react2.screen.getByRole('listitem'
|
|
111
|
+
return _userEvent["default"].unhover(_react2.screen.getByRole('listitem', {
|
|
112
|
+
hidden: true
|
|
113
|
+
}));
|
|
110
114
|
case 5:
|
|
111
115
|
expect(_react2.screen.queryByText(IS_HOVERED)).not.toBeInTheDocument();
|
|
112
116
|
case 6:
|
|
@@ -151,7 +155,9 @@ describe('useOverlappingMenuHoverState', function () {
|
|
|
151
155
|
return _userEvent["default"].hover(_react2.screen.getByRole('menu'));
|
|
152
156
|
case 5:
|
|
153
157
|
_context5.next = 7;
|
|
154
|
-
return _userEvent["default"].hover(_react2.screen.getByRole('listitem'
|
|
158
|
+
return _userEvent["default"].hover(_react2.screen.getByRole('listitem', {
|
|
159
|
+
hidden: true
|
|
160
|
+
}));
|
|
155
161
|
case 7:
|
|
156
162
|
_react2.screen.getByText(IS_HOVERED);
|
|
157
163
|
case 8:
|
|
@@ -197,10 +203,14 @@ describe('useOverlappingMenuHoverState', function () {
|
|
|
197
203
|
return _userEvent["default"].hover(_react2.screen.getByRole('menu'));
|
|
198
204
|
case 5:
|
|
199
205
|
_context7.next = 7;
|
|
200
|
-
return _userEvent["default"].hover(_react2.screen.getByRole('listitem'
|
|
206
|
+
return _userEvent["default"].hover(_react2.screen.getByRole('listitem', {
|
|
207
|
+
hidden: true
|
|
208
|
+
}));
|
|
201
209
|
case 7:
|
|
202
210
|
_context7.next = 9;
|
|
203
|
-
return _userEvent["default"].unhover(_react2.screen.getByRole('listitem'
|
|
211
|
+
return _userEvent["default"].unhover(_react2.screen.getByRole('listitem', {
|
|
212
|
+
hidden: true
|
|
213
|
+
}));
|
|
204
214
|
case 9:
|
|
205
215
|
expect(_react2.screen.queryByText(IS_HOVERED)).not.toBeInTheDocument();
|
|
206
216
|
case 10:
|
|
@@ -3,8 +3,17 @@ import { Collection, DisabledBehavior, ListState, SelectionBehavior } from 'reac
|
|
|
3
3
|
import { DraggableCollectionState, DroppableCollectionState } from '@react-stately/dnd';
|
|
4
4
|
import type { FocusStrategy, KeyboardDelegate, Node } from '@react-types/shared';
|
|
5
5
|
import { DraggableCollectionStateOptions, DroppableCollectionOptions, DroppableCollectionStateOptions } from './dnd';
|
|
6
|
-
export interface GridListProps
|
|
6
|
+
export interface GridListProps {
|
|
7
7
|
isReorderable?: boolean;
|
|
8
|
+
rowProps?: object;
|
|
9
|
+
cellProps?: object;
|
|
10
|
+
containerProps?: object;
|
|
11
|
+
items: Iterable<object>;
|
|
12
|
+
children?: React.ReactNode;
|
|
13
|
+
keyboardNavigationBehavior?: 'arrow' | 'tab';
|
|
14
|
+
onAction?: (key: Key) => void;
|
|
15
|
+
onSelectionChange?: (keys: Selection) => void;
|
|
16
|
+
collection?: Collection<Node<object>>;
|
|
8
17
|
}
|
|
9
18
|
export type GridListRowProps = SharedGridListItemProps;
|
|
10
19
|
export interface GridRowProps {
|
|
@@ -20,9 +29,6 @@ interface SharedGridListItemProps {
|
|
|
20
29
|
item: Node<object>;
|
|
21
30
|
state: ListState<object>;
|
|
22
31
|
}
|
|
23
|
-
interface SharedGridProps {
|
|
24
|
-
isReorderable?: boolean;
|
|
25
|
-
}
|
|
26
32
|
export interface UseGridListItemProps extends SharedGridListItemProps {
|
|
27
33
|
cellRef: React.Ref<HTMLDivElement>;
|
|
28
34
|
ref: RefObject<HTMLElement>;
|
|
@@ -31,7 +37,7 @@ export interface UseGridListProps extends ReorderableProps {
|
|
|
31
37
|
shouldAllowDuplicateSelectionEvents?: boolean;
|
|
32
38
|
hasAutoFocus?: boolean | FocusStrategy;
|
|
33
39
|
children?: React.ReactNode;
|
|
34
|
-
collection
|
|
40
|
+
collection?: Collection<Node<object>>;
|
|
35
41
|
defaultSelectedKeys?: Iterable<Key> | 'all';
|
|
36
42
|
disabledBehavior?: DisabledBehavior;
|
|
37
43
|
disabledKeys?: Iterable<Key>;
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { OverlayTriggerState } from 'react-stately';
|
|
3
|
+
import type { AriaPopoverProps } from '@react-aria/overlays';
|
|
1
4
|
import { TestingAttributes } from './shared/test';
|
|
2
5
|
import { DOMAttributes, Modify, StyleProps } from './shared';
|
|
3
6
|
type PopoverPlacement = 'top' | 'right' | 'bottom' | 'left';
|
|
@@ -22,4 +25,19 @@ export interface PopoverContainerProps extends StylePropsExtended, DOMAttributes
|
|
|
22
25
|
export interface PopoverWrapperProps extends PopoverContainerProps {
|
|
23
26
|
isOpen?: boolean;
|
|
24
27
|
}
|
|
28
|
+
export interface PopoverProps extends Omit<AriaPopoverProps, 'popoverRef'> {
|
|
29
|
+
children?: React.ReactNode;
|
|
30
|
+
state: OverlayTriggerState;
|
|
31
|
+
direction?: PopoverPlacement;
|
|
32
|
+
className?: string;
|
|
33
|
+
popoverRef?: React.RefObject<HTMLDivElement>;
|
|
34
|
+
style?: React.CSSProperties;
|
|
35
|
+
width?: string | number;
|
|
36
|
+
'data-testid'?: string;
|
|
37
|
+
hasNoArrow?: boolean;
|
|
38
|
+
arrowProps?: PopoverArrowProps;
|
|
39
|
+
arrowCrossOffset?: string;
|
|
40
|
+
isDismissable?: boolean;
|
|
41
|
+
role?: string;
|
|
42
|
+
}
|
|
25
43
|
export {};
|
|
@@ -356,6 +356,7 @@ var universalFieldComponentTests = function universalFieldComponentTests(_ref3)
|
|
|
356
356
|
}
|
|
357
357
|
});
|
|
358
358
|
_react2.fireEvent.submit(_react2.screen.getByRole('form', {
|
|
359
|
+
hidden: true,
|
|
359
360
|
name: /test form 2/i
|
|
360
361
|
}));
|
|
361
362
|
expect(handleFormSubmit).toHaveBeenCalledWith({
|
|
@@ -376,6 +377,7 @@ var universalFieldComponentTests = function universalFieldComponentTests(_ref3)
|
|
|
376
377
|
}
|
|
377
378
|
});
|
|
378
379
|
_react2.fireEvent.submit(_react2.screen.getByRole('form', {
|
|
380
|
+
hidden: true,
|
|
379
381
|
name: /test form 2/i
|
|
380
382
|
}));
|
|
381
383
|
expect(handleFormSubmit).toHaveBeenCalledWith({
|
|
@@ -426,6 +428,7 @@ var universalFieldComponentTests = function universalFieldComponentTests(_ref3)
|
|
|
426
428
|
});
|
|
427
429
|
}
|
|
428
430
|
_react2.fireEvent.submit(_react2.screen.getByRole('form', {
|
|
431
|
+
hidden: true,
|
|
429
432
|
name: /test form 2/i
|
|
430
433
|
}));
|
|
431
434
|
expect(handleFormSubmit).toHaveBeenCalledWith({
|
|
@@ -363,7 +363,9 @@ test('should show the menu if label clicked when preview image exists', /*#__PUR
|
|
|
363
363
|
// Click on the image preview button
|
|
364
364
|
imageUploadLabel = screen.getByText(testLabel);
|
|
365
365
|
fireEvent.click(imageUploadLabel);
|
|
366
|
-
expect(screen.getAllByRole('button'
|
|
366
|
+
expect(screen.getAllByRole('button', {
|
|
367
|
+
hidden: true
|
|
368
|
+
})[0]).toHaveAttribute('aria-expanded', 'true');
|
|
367
369
|
expect(screen.getByRole('menu')).toBeInTheDocument();
|
|
368
370
|
expect(screen.getByText('Upload New Image')).toBeInTheDocument();
|
|
369
371
|
expect(screen.getByText('Remove Image')).toBeInTheDocument();
|
|
@@ -4,7 +4,7 @@ import React, { useState } from 'react';
|
|
|
4
4
|
import { withDesign } from 'storybook-addon-designs';
|
|
5
5
|
import DocsLayout from '../../../.storybook/storybookDocsLayout';
|
|
6
6
|
import { useModalState } from '../../hooks';
|
|
7
|
-
import { Box, Button, Item, Modal, OverlayProvider, RadioField, RadioGroupField, SearchField, SelectField, Text } from '../../index';
|
|
7
|
+
import { Box, Button, Item, Menu, Modal, OverlayProvider, PopoverMenu, RadioField, RadioGroupField, SearchField, SelectField, Text } from '../../index';
|
|
8
8
|
import { FIGMA_LINKS } from '../../utils/designUtils/figmaLinks';
|
|
9
9
|
import { modalSizes } from '../../utils/devUtils/constants/modalSizes';
|
|
10
10
|
import ModalReadme from './Modal.mdx';
|
|
@@ -231,6 +231,31 @@ export var WithInputField = function WithInputField() {
|
|
|
231
231
|
"aria-label": "Cancel"
|
|
232
232
|
}, "Cancel")))));
|
|
233
233
|
};
|
|
234
|
+
export var WithPopoverMenu = function WithPopoverMenu() {
|
|
235
|
+
var state = useModalState();
|
|
236
|
+
return ___EmotionJSX(OverlayProvider, null, ___EmotionJSX(Button, {
|
|
237
|
+
onPress: state.open,
|
|
238
|
+
"aria-label": "Open modal"
|
|
239
|
+
}, "Open Modal"), state.isOpen && ___EmotionJSX(Modal, {
|
|
240
|
+
isOpen: state.isOpen,
|
|
241
|
+
onClose: state.close
|
|
242
|
+
}, ___EmotionJSX(Box, {
|
|
243
|
+
gap: "lg"
|
|
244
|
+
}, ___EmotionJSX(Text, null, "Lorem ipsum dolor sit amet consectetur"), ___EmotionJSX(PopoverMenu, null, ___EmotionJSX(Button, null, "Click me"), ___EmotionJSX(Menu, {
|
|
245
|
+
onAction: function onAction() {
|
|
246
|
+
return console.log('on action');
|
|
247
|
+
}
|
|
248
|
+
}, ___EmotionJSX(Item, {
|
|
249
|
+
key: "edit"
|
|
250
|
+
}, "Edit"), ___EmotionJSX(Item, {
|
|
251
|
+
key: "duplicate"
|
|
252
|
+
}, "Duplicate"), ___EmotionJSX(Item, {
|
|
253
|
+
key: "delete",
|
|
254
|
+
textValue: "delete"
|
|
255
|
+
}, ___EmotionJSX(Text, {
|
|
256
|
+
color: "critical.bright"
|
|
257
|
+
}, "Delete")))))));
|
|
258
|
+
};
|
|
234
259
|
WithInputField.parameters = {
|
|
235
260
|
a11y: {
|
|
236
261
|
config: {
|
|
@@ -1,6 +1,18 @@
|
|
|
1
|
+
import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object/define-property";
|
|
2
|
+
import _Symbol from "@babel/runtime-corejs3/core-js-stable/symbol";
|
|
3
|
+
import _Object$create from "@babel/runtime-corejs3/core-js-stable/object/create";
|
|
4
|
+
import _Object$getPrototypeOf from "@babel/runtime-corejs3/core-js-stable/object/get-prototype-of";
|
|
5
|
+
import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each";
|
|
6
|
+
import _Object$setPrototypeOf from "@babel/runtime-corejs3/core-js-stable/object/set-prototype-of";
|
|
7
|
+
import _Promise from "@babel/runtime-corejs3/core-js-stable/promise";
|
|
8
|
+
import _reverseInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/reverse";
|
|
9
|
+
import _sliceInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/slice";
|
|
10
|
+
import _typeof from "@babel/runtime-corejs3/helpers/esm/typeof";
|
|
11
|
+
import _asyncToGenerator from "@babel/runtime-corejs3/helpers/esm/asyncToGenerator";
|
|
12
|
+
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = _Object$defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof _Symbol ? _Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return _Object$defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = _Object$create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = _Object$getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = _Object$create(IteratorPrototype); function defineIteratorMethods(prototype) { var _context2; _forEachInstanceProperty(_context2 = ["next", "throw", "return"]).call(_context2, function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], _forEachInstanceProperty(tryLocsList).call(tryLocsList, pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return _Object$setPrototypeOf ? _Object$setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = _Object$create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = _Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) keys.push(key); return _reverseInstanceProperty(keys).call(keys), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { var _context3; if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, _forEachInstanceProperty(_context3 = this.tryEntries).call(_context3, resetTryEntry), !skipTempReset) for (var name in this) "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+_sliceInstanceProperty(name).call(name, 1)) && (this[name] = undefined); }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
|
|
1
13
|
import React from 'react';
|
|
2
14
|
import userEvent from '@testing-library/user-event';
|
|
3
|
-
import { Modal, OverlayProvider, RadioField, RadioGroupField } from '../../../index';
|
|
15
|
+
import { Button, Item, Menu, Modal, OverlayProvider, PopoverMenu, RadioField, RadioGroupField, Text } from '../../../index';
|
|
4
16
|
import { render, screen } from '../../../utils/testUtils/testWrapper';
|
|
5
17
|
import { universalComponentTests } from '../../../utils/testUtils/universalComponentTest';
|
|
6
18
|
|
|
@@ -26,6 +38,24 @@ var getModalWithRadioFieldGroup = function getModalWithRadioFieldGroup() {
|
|
|
26
38
|
"data-testid": "option2"
|
|
27
39
|
})))));
|
|
28
40
|
};
|
|
41
|
+
var buttonText = 'Click me';
|
|
42
|
+
var onAction = jest.fn();
|
|
43
|
+
var option1 = 'option1';
|
|
44
|
+
var getModalWithPopoverMenu = function getModalWithPopoverMenu() {
|
|
45
|
+
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
46
|
+
return render(___EmotionJSX(OverlayProvider, null, ___EmotionJSX(Modal, props, ___EmotionJSX(PopoverMenu, null, ___EmotionJSX(Button, null, buttonText), ___EmotionJSX(Menu, {
|
|
47
|
+
onAction: onAction
|
|
48
|
+
}, ___EmotionJSX(Item, {
|
|
49
|
+
key: "edit"
|
|
50
|
+
}, option1), ___EmotionJSX(Item, {
|
|
51
|
+
key: "duplicate"
|
|
52
|
+
}, "Duplicate"), ___EmotionJSX(Item, {
|
|
53
|
+
key: "delete",
|
|
54
|
+
textValue: "delete"
|
|
55
|
+
}, ___EmotionJSX(Text, {
|
|
56
|
+
color: "critical.bright"
|
|
57
|
+
}, "Delete")))))));
|
|
58
|
+
};
|
|
29
59
|
|
|
30
60
|
// **********
|
|
31
61
|
// Unit tests
|
|
@@ -250,4 +280,24 @@ test('should not show focus ring (is-focused class) on radio buttons when clicke
|
|
|
250
280
|
expect(radioB).toBeChecked();
|
|
251
281
|
expect(labelA).not.toHaveClass('is-focused');
|
|
252
282
|
expect(labelB).not.toHaveClass('is-focused');
|
|
253
|
-
});
|
|
283
|
+
});
|
|
284
|
+
test('popover menu onAction is called when menu is inside modal', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
285
|
+
var button, option1Text;
|
|
286
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
287
|
+
while (1) switch (_context.prev = _context.next) {
|
|
288
|
+
case 0:
|
|
289
|
+
getModalWithPopoverMenu();
|
|
290
|
+
button = screen.getByText(buttonText);
|
|
291
|
+
userEvent.click(button);
|
|
292
|
+
_context.next = 5;
|
|
293
|
+
return screen.findByText(option1);
|
|
294
|
+
case 5:
|
|
295
|
+
option1Text = _context.sent;
|
|
296
|
+
userEvent.click(option1Text);
|
|
297
|
+
expect(onAction).toHaveBeenCalled();
|
|
298
|
+
case 8:
|
|
299
|
+
case "end":
|
|
300
|
+
return _context.stop();
|
|
301
|
+
}
|
|
302
|
+
}, _callee);
|
|
303
|
+
})));
|
|
@@ -9,25 +9,31 @@ import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object
|
|
|
9
9
|
import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
|
|
10
10
|
import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
|
|
11
11
|
import _objectWithoutProperties from "@babel/runtime-corejs3/helpers/esm/objectWithoutProperties";
|
|
12
|
-
var _excluded = ["popoverRef", "state", "children", "className", "isNonModal", "width"];
|
|
12
|
+
var _excluded = ["arrowProps", "arrowCrossOffset", "direction", "popoverRef", "state", "children", "className", "isNonModal", "hasNoArrow", "width"];
|
|
13
13
|
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
14
14
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context, _context2; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
15
15
|
import * as React from 'react';
|
|
16
16
|
import { DismissButton, Overlay, usePopover } from '@react-aria/overlays';
|
|
17
17
|
import { useStatusClasses } from '../../hooks';
|
|
18
18
|
import Box from '../Box';
|
|
19
|
+
import { PopoverArrow } from '../PopoverContainer';
|
|
19
20
|
import { jsx as ___EmotionJSX } from "@emotion/react";
|
|
20
21
|
var Popover = function Popover(props) {
|
|
21
22
|
var ref = React.useRef(null);
|
|
22
|
-
var
|
|
23
|
+
var arrowProps = props.arrowProps,
|
|
24
|
+
arrowCrossOffset = props.arrowCrossOffset,
|
|
25
|
+
direction = props.direction,
|
|
26
|
+
_props$popoverRef = props.popoverRef,
|
|
23
27
|
popoverRef = _props$popoverRef === void 0 ? ref : _props$popoverRef,
|
|
24
28
|
state = props.state,
|
|
25
29
|
children = props.children,
|
|
26
30
|
className = props.className,
|
|
27
31
|
isNonModal = props.isNonModal,
|
|
32
|
+
hasNoArrow = props.hasNoArrow,
|
|
28
33
|
width = props.width,
|
|
29
34
|
others = _objectWithoutProperties(props, _excluded);
|
|
30
35
|
var _usePopover = usePopover(_objectSpread(_objectSpread({}, props), {}, {
|
|
36
|
+
offset: 5,
|
|
31
37
|
popoverRef: popoverRef
|
|
32
38
|
}), state),
|
|
33
39
|
popoverProps = _usePopover.popoverProps,
|
|
@@ -46,9 +52,10 @@ var Popover = function Popover(props) {
|
|
|
46
52
|
className: classNames,
|
|
47
53
|
role: "presentation",
|
|
48
54
|
width: width
|
|
49
|
-
}, popoverProps, others),
|
|
50
|
-
|
|
51
|
-
|
|
55
|
+
}, popoverProps, others), children, hasNoArrow ? null : ___EmotionJSX(PopoverArrow, _extends({}, arrowProps, {
|
|
56
|
+
arrowCrossOffset: arrowCrossOffset,
|
|
57
|
+
direction: direction
|
|
58
|
+
})), ___EmotionJSX(DismissButton, {
|
|
52
59
|
onDismiss: state.close
|
|
53
60
|
})));
|
|
54
61
|
};
|
|
@@ -13,16 +13,14 @@ import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/insta
|
|
|
13
13
|
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
14
14
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context2, _context3; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context2 = ownKeys(Object(source), !0)).call(_context2, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context3 = ownKeys(Object(source))).call(_context3, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
15
15
|
import React, { forwardRef, useRef } from 'react';
|
|
16
|
-
import { DismissButton, FocusScope,
|
|
16
|
+
import { DismissButton, FocusScope, OverlayContainer, useMenuTrigger } from 'react-aria';
|
|
17
17
|
import { useMenuTriggerState } from 'react-stately';
|
|
18
18
|
import { PressResponder } from '@react-aria/interactions';
|
|
19
19
|
import { MenuContext } from '../../context/MenuContext';
|
|
20
|
-
import
|
|
21
|
-
import PopoverContainer from '../PopoverContainer';
|
|
20
|
+
import Popover from '../Popover/Popover';
|
|
22
21
|
import { jsx as ___EmotionJSX } from "@emotion/react";
|
|
23
22
|
var PopoverMenu = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
24
23
|
var _context;
|
|
25
|
-
var menuPopoverRef = useLocalOrForwardRef(ref);
|
|
26
24
|
var triggerRef = useRef(null);
|
|
27
25
|
var menuRef = useRef(null);
|
|
28
26
|
var children = props.children,
|
|
@@ -46,20 +44,6 @@ var PopoverMenu = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
|
46
44
|
var _useMenuTrigger = useMenuTrigger({}, state, triggerRef),
|
|
47
45
|
menuTriggerProps = _useMenuTrigger.menuTriggerProps,
|
|
48
46
|
menuProps = _useMenuTrigger.menuProps;
|
|
49
|
-
var _useOverlayPosition = useOverlayPosition({
|
|
50
|
-
targetRef: triggerRef,
|
|
51
|
-
overlayRef: menuPopoverRef,
|
|
52
|
-
scrollRef: menuRef,
|
|
53
|
-
offset: 5,
|
|
54
|
-
placement: _concatInstanceProperty(_context = "".concat(direction, " ")).call(_context, align),
|
|
55
|
-
// Our API preference is for default false so we invert this since it should be default true
|
|
56
|
-
shouldFlip: !isNotFlippable,
|
|
57
|
-
isOpen: state.isOpen,
|
|
58
|
-
onClose: state.close,
|
|
59
|
-
shouldUpdatePosition: true
|
|
60
|
-
}),
|
|
61
|
-
positionProps = _useOverlayPosition.overlayProps,
|
|
62
|
-
placement = _useOverlayPosition.placement;
|
|
63
47
|
|
|
64
48
|
/* eslint-disable react/jsx-no-constructed-context-values */
|
|
65
49
|
var menuContext = _objectSpread(_objectSpread({}, menuProps), {}, {
|
|
@@ -77,22 +61,23 @@ var PopoverMenu = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
|
77
61
|
}), menu, ___EmotionJSX(DismissButton, {
|
|
78
62
|
onDismiss: state.close
|
|
79
63
|
}));
|
|
64
|
+
var placement = _concatInstanceProperty(_context = "".concat(direction, " ")).call(_context, align);
|
|
80
65
|
return ___EmotionJSX(React.Fragment, null, ___EmotionJSX(PressResponder, _extends({}, menuTriggerProps, {
|
|
81
66
|
ref: triggerRef,
|
|
82
67
|
isPressed: state.isOpen
|
|
83
68
|
}), menuTrigger), ___EmotionJSX(MenuContext.Provider, {
|
|
84
69
|
value: menuContext
|
|
85
|
-
}, ___EmotionJSX(
|
|
86
|
-
isOpen: state.isOpen,
|
|
87
|
-
ref: menuPopoverRef,
|
|
70
|
+
}, ___EmotionJSX(OverlayContainer, null, ___EmotionJSX(Popover, _extends({
|
|
88
71
|
placement: placement,
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
72
|
+
hasNoArrow: hasNoArrow
|
|
73
|
+
}, menuProps, {
|
|
74
|
+
"data-popover-placement": direction,
|
|
75
|
+
"data-testid": "popover-container",
|
|
76
|
+
role: "presentation",
|
|
77
|
+
triggerRef: triggerRef,
|
|
78
|
+
state: state,
|
|
79
|
+
direction: direction
|
|
80
|
+
}), contents))));
|
|
96
81
|
});
|
|
97
82
|
PopoverMenu.defaultProps = {
|
|
98
83
|
align: 'middle',
|
|
@@ -60,7 +60,9 @@ describe('useOverlappingMenuHoverState', function () {
|
|
|
60
60
|
case 0:
|
|
61
61
|
getComponent();
|
|
62
62
|
_context.next = 3;
|
|
63
|
-
return userEvent.hover(screen.getByRole('listitem'
|
|
63
|
+
return userEvent.hover(screen.getByRole('listitem', {
|
|
64
|
+
hidden: true
|
|
65
|
+
}));
|
|
64
66
|
case 3:
|
|
65
67
|
screen.getByText(IS_HOVERED);
|
|
66
68
|
case 4:
|
|
@@ -99,7 +101,9 @@ describe('useOverlappingMenuHoverState', function () {
|
|
|
99
101
|
return userEvent.click(screen.getByRole('button'));
|
|
100
102
|
case 3:
|
|
101
103
|
_context3.next = 5;
|
|
102
|
-
return userEvent.unhover(screen.getByRole('listitem'
|
|
104
|
+
return userEvent.unhover(screen.getByRole('listitem', {
|
|
105
|
+
hidden: true
|
|
106
|
+
}));
|
|
103
107
|
case 5:
|
|
104
108
|
expect(screen.queryByText(IS_HOVERED)).not.toBeInTheDocument();
|
|
105
109
|
case 6:
|
|
@@ -144,7 +148,9 @@ describe('useOverlappingMenuHoverState', function () {
|
|
|
144
148
|
return userEvent.hover(screen.getByRole('menu'));
|
|
145
149
|
case 5:
|
|
146
150
|
_context5.next = 7;
|
|
147
|
-
return userEvent.hover(screen.getByRole('listitem'
|
|
151
|
+
return userEvent.hover(screen.getByRole('listitem', {
|
|
152
|
+
hidden: true
|
|
153
|
+
}));
|
|
148
154
|
case 7:
|
|
149
155
|
screen.getByText(IS_HOVERED);
|
|
150
156
|
case 8:
|
|
@@ -190,10 +196,14 @@ describe('useOverlappingMenuHoverState', function () {
|
|
|
190
196
|
return userEvent.hover(screen.getByRole('menu'));
|
|
191
197
|
case 5:
|
|
192
198
|
_context7.next = 7;
|
|
193
|
-
return userEvent.hover(screen.getByRole('listitem'
|
|
199
|
+
return userEvent.hover(screen.getByRole('listitem', {
|
|
200
|
+
hidden: true
|
|
201
|
+
}));
|
|
194
202
|
case 7:
|
|
195
203
|
_context7.next = 9;
|
|
196
|
-
return userEvent.unhover(screen.getByRole('listitem'
|
|
204
|
+
return userEvent.unhover(screen.getByRole('listitem', {
|
|
205
|
+
hidden: true
|
|
206
|
+
}));
|
|
197
207
|
case 9:
|
|
198
208
|
expect(screen.queryByText(IS_HOVERED)).not.toBeInTheDocument();
|
|
199
209
|
case 10:
|
|
@@ -345,6 +345,7 @@ export var universalFieldComponentTests = function universalFieldComponentTests(
|
|
|
345
345
|
}
|
|
346
346
|
});
|
|
347
347
|
fireEvent.submit(screen.getByRole('form', {
|
|
348
|
+
hidden: true,
|
|
348
349
|
name: /test form 2/i
|
|
349
350
|
}));
|
|
350
351
|
expect(handleFormSubmit).toHaveBeenCalledWith({
|
|
@@ -365,6 +366,7 @@ export var universalFieldComponentTests = function universalFieldComponentTests(
|
|
|
365
366
|
}
|
|
366
367
|
});
|
|
367
368
|
fireEvent.submit(screen.getByRole('form', {
|
|
369
|
+
hidden: true,
|
|
368
370
|
name: /test form 2/i
|
|
369
371
|
}));
|
|
370
372
|
expect(handleFormSubmit).toHaveBeenCalledWith({
|
|
@@ -415,6 +417,7 @@ export var universalFieldComponentTests = function universalFieldComponentTests(
|
|
|
415
417
|
});
|
|
416
418
|
}
|
|
417
419
|
fireEvent.submit(screen.getByRole('form', {
|
|
420
|
+
hidden: true,
|
|
418
421
|
name: /test form 2/i
|
|
419
422
|
}));
|
|
420
423
|
expect(handleFormSubmit).toHaveBeenCalledWith({
|