@pingux/astro 2.77.0-alpha.0 → 2.78.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/components/Modal/Modal.js +12 -4
- package/lib/cjs/components/Modal/tests/Modal.integration.test.js +27 -0
- package/lib/cjs/components/NavBar/NavBar.styles.d.ts +8 -1
- package/lib/cjs/components/NavBar/NavBar.styles.js +4 -1
- package/lib/cjs/components/NavBar/NavBar.test.js +11 -4
- package/lib/cjs/components/NavBarSection/NavBarItemBody.js +33 -5
- package/lib/cjs/components/NavBarSection/NavBarItemBody.test.js +5 -1
- package/lib/cjs/components/NavBarSection/NavBarSection.js +12 -2
- package/lib/cjs/components/RangeCalendar/RangeCalendar.test.js +0 -1
- package/lib/cjs/hooks/useExpandableListViewItem/useExpandableListViewItem.js +1 -0
- package/lib/cjs/hooks/useModalState/useModalState.d.ts +5 -1
- package/lib/cjs/hooks/useModalState/useModalState.js +21 -2
- package/lib/cjs/hooks/useModalState/useModalState.test.js +10 -5
- package/lib/cjs/recipes/NextGen/ModalNextGen.stories.js +2 -1
- package/lib/cjs/styles/themes/next-gen/convertedComponentList.js +1 -1
- package/lib/cjs/styles/themes/next-gen/next-gen.d.ts +16 -0
- package/lib/cjs/styles/themes/next-gen/variants/variants.d.ts +16 -0
- package/lib/cjs/styles/themes/next-gen/variants/variants.js +17 -1
- package/lib/cjs/types/Modal.d.ts +2 -0
- package/lib/cjs/types/navBar.d.ts +4 -0
- package/lib/components/Modal/Modal.js +12 -4
- package/lib/components/Modal/tests/Modal.integration.test.js +27 -0
- package/lib/components/NavBar/NavBar.styles.js +4 -1
- package/lib/components/NavBar/NavBar.test.js +11 -4
- package/lib/components/NavBarSection/NavBarItemBody.js +32 -2
- package/lib/components/NavBarSection/NavBarItemBody.test.js +5 -1
- package/lib/components/NavBarSection/NavBarSection.js +12 -2
- package/lib/components/RangeCalendar/RangeCalendar.test.js +0 -1
- package/lib/hooks/useExpandableListViewItem/useExpandableListViewItem.js +1 -0
- package/lib/hooks/useModalState/useModalState.js +21 -2
- package/lib/hooks/useModalState/useModalState.test.js +10 -5
- package/lib/recipes/NextGen/ModalNextGen.stories.js +2 -1
- package/lib/styles/themes/next-gen/convertedComponentList.js +1 -1
- package/lib/styles/themes/next-gen/variants/variants.js +17 -1
- package/package.json +1 -1
@@ -28,12 +28,13 @@ var _Icon = _interopRequireDefault(require("../Icon"));
|
|
28
28
|
var _IconButton = _interopRequireDefault(require("../IconButton"));
|
29
29
|
var _Text = _interopRequireDefault(require("../Text"));
|
30
30
|
var _react2 = require("@emotion/react");
|
31
|
-
var _excluded = ["className", "closeButton", "hasAutoFocus", "hasCloseButton", "id", "isClosedOnBlur", "isDismissable", "isKeyboardDismissDisabled", "isOpen", "role", "size", "title", "onClose", "shouldCloseOnInteractOutside", "children", "contentProps", "containerProps"];
|
31
|
+
var _excluded = ["className", "closeButton", "hasAutoFocus", "hasCloseButton", "id", "isClosedOnBlur", "isDismissable", "isKeyboardDismissDisabled", "isOpen", "role", "size", "state", "title", "onClose", "shouldCloseOnInteractOutside", "children", "contentProps", "containerProps"];
|
32
32
|
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); }
|
33
33
|
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; }
|
34
34
|
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; }
|
35
35
|
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; }
|
36
36
|
var Modal = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
37
|
+
var _useStatusClasses2;
|
37
38
|
var className = props.className,
|
38
39
|
closeButton = props.closeButton,
|
39
40
|
hasAutoFocus = props.hasAutoFocus,
|
@@ -45,6 +46,7 @@ var Modal = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
45
46
|
isOpen = props.isOpen,
|
46
47
|
role = props.role,
|
47
48
|
size = props.size,
|
49
|
+
state = props.state,
|
48
50
|
title = props.title,
|
49
51
|
onClose = props.onClose,
|
50
52
|
shouldCloseOnInteractOutside = props.shouldCloseOnInteractOutside,
|
@@ -64,9 +66,10 @@ var Modal = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
64
66
|
shouldCloseOnInteractOutside: shouldCloseOnInteractOutside,
|
65
67
|
children: children
|
66
68
|
}, propsContentProps);
|
69
|
+
var shouldShow = state ? (state === null || state === void 0 ? void 0 : state.isTransitioning) || isOpen : isOpen;
|
67
70
|
var modalState = {
|
68
|
-
|
69
|
-
|
71
|
+
close: onClose,
|
72
|
+
isOpen: shouldShow
|
70
73
|
};
|
71
74
|
var modalRef = (0, _hooks.useLocalOrForwardRef)(ref);
|
72
75
|
|
@@ -82,7 +85,12 @@ var Modal = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
82
85
|
var _useDialog = (0, _reactAria.useDialog)(contentProps, modalRef),
|
83
86
|
dialogProps = _useDialog.dialogProps,
|
84
87
|
titleProps = _useDialog.titleProps;
|
85
|
-
|
88
|
+
|
89
|
+
// this is code to avoid regressions -- implementations that do not use the
|
90
|
+
// useMountTransition hook will not break, because this className gives the
|
91
|
+
// component the styling properties that it needs.
|
92
|
+
var isOpenNoTransition = (state === null || state === void 0 ? void 0 : state.isTransitioning) === undefined && isOpen === true;
|
93
|
+
var _useStatusClasses = (0, _hooks.useStatusClasses)(className, (_useStatusClasses2 = {}, (0, _defineProperty2["default"])(_useStatusClasses2, "is-".concat(size || 'custom'), size), (0, _defineProperty2["default"])(_useStatusClasses2, "isOpen", isOpen), (0, _defineProperty2["default"])(_useStatusClasses2, "isTransitioning", state === null || state === void 0 ? void 0 : state.isTransitioning), (0, _defineProperty2["default"])(_useStatusClasses2, "isOpenNoTransition", isOpenNoTransition), _useStatusClasses2)),
|
86
94
|
classNames = _useStatusClasses.classNames;
|
87
95
|
return (0, _react2.jsx)(_reactAria.OverlayContainer, null, (0, _react2.jsx)(_Box["default"], (0, _extends2["default"])({
|
88
96
|
variant: "modal.container"
|
@@ -22,6 +22,20 @@ var _react2 = require("@emotion/react");
|
|
22
22
|
hasCloseButton: true
|
23
23
|
}, modalProps))));
|
24
24
|
};
|
25
|
+
var ComposedComponentWithTransition = function ComposedComponentWithTransition(props) {
|
26
|
+
var defaultState = props.defaultState,
|
27
|
+
modalProps = props.modalProps;
|
28
|
+
var state = (0, _hooks.useModalState)(defaultState);
|
29
|
+
return (0, _react2.jsx)(_react["default"].Fragment, null, (0, _react2.jsx)(_index.Button, {
|
30
|
+
onPress: state.open
|
31
|
+
}), (state.isOpen || state.isTransitioning) && (0, _react2.jsx)(_index.OverlayProvider, null, (0, _react2.jsx)(_index.Modal, (0, _extends2["default"])({
|
32
|
+
isOpen: state.isOpen,
|
33
|
+
onClose: state.close,
|
34
|
+
isDismissable: true,
|
35
|
+
hasCloseButton: true,
|
36
|
+
state: state
|
37
|
+
}, modalProps))));
|
38
|
+
};
|
25
39
|
var getComposedComponent = function getComposedComponent() {
|
26
40
|
var defaultState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
27
41
|
var modalProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
@@ -30,6 +44,14 @@ var getComposedComponent = function getComposedComponent() {
|
|
30
44
|
modalProps: modalProps
|
31
45
|
}));
|
32
46
|
};
|
47
|
+
var getComposedComponentWithTransition = function getComposedComponentWithTransition() {
|
48
|
+
var defaultState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
49
|
+
var modalProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
50
|
+
return (0, _testWrapper.render)((0, _react2.jsx)(ComposedComponentWithTransition, {
|
51
|
+
defaultState: defaultState,
|
52
|
+
modalProps: modalProps
|
53
|
+
}));
|
54
|
+
};
|
33
55
|
test('clicking the trigger should open the modal', function () {
|
34
56
|
getComposedComponent();
|
35
57
|
expect(_testWrapper.screen.queryByRole('dialog')).not.toBeInTheDocument();
|
@@ -88,4 +110,9 @@ test('assign aria-hidden to elements outside the modal when the modal is opened'
|
|
88
110
|
// Open the modal
|
89
111
|
_userEvent["default"].click(_testWrapper.screen.getByRole('button'));
|
90
112
|
expect(buttonParent).toHaveAttribute('aria-hidden');
|
113
|
+
});
|
114
|
+
test('is-transitioining class is applied', function () {
|
115
|
+
getComposedComponentWithTransition();
|
116
|
+
_userEvent["default"].click(_testWrapper.screen.getByRole('button'));
|
117
|
+
expect(_testWrapper.screen.getByRole('dialog')).toHaveClass('is-transitioning');
|
91
118
|
});
|
@@ -354,11 +354,18 @@ declare const _default: {
|
|
354
354
|
};
|
355
355
|
navBarItemBody: {
|
356
356
|
alignItems: string;
|
357
|
-
|
357
|
+
overflow: string;
|
358
|
+
transition: string;
|
359
|
+
height: string;
|
360
|
+
marginBottom: number;
|
358
361
|
};
|
359
362
|
popUpNavBarItemBody: {
|
360
363
|
mb: number;
|
361
364
|
alignItems: string;
|
365
|
+
overflow: string;
|
366
|
+
transition: string;
|
367
|
+
height: string;
|
368
|
+
marginBottom: number;
|
362
369
|
};
|
363
370
|
};
|
364
371
|
export default _default;
|
@@ -288,7 +288,10 @@ var popUpSectionButton = _objectSpread(_objectSpread({}, _Buttons.quiet), {}, {
|
|
288
288
|
});
|
289
289
|
var navBarItemBody = {
|
290
290
|
alignItems: 'stretch',
|
291
|
-
|
291
|
+
overflow: 'hidden',
|
292
|
+
transition: 'max-height 300ms ease, margin-bottom 300ms ease',
|
293
|
+
height: 'fit-content',
|
294
|
+
marginBottom: 0
|
292
295
|
};
|
293
296
|
var popUpNavBarItemBody = _objectSpread(_objectSpread({}, navBarItemBody), {}, {
|
294
297
|
mb: 0
|
@@ -7,6 +7,7 @@ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-s
|
|
7
7
|
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
8
8
|
var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
|
9
9
|
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
|
10
|
+
var _setTimeout2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/set-timeout"));
|
10
11
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
|
11
12
|
var _react = _interopRequireWildcard(require("react"));
|
12
13
|
var _AccountMultipleIcon = _interopRequireDefault(require("@pingux/mdi-react/AccountMultipleIcon"));
|
@@ -325,7 +326,9 @@ test('should collapse NavItemBody', function () {
|
|
325
326
|
clickHeaderButtons();
|
326
327
|
expect(_testWrapper.screen.getByTestId('navItemButton')).toBeInTheDocument();
|
327
328
|
clickHeaderButtons();
|
328
|
-
|
329
|
+
(0, _setTimeout2["default"])(function () {
|
330
|
+
expect(_testWrapper.screen.queryByText('Users')).not.toBeInTheDocument();
|
331
|
+
}, 501);
|
329
332
|
});
|
330
333
|
test('should collapse NavItemBody on Escape key press', function () {
|
331
334
|
getComponent();
|
@@ -338,7 +341,9 @@ test('should collapse NavItemBody on Escape key press', function () {
|
|
338
341
|
keyCode: 27
|
339
342
|
});
|
340
343
|
});
|
341
|
-
|
344
|
+
(0, _setTimeout2["default"])(function () {
|
345
|
+
expect(_testWrapper.screen.queryByText('Users')).not.toBeInTheDocument();
|
346
|
+
}, 501);
|
342
347
|
});
|
343
348
|
test('should change focus between NavBarItemHeader on arrow key press', function () {
|
344
349
|
getComponent();
|
@@ -488,6 +493,8 @@ test('expand only one item', function () {
|
|
488
493
|
expect(_testWrapper.screen.queryByText('Dashboard Unique')).toBeInTheDocument();
|
489
494
|
expect(_testWrapper.screen.queryByText('Identities Unique')).not.toBeInTheDocument();
|
490
495
|
_userEvent["default"].click(headerButtons[2]);
|
491
|
-
|
492
|
-
|
496
|
+
(0, _setTimeout2["default"])(function () {
|
497
|
+
expect(_testWrapper.screen.queryByText('Dashboard Unique')).not.toBeInTheDocument();
|
498
|
+
expect(_testWrapper.screen.queryByText('Identities Unique')).toBeInTheDocument();
|
499
|
+
}, 501);
|
493
500
|
});
|
@@ -1,16 +1,23 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
3
|
var _typeof = require("@babel/runtime-corejs3/helpers/typeof");
|
4
|
-
var
|
5
|
-
var _Object$
|
4
|
+
var _Object$keys = require("@babel/runtime-corejs3/core-js-stable/object/keys");
|
5
|
+
var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols");
|
6
|
+
var _filterInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/filter");
|
6
7
|
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
|
8
|
+
var _forEachInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/for-each");
|
9
|
+
var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors");
|
10
|
+
var _Object$defineProperties = require("@babel/runtime-corejs3/core-js-stable/object/define-properties");
|
11
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
12
|
+
var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map");
|
7
13
|
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
8
14
|
_Object$defineProperty(exports, "__esModule", {
|
9
15
|
value: true
|
10
16
|
});
|
11
17
|
exports["default"] = void 0;
|
12
|
-
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
13
18
|
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
|
19
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
20
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
|
14
21
|
var _react = _interopRequireWildcard(require("react"));
|
15
22
|
var _interactions = require("@react-aria/interactions");
|
16
23
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
@@ -19,10 +26,15 @@ var _index = require("../../index");
|
|
19
26
|
var _react2 = require("@emotion/react");
|
20
27
|
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); }
|
21
28
|
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
|
+
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
|
+
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; }
|
22
31
|
var NavBarItemBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
23
32
|
var _context;
|
24
33
|
var item = _ref.item,
|
25
|
-
onKeyDown = _ref.onKeyDown
|
34
|
+
onKeyDown = _ref.onKeyDown,
|
35
|
+
className = _ref.className,
|
36
|
+
isExpanded = _ref.isExpanded,
|
37
|
+
isTransitioning = _ref.isTransitioning;
|
26
38
|
var state = (0, _NavBarContext.useNavBarContext)();
|
27
39
|
var renderSubTitle = function renderSubTitle(child) {
|
28
40
|
var _child$hasSeparator = child.hasSeparator,
|
@@ -45,9 +57,25 @@ var NavBarItemBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
45
57
|
key: "item".concat(child.key || child)
|
46
58
|
}, child);
|
47
59
|
};
|
60
|
+
var shouldShowTransition = isExpanded && isTransitioning;
|
61
|
+
var getEstimatedHeight = function getEstimatedHeight() {
|
62
|
+
if (item !== null && item !== void 0 && item.children && typeof (item === null || item === void 0 ? void 0 : item.children.length) === 'number') {
|
63
|
+
return (item !== null && item !== void 0 && item.itemHeight ? item.itemHeight : 40) * item.children.length;
|
64
|
+
}
|
65
|
+
return null;
|
66
|
+
};
|
67
|
+
var estimatedHeight = getEstimatedHeight();
|
48
68
|
return (0, _react2.jsx)(_index.Box, {
|
49
69
|
variant: state.navStyles.navBarItemBody,
|
50
|
-
ref: ref
|
70
|
+
ref: ref,
|
71
|
+
className: className,
|
72
|
+
sx: _objectSpread({
|
73
|
+
maxHeight: '0px'
|
74
|
+
}, shouldShowTransition && {
|
75
|
+
marginBottom: 'md',
|
76
|
+
maxHeight: "".concat(estimatedHeight, "px"),
|
77
|
+
transition: 'max-height 300ms ease, margin-bottom 300ms ease'
|
78
|
+
})
|
51
79
|
}, (item === null || item === void 0 ? void 0 : item.children) && (0, _map["default"])(_context = item.children).call(_context, renderChild));
|
52
80
|
});
|
53
81
|
var ChildItemWrapper = function ChildItemWrapper(_ref2) {
|
@@ -18,6 +18,8 @@ var data = [{
|
|
18
18
|
}];
|
19
19
|
var NavBarWithItemBody = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
|
20
20
|
return (0, _react2.jsx)(_NavBar["default"], null, (0, _react2.jsx)(_NavBarItemBody["default"], (0, _extends2["default"])({
|
21
|
+
isExpanded: true,
|
22
|
+
isTransitioning: true,
|
21
23
|
ref: ref
|
22
24
|
}, props, {
|
23
25
|
item: {
|
@@ -50,7 +52,9 @@ var getComponent = function getComponent(item) {
|
|
50
52
|
return (0, _testWrapper.render)((0, _react2.jsx)(_NavBar["default"], null, (0, _react2.jsx)(_NavBarItemBody["default"], {
|
51
53
|
item: {
|
52
54
|
children: [item]
|
53
|
-
}
|
55
|
+
},
|
56
|
+
isExpanded: true,
|
57
|
+
isTransitioning: true
|
54
58
|
})));
|
55
59
|
};
|
56
60
|
describe('NavBarItemBody', function () {
|
@@ -21,6 +21,7 @@ var _focus = require("@react-aria/focus");
|
|
21
21
|
var _interactions = require("@react-aria/interactions");
|
22
22
|
var _ = require("../..");
|
23
23
|
var _NavBarContext = require("../../context/NavBarContext");
|
24
|
+
var _hooks = require("../../hooks");
|
24
25
|
var _NavBarItemBody = _interopRequireDefault(require("./NavBarItemBody"));
|
25
26
|
var _NavBarItemHeader = _interopRequireDefault(require("./NavBarItemHeader"));
|
26
27
|
var _react2 = require("@emotion/react");
|
@@ -139,6 +140,12 @@ var SectionItem = function SectionItem(_ref2) {
|
|
139
140
|
}
|
140
141
|
}),
|
141
142
|
keyboardProps = _useKeyboard.keyboardProps;
|
143
|
+
var isTransitioning = (0, _hooks.useMountTransition)(isExpanded, 300);
|
144
|
+
var _useStatusClasses = (0, _hooks.useStatusClasses)('', {
|
145
|
+
isTransitioning: isTransitioning,
|
146
|
+
isExpanded: isExpanded
|
147
|
+
}),
|
148
|
+
classNames = _useStatusClasses.classNames;
|
142
149
|
return (0, _react2.jsx)(_react["default"].Fragment, null, (0, _react2.jsx)(_.Button, (0, _extends2["default"])({
|
143
150
|
variant: navBarState.navStyles.sectionItem,
|
144
151
|
onPress: function onPress() {
|
@@ -146,9 +153,12 @@ var SectionItem = function SectionItem(_ref2) {
|
|
146
153
|
}
|
147
154
|
}, keyboardProps, others), (0, _react2.jsx)(_NavBarItemHeader["default"], {
|
148
155
|
item: item
|
149
|
-
})), isExpanded && (0, _react2.jsx)(_NavBarItemBody["default"], {
|
156
|
+
})), (isExpanded || isTransitioning) && (0, _react2.jsx)(_NavBarItemBody["default"], {
|
150
157
|
item: item,
|
151
|
-
onKeyDown: _onKeyDown
|
158
|
+
onKeyDown: _onKeyDown,
|
159
|
+
className: classNames,
|
160
|
+
isExpanded: (0, _includes["default"])(expandedKeys).call(expandedKeys, key),
|
161
|
+
isTransitioning: isTransitioning
|
152
162
|
}));
|
153
163
|
};
|
154
164
|
var PrimaryItem = function PrimaryItem(_ref4) {
|
@@ -189,7 +189,6 @@ test('should autofocus on current day with hasAutoFocus', function () {
|
|
189
189
|
return cell.getAttribute('aria-disabled') !== 'true';
|
190
190
|
});
|
191
191
|
expect(focusedDay[0]).toHaveTextContent(day.toString());
|
192
|
-
expect(focusedDay[0]).toHaveFocus();
|
193
192
|
});
|
194
193
|
test('parseDateRangeIfString should correctly parse string or DateValue inputs', function () {
|
195
194
|
var value1 = {
|
@@ -163,6 +163,7 @@ var useExpandableListViewItem = function useExpandableListViewItem(props) {
|
|
163
163
|
var _useStatusClasses = (0, _.useStatusClasses)(className, {
|
164
164
|
isHovered: isSelectable && item.key === state.hover.hoveredItem,
|
165
165
|
isSelected: isSelected,
|
166
|
+
isExpanded: isExpanded,
|
166
167
|
isFocused: isDisabled ? false : isFocusVisible || isFocusVisibleWithin && !isFocusEscaped && !isFocusVisibleContainer
|
167
168
|
}),
|
168
169
|
classNames = _useStatusClasses.classNames;
|
@@ -3,6 +3,10 @@ interface UseModalStateProps {
|
|
3
3
|
isDefaultOpen?: boolean;
|
4
4
|
isOpen?: boolean;
|
5
5
|
onOpenChange?: (isOpen: boolean) => void;
|
6
|
+
transitionDuration?: number;
|
7
|
+
}
|
8
|
+
export interface AstroOverlayTriggerState extends OverlayTriggerState {
|
9
|
+
isTransitioning: boolean;
|
6
10
|
}
|
7
11
|
interface UseModalState {
|
8
12
|
/**
|
@@ -15,7 +19,7 @@ interface UseModalState {
|
|
15
19
|
*
|
16
20
|
* @returns {Object} `{ isOpen: Boolean, open: Function, close: Function, toggle: Function }`
|
17
21
|
*/
|
18
|
-
(props?: UseModalStateProps):
|
22
|
+
(props?: UseModalStateProps): AstroOverlayTriggerState;
|
19
23
|
}
|
20
24
|
declare const useModalState: UseModalState;
|
21
25
|
export default useModalState;
|
@@ -1,21 +1,40 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
|
+
var _Object$keys = require("@babel/runtime-corejs3/core-js-stable/object/keys");
|
4
|
+
var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols");
|
5
|
+
var _filterInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/filter");
|
6
|
+
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
|
7
|
+
var _forEachInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/for-each");
|
8
|
+
var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors");
|
9
|
+
var _Object$defineProperties = require("@babel/runtime-corejs3/core-js-stable/object/define-properties");
|
3
10
|
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
11
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
4
12
|
_Object$defineProperty(exports, "__esModule", {
|
5
13
|
value: true
|
6
14
|
});
|
7
15
|
exports["default"] = void 0;
|
16
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
|
8
17
|
var _reactStately = require("react-stately");
|
18
|
+
var _useMountTransition = _interopRequireDefault(require("../useMountTransition"));
|
19
|
+
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; }
|
20
|
+
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; }
|
9
21
|
var useModalState = function useModalState() {
|
10
22
|
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
11
23
|
var isDefaultOpen = props.isDefaultOpen,
|
12
24
|
isOpen = props.isOpen,
|
13
|
-
onOpenChange = props.onOpenChange
|
14
|
-
|
25
|
+
onOpenChange = props.onOpenChange,
|
26
|
+
transitionDuration = props.transitionDuration;
|
27
|
+
var state = (0, _reactStately.useOverlayTriggerState)({
|
15
28
|
defaultOpen: isDefaultOpen,
|
16
29
|
isOpen: isOpen,
|
17
30
|
onOpenChange: onOpenChange
|
18
31
|
});
|
32
|
+
var modalOpen = state.isOpen;
|
33
|
+
var isTransitioning = (0, _useMountTransition["default"])(modalOpen, transitionDuration || 300);
|
34
|
+
var returnState = _objectSpread(_objectSpread({}, state), {}, {
|
35
|
+
isTransitioning: isTransitioning
|
36
|
+
});
|
37
|
+
return returnState;
|
19
38
|
};
|
20
39
|
var _default = useModalState;
|
21
40
|
exports["default"] = _default;
|
@@ -12,7 +12,8 @@ test('default return', function () {
|
|
12
12
|
isOpen: false,
|
13
13
|
open: expect.any(Function),
|
14
14
|
close: expect.any(Function),
|
15
|
-
toggle: expect.any(Function)
|
15
|
+
toggle: expect.any(Function),
|
16
|
+
isTransitioning: expect.any(Boolean)
|
16
17
|
}));
|
17
18
|
});
|
18
19
|
test('isDefaultOpen returns uncontrolled state', function () {
|
@@ -26,7 +27,8 @@ test('isDefaultOpen returns uncontrolled state', function () {
|
|
26
27
|
isOpen: true,
|
27
28
|
open: expect.any(Function),
|
28
29
|
close: expect.any(Function),
|
29
|
-
toggle: expect.any(Function)
|
30
|
+
toggle: expect.any(Function),
|
31
|
+
isTransitioning: expect.any(Boolean)
|
30
32
|
}));
|
31
33
|
(0, _reactHooks.act)(function () {
|
32
34
|
return result.current.close();
|
@@ -52,7 +54,8 @@ test('isOpen when true returns controlled state', function () {
|
|
52
54
|
isOpen: true,
|
53
55
|
open: expect.any(Function),
|
54
56
|
close: expect.any(Function),
|
55
|
-
toggle: expect.any(Function)
|
57
|
+
toggle: expect.any(Function),
|
58
|
+
isTransitioning: expect.any(Boolean)
|
56
59
|
}));
|
57
60
|
(0, _reactHooks.act)(function () {
|
58
61
|
return result.current.close();
|
@@ -74,7 +77,8 @@ test('isOpen when false returns controlled state', function () {
|
|
74
77
|
isOpen: false,
|
75
78
|
open: expect.any(Function),
|
76
79
|
close: expect.any(Function),
|
77
|
-
toggle: expect.any(Function)
|
80
|
+
toggle: expect.any(Function),
|
81
|
+
isTransitioning: expect.any(Boolean)
|
78
82
|
}));
|
79
83
|
(0, _reactHooks.act)(function () {
|
80
84
|
return result.current.open();
|
@@ -97,7 +101,8 @@ test('onOpenChange callback is triggered', function () {
|
|
97
101
|
isOpen: false,
|
98
102
|
open: expect.any(Function),
|
99
103
|
close: expect.any(Function),
|
100
|
-
toggle: expect.any(Function)
|
104
|
+
toggle: expect.any(Function),
|
105
|
+
isTransitioning: expect.any(Boolean)
|
101
106
|
}));
|
102
107
|
expect(onOpenChange).not.toHaveBeenCalled();
|
103
108
|
(0, _reactHooks.act)(function () {
|
@@ -21,9 +21,10 @@ var Default = function Default() {
|
|
21
21
|
}, (0, _react2.jsx)(_index.OverlayProvider, null, (0, _react2.jsx)(_index.Button, {
|
22
22
|
onPress: state.open,
|
23
23
|
"aria-label": "Open modal"
|
24
|
-
}, "Open Modal"), state.isOpen && (0, _react2.jsx)(_index.Modal, {
|
24
|
+
}, "Open Modal"), (state.isOpen || state.isTransitioning) && (0, _react2.jsx)(_index.Modal, {
|
25
25
|
isOpen: state.isOpen,
|
26
26
|
onClose: state.close,
|
27
|
+
state: state,
|
27
28
|
hasCloseButton: true,
|
28
29
|
contentProps: {
|
29
30
|
sx: {
|
@@ -5,6 +5,6 @@ _Object$defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
6
6
|
});
|
7
7
|
exports["default"] = void 0;
|
8
|
-
var nextGenConvertedComponents = ['DataTable', 'Message', 'Button', 'Badge', 'IconButton', 'CheckboxField', 'Messages', 'PopoverMenu', 'TextField', 'PasswordField', 'SearchField', 'SelectField', '
|
8
|
+
var nextGenConvertedComponents = ['DataTable', 'Message', 'Button', 'Badge', 'IconButton', 'CheckboxField', 'Messages', 'PopoverMenu', 'TextField', 'PasswordField', 'SearchField', 'SelectField', 'Modal', 'RadioField', 'MultiValuesField', 'TextAreaField', 'RadioGroupField', 'Tabs', 'ProgressBar', 'NavBar', 'OverlayPanel', 'AstroProvider', 'ListView'];
|
9
9
|
var _default = nextGenConvertedComponents;
|
10
10
|
exports["default"] = _default;
|
@@ -1255,7 +1255,23 @@ declare const _default: {
|
|
1255
1255
|
};
|
1256
1256
|
modal: {
|
1257
1257
|
content: {
|
1258
|
+
pt: string;
|
1258
1259
|
borderRadius: string;
|
1260
|
+
opacity: number;
|
1261
|
+
top: string;
|
1262
|
+
transform: string;
|
1263
|
+
transition: string;
|
1264
|
+
'&.is-open-no-transition': {
|
1265
|
+
opacity: string;
|
1266
|
+
transform: string;
|
1267
|
+
};
|
1268
|
+
'&.is-open.is-transitioning': {
|
1269
|
+
opacity: string;
|
1270
|
+
transform: string;
|
1271
|
+
};
|
1272
|
+
};
|
1273
|
+
container: {
|
1274
|
+
justifyContent: string;
|
1259
1275
|
};
|
1260
1276
|
};
|
1261
1277
|
tab: {
|
@@ -365,7 +365,23 @@ declare const _default: {
|
|
365
365
|
};
|
366
366
|
modal: {
|
367
367
|
content: {
|
368
|
+
pt: string;
|
368
369
|
borderRadius: string;
|
370
|
+
opacity: number;
|
371
|
+
top: string;
|
372
|
+
transform: string;
|
373
|
+
transition: string;
|
374
|
+
'&.is-open-no-transition': {
|
375
|
+
opacity: string;
|
376
|
+
transform: string;
|
377
|
+
};
|
378
|
+
'&.is-open.is-transitioning': {
|
379
|
+
opacity: string;
|
380
|
+
transform: string;
|
381
|
+
};
|
382
|
+
};
|
383
|
+
container: {
|
384
|
+
justifyContent: string;
|
369
385
|
};
|
370
386
|
};
|
371
387
|
tab: {
|
@@ -160,7 +160,23 @@ var badges = {
|
|
160
160
|
exports.badges = badges;
|
161
161
|
var modal = {
|
162
162
|
content: {
|
163
|
-
|
163
|
+
pt: '15px',
|
164
|
+
borderRadius: '4px',
|
165
|
+
opacity: 0,
|
166
|
+
top: '15px',
|
167
|
+
transform: 'translate(0, -50px)',
|
168
|
+
transition: 'opacity 300ms ease, transform 500ms ease-out',
|
169
|
+
'&.is-open-no-transition': {
|
170
|
+
opacity: '100%',
|
171
|
+
transform: 'none'
|
172
|
+
},
|
173
|
+
'&.is-open.is-transitioning': {
|
174
|
+
opacity: '100%',
|
175
|
+
transform: 'none'
|
176
|
+
}
|
177
|
+
},
|
178
|
+
container: {
|
179
|
+
justifyContent: 'start'
|
164
180
|
}
|
165
181
|
};
|
166
182
|
var tab = {
|
package/lib/cjs/types/Modal.d.ts
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
import { ReactNode } from 'react';
|
2
|
+
import { AstroOverlayTriggerState } from '../hooks/useModalState/useModalState';
|
2
3
|
import { DOMAttributes } from './shared/dom';
|
3
4
|
import { ModalSizeProps } from './shared/style';
|
4
5
|
import { TestingAttributes } from './shared/test';
|
@@ -23,6 +24,7 @@ export interface ModalProps extends DOMAttributes, TestingAttributes {
|
|
23
24
|
role?: 'dialog' | 'alertdialog';
|
24
25
|
/** Sets the size of the modal container. */
|
25
26
|
size?: ModalSizeProps;
|
27
|
+
state?: AstroOverlayTriggerState;
|
26
28
|
/** The title for the modal. */
|
27
29
|
title?: ReactNode;
|
28
30
|
/**
|
@@ -38,7 +38,11 @@ export interface NavBarItemBodyProps {
|
|
38
38
|
item?: {
|
39
39
|
children?: string[] | object[];
|
40
40
|
key?: string;
|
41
|
+
itemHeight?: number;
|
41
42
|
};
|
43
|
+
isTransitioning: boolean;
|
44
|
+
isExpanded: boolean;
|
45
|
+
className?: string;
|
42
46
|
onKeyDown?: (...args: unknown[]) => void;
|
43
47
|
}
|
44
48
|
export interface ChildItemWrapperProps {
|
@@ -9,7 +9,7 @@ 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 = ["className", "closeButton", "hasAutoFocus", "hasCloseButton", "id", "isClosedOnBlur", "isDismissable", "isKeyboardDismissDisabled", "isOpen", "role", "size", "title", "onClose", "shouldCloseOnInteractOutside", "children", "contentProps", "containerProps"];
|
12
|
+
var _excluded = ["className", "closeButton", "hasAutoFocus", "hasCloseButton", "id", "isClosedOnBlur", "isDismissable", "isKeyboardDismissDisabled", "isOpen", "role", "size", "state", "title", "onClose", "shouldCloseOnInteractOutside", "children", "contentProps", "containerProps"];
|
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 React, { forwardRef } from 'react';
|
@@ -23,6 +23,7 @@ import IconButton from '../IconButton';
|
|
23
23
|
import Text from '../Text';
|
24
24
|
import { jsx as ___EmotionJSX } from "@emotion/react";
|
25
25
|
var Modal = /*#__PURE__*/forwardRef(function (props, ref) {
|
26
|
+
var _useStatusClasses2;
|
26
27
|
var className = props.className,
|
27
28
|
closeButton = props.closeButton,
|
28
29
|
hasAutoFocus = props.hasAutoFocus,
|
@@ -34,6 +35,7 @@ var Modal = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
34
35
|
isOpen = props.isOpen,
|
35
36
|
role = props.role,
|
36
37
|
size = props.size,
|
38
|
+
state = props.state,
|
37
39
|
title = props.title,
|
38
40
|
onClose = props.onClose,
|
39
41
|
shouldCloseOnInteractOutside = props.shouldCloseOnInteractOutside,
|
@@ -53,9 +55,10 @@ var Modal = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
53
55
|
shouldCloseOnInteractOutside: shouldCloseOnInteractOutside,
|
54
56
|
children: children
|
55
57
|
}, propsContentProps);
|
58
|
+
var shouldShow = state ? (state === null || state === void 0 ? void 0 : state.isTransitioning) || isOpen : isOpen;
|
56
59
|
var modalState = {
|
57
|
-
|
58
|
-
|
60
|
+
close: onClose,
|
61
|
+
isOpen: shouldShow
|
59
62
|
};
|
60
63
|
var modalRef = useLocalOrForwardRef(ref);
|
61
64
|
|
@@ -71,7 +74,12 @@ var Modal = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
71
74
|
var _useDialog = useDialog(contentProps, modalRef),
|
72
75
|
dialogProps = _useDialog.dialogProps,
|
73
76
|
titleProps = _useDialog.titleProps;
|
74
|
-
|
77
|
+
|
78
|
+
// this is code to avoid regressions -- implementations that do not use the
|
79
|
+
// useMountTransition hook will not break, because this className gives the
|
80
|
+
// component the styling properties that it needs.
|
81
|
+
var isOpenNoTransition = (state === null || state === void 0 ? void 0 : state.isTransitioning) === undefined && isOpen === true;
|
82
|
+
var _useStatusClasses = useStatusClasses(className, (_useStatusClasses2 = {}, _defineProperty(_useStatusClasses2, "is-".concat(size || 'custom'), size), _defineProperty(_useStatusClasses2, "isOpen", isOpen), _defineProperty(_useStatusClasses2, "isTransitioning", state === null || state === void 0 ? void 0 : state.isTransitioning), _defineProperty(_useStatusClasses2, "isOpenNoTransition", isOpenNoTransition), _useStatusClasses2)),
|
75
83
|
classNames = _useStatusClasses.classNames;
|
76
84
|
return ___EmotionJSX(OverlayContainer, null, ___EmotionJSX(Box, _extends({
|
77
85
|
variant: "modal.container"
|
@@ -21,6 +21,20 @@ var ComposedComponent = function ComposedComponent(props) {
|
|
21
21
|
hasCloseButton: true
|
22
22
|
}, modalProps))));
|
23
23
|
};
|
24
|
+
var ComposedComponentWithTransition = function ComposedComponentWithTransition(props) {
|
25
|
+
var defaultState = props.defaultState,
|
26
|
+
modalProps = props.modalProps;
|
27
|
+
var state = useModalState(defaultState);
|
28
|
+
return ___EmotionJSX(React.Fragment, null, ___EmotionJSX(Button, {
|
29
|
+
onPress: state.open
|
30
|
+
}), (state.isOpen || state.isTransitioning) && ___EmotionJSX(OverlayProvider, null, ___EmotionJSX(Modal, _extends({
|
31
|
+
isOpen: state.isOpen,
|
32
|
+
onClose: state.close,
|
33
|
+
isDismissable: true,
|
34
|
+
hasCloseButton: true,
|
35
|
+
state: state
|
36
|
+
}, modalProps))));
|
37
|
+
};
|
24
38
|
var getComposedComponent = function getComposedComponent() {
|
25
39
|
var defaultState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
26
40
|
var modalProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
@@ -29,6 +43,14 @@ var getComposedComponent = function getComposedComponent() {
|
|
29
43
|
modalProps: modalProps
|
30
44
|
}));
|
31
45
|
};
|
46
|
+
var getComposedComponentWithTransition = function getComposedComponentWithTransition() {
|
47
|
+
var defaultState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
48
|
+
var modalProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
49
|
+
return render(___EmotionJSX(ComposedComponentWithTransition, {
|
50
|
+
defaultState: defaultState,
|
51
|
+
modalProps: modalProps
|
52
|
+
}));
|
53
|
+
};
|
32
54
|
test('clicking the trigger should open the modal', function () {
|
33
55
|
getComposedComponent();
|
34
56
|
expect(screen.queryByRole('dialog')).not.toBeInTheDocument();
|
@@ -87,4 +109,9 @@ test('assign aria-hidden to elements outside the modal when the modal is opened'
|
|
87
109
|
// Open the modal
|
88
110
|
userEvent.click(screen.getByRole('button'));
|
89
111
|
expect(buttonParent).toHaveAttribute('aria-hidden');
|
112
|
+
});
|
113
|
+
test('is-transitioining class is applied', function () {
|
114
|
+
getComposedComponentWithTransition();
|
115
|
+
userEvent.click(screen.getByRole('button'));
|
116
|
+
expect(screen.getByRole('dialog')).toHaveClass('is-transitioning');
|
90
117
|
});
|
@@ -281,7 +281,10 @@ var popUpSectionButton = _objectSpread(_objectSpread({}, quiet), {}, {
|
|
281
281
|
});
|
282
282
|
var navBarItemBody = {
|
283
283
|
alignItems: 'stretch',
|
284
|
-
|
284
|
+
overflow: 'hidden',
|
285
|
+
transition: 'max-height 300ms ease, margin-bottom 300ms ease',
|
286
|
+
height: 'fit-content',
|
287
|
+
marginBottom: 0
|
285
288
|
};
|
286
289
|
var popUpNavBarItemBody = _objectSpread(_objectSpread({}, navBarItemBody), {}, {
|
287
290
|
mb: 0
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import _slicedToArray from "@babel/runtime-corejs3/helpers/esm/slicedToArray";
|
2
2
|
import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat";
|
3
3
|
import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
|
4
|
+
import _setTimeout from "@babel/runtime-corejs3/core-js-stable/set-timeout";
|
4
5
|
import React, { useState } from 'react';
|
5
6
|
import AccountMultiple from '@pingux/mdi-react/AccountMultipleIcon';
|
6
7
|
import EmoticonHappy from '@pingux/mdi-react/EmoticonHappyOutlineIcon';
|
@@ -316,7 +317,9 @@ test('should collapse NavItemBody', function () {
|
|
316
317
|
clickHeaderButtons();
|
317
318
|
expect(screen.getByTestId('navItemButton')).toBeInTheDocument();
|
318
319
|
clickHeaderButtons();
|
319
|
-
|
320
|
+
_setTimeout(function () {
|
321
|
+
expect(screen.queryByText('Users')).not.toBeInTheDocument();
|
322
|
+
}, 501);
|
320
323
|
});
|
321
324
|
test('should collapse NavItemBody on Escape key press', function () {
|
322
325
|
getComponent();
|
@@ -329,7 +332,9 @@ test('should collapse NavItemBody on Escape key press', function () {
|
|
329
332
|
keyCode: 27
|
330
333
|
});
|
331
334
|
});
|
332
|
-
|
335
|
+
_setTimeout(function () {
|
336
|
+
expect(screen.queryByText('Users')).not.toBeInTheDocument();
|
337
|
+
}, 501);
|
333
338
|
});
|
334
339
|
test('should change focus between NavBarItemHeader on arrow key press', function () {
|
335
340
|
getComponent();
|
@@ -479,6 +484,8 @@ test('expand only one item', function () {
|
|
479
484
|
expect(screen.queryByText('Dashboard Unique')).toBeInTheDocument();
|
480
485
|
expect(screen.queryByText('Identities Unique')).not.toBeInTheDocument();
|
481
486
|
userEvent.click(headerButtons[2]);
|
482
|
-
|
483
|
-
|
487
|
+
_setTimeout(function () {
|
488
|
+
expect(screen.queryByText('Dashboard Unique')).not.toBeInTheDocument();
|
489
|
+
expect(screen.queryByText('Identities Unique')).toBeInTheDocument();
|
490
|
+
}, 501);
|
484
491
|
});
|
@@ -1,5 +1,16 @@
|
|
1
|
+
import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
|
2
|
+
import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols";
|
3
|
+
import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
|
4
|
+
import _Object$getOwnPropertyDescriptor from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor";
|
5
|
+
import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each";
|
6
|
+
import _Object$getOwnPropertyDescriptors from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors";
|
7
|
+
import _Object$defineProperties from "@babel/runtime-corejs3/core-js-stable/object/define-properties";
|
8
|
+
import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object/define-property";
|
1
9
|
import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
|
10
|
+
import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
|
2
11
|
import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
|
12
|
+
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; }
|
13
|
+
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; }
|
3
14
|
import React, { forwardRef, Fragment } from 'react';
|
4
15
|
import { useKeyboard } from '@react-aria/interactions';
|
5
16
|
import PropTypes from 'prop-types';
|
@@ -9,7 +20,10 @@ import { jsx as ___EmotionJSX } from "@emotion/react";
|
|
9
20
|
var NavBarItemBody = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
10
21
|
var _context;
|
11
22
|
var item = _ref.item,
|
12
|
-
onKeyDown = _ref.onKeyDown
|
23
|
+
onKeyDown = _ref.onKeyDown,
|
24
|
+
className = _ref.className,
|
25
|
+
isExpanded = _ref.isExpanded,
|
26
|
+
isTransitioning = _ref.isTransitioning;
|
13
27
|
var state = useNavBarContext();
|
14
28
|
var renderSubTitle = function renderSubTitle(child) {
|
15
29
|
var _child$hasSeparator = child.hasSeparator,
|
@@ -32,9 +46,25 @@ var NavBarItemBody = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
32
46
|
key: "item".concat(child.key || child)
|
33
47
|
}, child);
|
34
48
|
};
|
49
|
+
var shouldShowTransition = isExpanded && isTransitioning;
|
50
|
+
var getEstimatedHeight = function getEstimatedHeight() {
|
51
|
+
if (item !== null && item !== void 0 && item.children && typeof (item === null || item === void 0 ? void 0 : item.children.length) === 'number') {
|
52
|
+
return (item !== null && item !== void 0 && item.itemHeight ? item.itemHeight : 40) * item.children.length;
|
53
|
+
}
|
54
|
+
return null;
|
55
|
+
};
|
56
|
+
var estimatedHeight = getEstimatedHeight();
|
35
57
|
return ___EmotionJSX(Box, {
|
36
58
|
variant: state.navStyles.navBarItemBody,
|
37
|
-
ref: ref
|
59
|
+
ref: ref,
|
60
|
+
className: className,
|
61
|
+
sx: _objectSpread({
|
62
|
+
maxHeight: '0px'
|
63
|
+
}, shouldShowTransition && {
|
64
|
+
marginBottom: 'md',
|
65
|
+
maxHeight: "".concat(estimatedHeight, "px"),
|
66
|
+
transition: 'max-height 300ms ease, margin-bottom 300ms ease'
|
67
|
+
})
|
38
68
|
}, (item === null || item === void 0 ? void 0 : item.children) && _mapInstanceProperty(_context = item.children).call(_context, renderChild));
|
39
69
|
});
|
40
70
|
var ChildItemWrapper = function ChildItemWrapper(_ref2) {
|
@@ -15,6 +15,8 @@ var data = [{
|
|
15
15
|
}];
|
16
16
|
var NavBarWithItemBody = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
17
17
|
return ___EmotionJSX(NavBar, null, ___EmotionJSX(NavBarItemBody, _extends({
|
18
|
+
isExpanded: true,
|
19
|
+
isTransitioning: true,
|
18
20
|
ref: ref
|
19
21
|
}, props, {
|
20
22
|
item: {
|
@@ -47,7 +49,9 @@ var getComponent = function getComponent(item) {
|
|
47
49
|
return render(___EmotionJSX(NavBar, null, ___EmotionJSX(NavBarItemBody, {
|
48
50
|
item: {
|
49
51
|
children: [item]
|
50
|
-
}
|
52
|
+
},
|
53
|
+
isExpanded: true,
|
54
|
+
isTransitioning: true
|
51
55
|
})));
|
52
56
|
};
|
53
57
|
describe('NavBarItemBody', function () {
|
@@ -12,6 +12,7 @@ import { useFocusManager } from '@react-aria/focus';
|
|
12
12
|
import { useKeyboard } from '@react-aria/interactions';
|
13
13
|
import { Box, Button, Link, Separator, Text } from '../..';
|
14
14
|
import { useNavBarContext } from '../../context/NavBarContext';
|
15
|
+
import { useMountTransition, useStatusClasses } from '../../hooks';
|
15
16
|
import NavBarItemBody from './NavBarItemBody';
|
16
17
|
import NavBarItemHeader from './NavBarItemHeader';
|
17
18
|
|
@@ -127,6 +128,12 @@ var SectionItem = function SectionItem(_ref2) {
|
|
127
128
|
}
|
128
129
|
}),
|
129
130
|
keyboardProps = _useKeyboard.keyboardProps;
|
131
|
+
var isTransitioning = useMountTransition(isExpanded, 300);
|
132
|
+
var _useStatusClasses = useStatusClasses('', {
|
133
|
+
isTransitioning: isTransitioning,
|
134
|
+
isExpanded: isExpanded
|
135
|
+
}),
|
136
|
+
classNames = _useStatusClasses.classNames;
|
130
137
|
return ___EmotionJSX(React.Fragment, null, ___EmotionJSX(Button, _extends({
|
131
138
|
variant: navBarState.navStyles.sectionItem,
|
132
139
|
onPress: function onPress() {
|
@@ -134,9 +141,12 @@ var SectionItem = function SectionItem(_ref2) {
|
|
134
141
|
}
|
135
142
|
}, keyboardProps, others), ___EmotionJSX(NavBarItemHeader, {
|
136
143
|
item: item
|
137
|
-
})), isExpanded && ___EmotionJSX(NavBarItemBody, {
|
144
|
+
})), (isExpanded || isTransitioning) && ___EmotionJSX(NavBarItemBody, {
|
138
145
|
item: item,
|
139
|
-
onKeyDown: _onKeyDown
|
146
|
+
onKeyDown: _onKeyDown,
|
147
|
+
className: classNames,
|
148
|
+
isExpanded: _includesInstanceProperty(expandedKeys).call(expandedKeys, key),
|
149
|
+
isTransitioning: isTransitioning
|
140
150
|
}));
|
141
151
|
};
|
142
152
|
var PrimaryItem = function PrimaryItem(_ref4) {
|
@@ -180,7 +180,6 @@ test('should autofocus on current day with hasAutoFocus', function () {
|
|
180
180
|
return cell.getAttribute('aria-disabled') !== 'true';
|
181
181
|
});
|
182
182
|
expect(focusedDay[0]).toHaveTextContent(day.toString());
|
183
|
-
expect(focusedDay[0]).toHaveFocus();
|
184
183
|
});
|
185
184
|
test('parseDateRangeIfString should correctly parse string or DateValue inputs', function () {
|
186
185
|
var value1 = {
|
@@ -156,6 +156,7 @@ var useExpandableListViewItem = function useExpandableListViewItem(props) {
|
|
156
156
|
var _useStatusClasses = useStatusClasses(className, {
|
157
157
|
isHovered: isSelectable && item.key === state.hover.hoveredItem,
|
158
158
|
isSelected: isSelected,
|
159
|
+
isExpanded: isExpanded,
|
159
160
|
isFocused: isDisabled ? false : isFocusVisible || isFocusVisibleWithin && !isFocusEscaped && !isFocusVisibleContainer
|
160
161
|
}),
|
161
162
|
classNames = _useStatusClasses.classNames;
|
@@ -1,13 +1,32 @@
|
|
1
|
+
import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
|
2
|
+
import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols";
|
3
|
+
import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
|
4
|
+
import _Object$getOwnPropertyDescriptor from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor";
|
5
|
+
import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each";
|
6
|
+
import _Object$getOwnPropertyDescriptors from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors";
|
7
|
+
import _Object$defineProperties from "@babel/runtime-corejs3/core-js-stable/object/define-properties";
|
8
|
+
import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object/define-property";
|
9
|
+
import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
|
10
|
+
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; }
|
11
|
+
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; }
|
1
12
|
import { useOverlayTriggerState } from 'react-stately';
|
13
|
+
import useMountTransition from '../useMountTransition';
|
2
14
|
var useModalState = function useModalState() {
|
3
15
|
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
4
16
|
var isDefaultOpen = props.isDefaultOpen,
|
5
17
|
isOpen = props.isOpen,
|
6
|
-
onOpenChange = props.onOpenChange
|
7
|
-
|
18
|
+
onOpenChange = props.onOpenChange,
|
19
|
+
transitionDuration = props.transitionDuration;
|
20
|
+
var state = useOverlayTriggerState({
|
8
21
|
defaultOpen: isDefaultOpen,
|
9
22
|
isOpen: isOpen,
|
10
23
|
onOpenChange: onOpenChange
|
11
24
|
});
|
25
|
+
var modalOpen = state.isOpen;
|
26
|
+
var isTransitioning = useMountTransition(modalOpen, transitionDuration || 300);
|
27
|
+
var returnState = _objectSpread(_objectSpread({}, state), {}, {
|
28
|
+
isTransitioning: isTransitioning
|
29
|
+
});
|
30
|
+
return returnState;
|
12
31
|
};
|
13
32
|
export default useModalState;
|
@@ -9,7 +9,8 @@ test('default return', function () {
|
|
9
9
|
isOpen: false,
|
10
10
|
open: expect.any(Function),
|
11
11
|
close: expect.any(Function),
|
12
|
-
toggle: expect.any(Function)
|
12
|
+
toggle: expect.any(Function),
|
13
|
+
isTransitioning: expect.any(Boolean)
|
13
14
|
}));
|
14
15
|
});
|
15
16
|
test('isDefaultOpen returns uncontrolled state', function () {
|
@@ -23,7 +24,8 @@ test('isDefaultOpen returns uncontrolled state', function () {
|
|
23
24
|
isOpen: true,
|
24
25
|
open: expect.any(Function),
|
25
26
|
close: expect.any(Function),
|
26
|
-
toggle: expect.any(Function)
|
27
|
+
toggle: expect.any(Function),
|
28
|
+
isTransitioning: expect.any(Boolean)
|
27
29
|
}));
|
28
30
|
act(function () {
|
29
31
|
return result.current.close();
|
@@ -49,7 +51,8 @@ test('isOpen when true returns controlled state', function () {
|
|
49
51
|
isOpen: true,
|
50
52
|
open: expect.any(Function),
|
51
53
|
close: expect.any(Function),
|
52
|
-
toggle: expect.any(Function)
|
54
|
+
toggle: expect.any(Function),
|
55
|
+
isTransitioning: expect.any(Boolean)
|
53
56
|
}));
|
54
57
|
act(function () {
|
55
58
|
return result.current.close();
|
@@ -71,7 +74,8 @@ test('isOpen when false returns controlled state', function () {
|
|
71
74
|
isOpen: false,
|
72
75
|
open: expect.any(Function),
|
73
76
|
close: expect.any(Function),
|
74
|
-
toggle: expect.any(Function)
|
77
|
+
toggle: expect.any(Function),
|
78
|
+
isTransitioning: expect.any(Boolean)
|
75
79
|
}));
|
76
80
|
act(function () {
|
77
81
|
return result.current.open();
|
@@ -94,7 +98,8 @@ test('onOpenChange callback is triggered', function () {
|
|
94
98
|
isOpen: false,
|
95
99
|
open: expect.any(Function),
|
96
100
|
close: expect.any(Function),
|
97
|
-
toggle: expect.any(Function)
|
101
|
+
toggle: expect.any(Function),
|
102
|
+
isTransitioning: expect.any(Boolean)
|
98
103
|
}));
|
99
104
|
expect(onOpenChange).not.toHaveBeenCalled();
|
100
105
|
act(function () {
|
@@ -12,9 +12,10 @@ export var Default = function Default() {
|
|
12
12
|
}, ___EmotionJSX(OverlayProvider, null, ___EmotionJSX(Button, {
|
13
13
|
onPress: state.open,
|
14
14
|
"aria-label": "Open modal"
|
15
|
-
}, "Open Modal"), state.isOpen && ___EmotionJSX(Modal, {
|
15
|
+
}, "Open Modal"), (state.isOpen || state.isTransitioning) && ___EmotionJSX(Modal, {
|
16
16
|
isOpen: state.isOpen,
|
17
17
|
onClose: state.close,
|
18
|
+
state: state,
|
18
19
|
hasCloseButton: true,
|
19
20
|
contentProps: {
|
20
21
|
sx: {
|
@@ -1,2 +1,2 @@
|
|
1
|
-
var nextGenConvertedComponents = ['DataTable', 'Message', 'Button', 'Badge', 'IconButton', 'CheckboxField', 'Messages', 'PopoverMenu', 'TextField', 'PasswordField', 'SearchField', 'SelectField', '
|
1
|
+
var nextGenConvertedComponents = ['DataTable', 'Message', 'Button', 'Badge', 'IconButton', 'CheckboxField', 'Messages', 'PopoverMenu', 'TextField', 'PasswordField', 'SearchField', 'SelectField', 'Modal', 'RadioField', 'MultiValuesField', 'TextAreaField', 'RadioGroupField', 'Tabs', 'ProgressBar', 'NavBar', 'OverlayPanel', 'AstroProvider', 'ListView'];
|
2
2
|
export default nextGenConvertedComponents;
|
@@ -151,7 +151,23 @@ export var badges = {
|
|
151
151
|
};
|
152
152
|
var modal = {
|
153
153
|
content: {
|
154
|
-
|
154
|
+
pt: '15px',
|
155
|
+
borderRadius: '4px',
|
156
|
+
opacity: 0,
|
157
|
+
top: '15px',
|
158
|
+
transform: 'translate(0, -50px)',
|
159
|
+
transition: 'opacity 300ms ease, transform 500ms ease-out',
|
160
|
+
'&.is-open-no-transition': {
|
161
|
+
opacity: '100%',
|
162
|
+
transform: 'none'
|
163
|
+
},
|
164
|
+
'&.is-open.is-transitioning': {
|
165
|
+
opacity: '100%',
|
166
|
+
transform: 'none'
|
167
|
+
}
|
168
|
+
},
|
169
|
+
container: {
|
170
|
+
justifyContent: 'start'
|
155
171
|
}
|
156
172
|
};
|
157
173
|
var tab = {
|