@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.
Files changed (35) hide show
  1. package/lib/cjs/components/Modal/Modal.js +12 -4
  2. package/lib/cjs/components/Modal/tests/Modal.integration.test.js +27 -0
  3. package/lib/cjs/components/NavBar/NavBar.styles.d.ts +8 -1
  4. package/lib/cjs/components/NavBar/NavBar.styles.js +4 -1
  5. package/lib/cjs/components/NavBar/NavBar.test.js +11 -4
  6. package/lib/cjs/components/NavBarSection/NavBarItemBody.js +33 -5
  7. package/lib/cjs/components/NavBarSection/NavBarItemBody.test.js +5 -1
  8. package/lib/cjs/components/NavBarSection/NavBarSection.js +12 -2
  9. package/lib/cjs/components/RangeCalendar/RangeCalendar.test.js +0 -1
  10. package/lib/cjs/hooks/useExpandableListViewItem/useExpandableListViewItem.js +1 -0
  11. package/lib/cjs/hooks/useModalState/useModalState.d.ts +5 -1
  12. package/lib/cjs/hooks/useModalState/useModalState.js +21 -2
  13. package/lib/cjs/hooks/useModalState/useModalState.test.js +10 -5
  14. package/lib/cjs/recipes/NextGen/ModalNextGen.stories.js +2 -1
  15. package/lib/cjs/styles/themes/next-gen/convertedComponentList.js +1 -1
  16. package/lib/cjs/styles/themes/next-gen/next-gen.d.ts +16 -0
  17. package/lib/cjs/styles/themes/next-gen/variants/variants.d.ts +16 -0
  18. package/lib/cjs/styles/themes/next-gen/variants/variants.js +17 -1
  19. package/lib/cjs/types/Modal.d.ts +2 -0
  20. package/lib/cjs/types/navBar.d.ts +4 -0
  21. package/lib/components/Modal/Modal.js +12 -4
  22. package/lib/components/Modal/tests/Modal.integration.test.js +27 -0
  23. package/lib/components/NavBar/NavBar.styles.js +4 -1
  24. package/lib/components/NavBar/NavBar.test.js +11 -4
  25. package/lib/components/NavBarSection/NavBarItemBody.js +32 -2
  26. package/lib/components/NavBarSection/NavBarItemBody.test.js +5 -1
  27. package/lib/components/NavBarSection/NavBarSection.js +12 -2
  28. package/lib/components/RangeCalendar/RangeCalendar.test.js +0 -1
  29. package/lib/hooks/useExpandableListViewItem/useExpandableListViewItem.js +1 -0
  30. package/lib/hooks/useModalState/useModalState.js +21 -2
  31. package/lib/hooks/useModalState/useModalState.test.js +10 -5
  32. package/lib/recipes/NextGen/ModalNextGen.stories.js +2 -1
  33. package/lib/styles/themes/next-gen/convertedComponentList.js +1 -1
  34. package/lib/styles/themes/next-gen/variants/variants.js +17 -1
  35. 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
- isOpen: isOpen,
69
- close: onClose
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
- var _useStatusClasses = (0, _hooks.useStatusClasses)(className, (0, _defineProperty2["default"])({}, "is-".concat(size || 'custom'), size)),
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
- mb: string;
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
- mb: 'md'
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
- expect(_testWrapper.screen.queryByText('Users')).not.toBeInTheDocument();
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
- expect(_testWrapper.screen.queryByText('Users')).not.toBeInTheDocument();
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
- expect(_testWrapper.screen.queryByText('Dashboard Unique')).not.toBeInTheDocument();
492
- expect(_testWrapper.screen.queryByText('Identities Unique')).toBeInTheDocument();
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 _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map");
5
- var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
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): OverlayTriggerState;
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
- return (0, _reactStately.useOverlayTriggerState)({
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', 'ComboBoxField', 'MultiValuesField', 'TextAreaField', 'RadioGroupField', 'Tabs', 'ProgressBar', 'NavBar', 'OverlayPanel', 'AstroProvider', 'ListView'];
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
- borderRadius: '4px'
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 = {
@@ -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
- isOpen: isOpen,
58
- close: onClose
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
- var _useStatusClasses = useStatusClasses(className, _defineProperty({}, "is-".concat(size || 'custom'), size)),
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
- mb: 'md'
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
- expect(screen.queryByText('Users')).not.toBeInTheDocument();
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
- expect(screen.queryByText('Users')).not.toBeInTheDocument();
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
- expect(screen.queryByText('Dashboard Unique')).not.toBeInTheDocument();
483
- expect(screen.queryByText('Identities Unique')).toBeInTheDocument();
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
- return useOverlayTriggerState({
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', 'ComboBoxField', 'MultiValuesField', 'TextAreaField', 'RadioGroupField', 'Tabs', 'ProgressBar', 'NavBar', 'OverlayPanel', 'AstroProvider', 'ListView'];
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
- borderRadius: '4px'
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 = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pingux/astro",
3
- "version": "2.77.0-alpha.0",
3
+ "version": "2.78.0-alpha.0",
4
4
  "description": "React component library for Ping Identity's design system",
5
5
  "repository": {
6
6
  "type": "git",