@pingux/astro 2.147.1-alpha.1 → 2.148.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/lib/cjs/components/Badge/Badge.styles.d.ts +5 -1
  2. package/lib/cjs/components/Badge/Badge.styles.js +6 -2
  3. package/lib/cjs/components/IconButton/IconButton.styles.d.ts +38 -0
  4. package/lib/cjs/components/IconButton/IconButton.styles.js +8 -7
  5. package/lib/cjs/components/ListBox/Option.js +7 -3
  6. package/lib/cjs/components/Modal/Convenience/ModalBody.stories.d.ts +7 -0
  7. package/lib/cjs/components/Modal/Convenience/ModalBody.stories.js +30 -0
  8. package/lib/cjs/components/Modal/Convenience/ModalFooter.stories.d.ts +5 -0
  9. package/lib/cjs/components/Modal/Convenience/ModalFooter.stories.js +35 -0
  10. package/lib/cjs/components/Modal/Convenience/ModalHeader.stories.d.ts +5 -0
  11. package/lib/cjs/components/Modal/Convenience/ModalHeader.stories.js +36 -0
  12. package/lib/cjs/components/Modal/Modal.js +13 -4
  13. package/lib/cjs/components/Modal/Modal.stories.d.ts +1 -0
  14. package/lib/cjs/components/Modal/Modal.stories.js +57 -47
  15. package/lib/cjs/components/Modal/Modal.styles.d.ts +43 -26
  16. package/lib/cjs/components/Modal/Modal.styles.js +41 -28
  17. package/lib/cjs/components/Modal/ModalBody.d.ts +9 -0
  18. package/lib/cjs/components/Modal/ModalBody.js +34 -0
  19. package/lib/cjs/components/Modal/ModalBody.test.d.ts +1 -0
  20. package/lib/cjs/components/Modal/ModalBody.test.js +64 -0
  21. package/lib/cjs/components/Modal/ModalFooter.d.ts +4 -0
  22. package/lib/cjs/components/Modal/ModalFooter.js +48 -0
  23. package/lib/cjs/components/Modal/ModalFooter.test.d.ts +1 -0
  24. package/lib/cjs/components/Modal/ModalFooter.test.js +98 -0
  25. package/lib/cjs/components/Modal/ModalHeader.d.ts +4 -0
  26. package/lib/cjs/components/Modal/ModalHeader.js +61 -0
  27. package/lib/cjs/components/Modal/ModalHeader.test.d.ts +1 -0
  28. package/lib/cjs/components/Modal/ModalHeader.test.js +96 -0
  29. package/lib/cjs/components/Modal/index.d.ts +3 -0
  30. package/lib/cjs/components/Modal/index.js +22 -1
  31. package/lib/cjs/components/Modal/tests/Modal.integration.test.js +4 -0
  32. package/lib/cjs/components/Modal/tests/Modal.unit.test.js +4 -0
  33. package/lib/cjs/components/MultivaluesField/DefaultMultivaluesField.js +0 -1
  34. package/lib/cjs/components/MultivaluesField/MultivaluesField.stories.js +8 -103
  35. package/lib/cjs/index.d.ts +1 -1
  36. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/variants/buttons.d.ts +55 -0
  37. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/variants/buttons.js +14 -2
  38. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/variants/variants.d.ts +24 -1
  39. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/variants/variants.js +25 -2
  40. package/lib/cjs/styles/themes/next-gen/convertedComponentList.d.ts +0 -1
  41. package/lib/cjs/styles/themes/next-gen/convertedComponentList.js +0 -1
  42. package/lib/cjs/styles/themes/next-gen/next-gen.d.ts +62 -23
  43. package/lib/cjs/styles/themes/next-gen/variants/badges.d.ts +3 -5
  44. package/lib/cjs/styles/themes/next-gen/variants/badges.js +5 -2
  45. package/lib/cjs/styles/themes/next-gen/variants/button.d.ts +32 -6
  46. package/lib/cjs/styles/themes/next-gen/variants/button.js +6 -5
  47. package/lib/cjs/styles/themes/next-gen/variants/variants.d.ts +27 -12
  48. package/lib/cjs/styles/themes/next-gen/variants/variants.js +28 -13
  49. package/lib/cjs/types/Modal.d.ts +19 -0
  50. package/lib/components/Badge/Badge.styles.js +6 -2
  51. package/lib/components/IconButton/IconButton.styles.js +9 -8
  52. package/lib/components/ListBox/Option.js +7 -3
  53. package/lib/components/Modal/Convenience/ModalBody.stories.js +20 -0
  54. package/lib/components/Modal/Convenience/ModalFooter.stories.js +25 -0
  55. package/lib/components/Modal/Convenience/ModalHeader.stories.js +26 -0
  56. package/lib/components/Modal/Modal.js +13 -4
  57. package/lib/components/Modal/Modal.stories.js +57 -48
  58. package/lib/components/Modal/Modal.styles.js +39 -27
  59. package/lib/components/Modal/ModalBody.js +20 -0
  60. package/lib/components/Modal/ModalBody.test.js +61 -0
  61. package/lib/components/Modal/ModalFooter.js +34 -0
  62. package/lib/components/Modal/ModalFooter.test.js +95 -0
  63. package/lib/components/Modal/ModalHeader.js +47 -0
  64. package/lib/components/Modal/ModalHeader.test.js +93 -0
  65. package/lib/components/Modal/index.js +4 -1
  66. package/lib/components/Modal/tests/Modal.integration.test.js +4 -0
  67. package/lib/components/Modal/tests/Modal.unit.test.js +4 -0
  68. package/lib/components/MultivaluesField/DefaultMultivaluesField.js +0 -1
  69. package/lib/components/MultivaluesField/MultivaluesField.stories.js +8 -103
  70. package/lib/styles/themeOverrides/nextGenDarkMode/variants/buttons.js +14 -2
  71. package/lib/styles/themeOverrides/nextGenDarkMode/variants/variants.js +25 -2
  72. package/lib/styles/themes/next-gen/convertedComponentList.js +0 -1
  73. package/lib/styles/themes/next-gen/variants/badges.js +5 -2
  74. package/lib/styles/themes/next-gen/variants/button.js +6 -5
  75. package/lib/styles/themes/next-gen/variants/variants.js +28 -13
  76. package/package.json +1 -1
@@ -23,22 +23,15 @@ var container = {
23
23
  background: '#00000040',
24
24
  display: 'flex',
25
25
  alignItems: 'center',
26
- justifyContent: 'center'
26
+ overflowY: 'auto'
27
27
  };
28
28
  var content = {
29
- position: 'relative',
30
29
  outline: 'none',
31
30
  background: 'white',
32
31
  color: 'black',
33
- pt: 'md',
34
- pr: 'lg',
35
- pb: 'lg',
36
- pl: 'lg',
37
32
  boxShadow: 'standard',
38
33
  borderRadius: 3,
39
- maxHeight: 'calc(100vh - 80px)',
40
- // 100% of the window minus 40px on top and bottom
41
- overflowY: 'auto',
34
+ margin: 'auto',
42
35
  '&.is-extra-small': {
43
36
  maxWidth: 'none',
44
37
  width: 'container.xs'
@@ -61,28 +54,41 @@ var content = {
61
54
  }
62
55
  };
63
56
  var headingContainer = {
64
- position: 'sticky',
65
- top: '-md',
66
- mt: '-md',
67
- mb: '-md',
68
- mr: '-lg',
69
- pt: 'md',
70
- pr: 'lg',
71
- pb: 'md',
72
- backgroundColor: 'background.base'
57
+ position: 'relative',
58
+ backgroundColor: 'background.base',
59
+ px: 'lg',
60
+ py: 'md'
73
61
  };
74
- var buttonsContainer = {
75
- position: 'sticky',
76
- bottom: '-lg',
77
- p: 0,
78
- mb: '-lg',
79
- pb: 'lg',
80
- pt: 'lg',
62
+ var header = {
63
+ position: 'relative',
64
+ backgroundColor: 'background.base',
65
+ pb: 'md'
66
+ };
67
+ var body = {};
68
+ export var closeButton = {
69
+ position: 'absolute',
70
+ top: 0,
71
+ right: -14,
72
+ alignSelf: 'auto',
73
+ width: '22px',
74
+ height: '22px'
75
+ };
76
+ var bodyContainer = {
77
+ px: 'lg'
78
+ };
79
+ var footer = {
80
+ py: 'lg',
81
81
  background: 'white',
82
82
  '& > button': {
83
83
  flexGrow: 0
84
84
  }
85
85
  };
86
+ var buttonsContainer = {
87
+ p: 0,
88
+ pb: 'lg',
89
+ pt: 'lg',
90
+ background: 'white'
91
+ };
86
92
  var title = _objectSpread(_objectSpread({}, text.title), {}, {
87
93
  mr: 'sm',
88
94
  fontWeight: 3
@@ -91,6 +97,7 @@ export var modalCloseButton = {
91
97
  position: 'absolute',
92
98
  top: 14,
93
99
  right: 10,
100
+ alignSelf: 'auto',
94
101
  width: '22px',
95
102
  height: '22px'
96
103
  };
@@ -99,7 +106,12 @@ export default {
99
106
  container: container,
100
107
  content: content,
101
108
  headingContainer: headingContainer,
102
- buttonsContainer: buttonsContainer,
109
+ bodyContainer: bodyContainer,
103
110
  title: title,
104
- modalCloseButton: modalCloseButton
111
+ modalCloseButton: modalCloseButton,
112
+ buttonsContainer: buttonsContainer,
113
+ header: header,
114
+ body: body,
115
+ footer: footer,
116
+ closeButton: closeButton
105
117
  };
@@ -0,0 +1,20 @@
1
+ import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
2
+ import React, { forwardRef } from 'react';
3
+ import Box from '../Box';
4
+ import { jsx as ___EmotionJSX } from "@emotion/react";
5
+ var ModalBody = /*#__PURE__*/forwardRef(function (props, ref) {
6
+ var children = props.children,
7
+ isScrollable = props.isScrollable,
8
+ _props$scrollProps = props.scrollProps,
9
+ scrollProps = _props$scrollProps === void 0 ? {} : _props$scrollProps,
10
+ containerProps = props.containerProps;
11
+ return ___EmotionJSX(Box, _extends({
12
+ variant: "modal.body",
13
+ ref: ref
14
+ }, containerProps), isScrollable ? ___EmotionJSX(Box, _extends({
15
+ width: "calc(100% + 24px)",
16
+ overflowY: "auto"
17
+ }, scrollProps), children) : children);
18
+ });
19
+ ModalBody.displayName = 'ModalBody';
20
+ export default ModalBody;
@@ -0,0 +1,61 @@
1
+ import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
2
+ import React from 'react';
3
+ import { render, screen } from '../../utils/testUtils/testWrapper';
4
+ import { universalComponentTests } from '../../utils/testUtils/universalComponentTest';
5
+ import ModalBody from './ModalBody';
6
+ import { jsx as ___EmotionJSX } from "@emotion/react";
7
+ var defaultProps = {
8
+ children: ''
9
+ };
10
+ var testId = 'scrollBoxTestId';
11
+ var scrollProps = {
12
+ 'data-testid': testId,
13
+ 'maxHeight': '100px'
14
+ };
15
+ var getComponent = function getComponent() {
16
+ var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
17
+ return render(___EmotionJSX(ModalBody, _extends({}, defaultProps, props)));
18
+ };
19
+ // Needs to be added to each components test file
20
+ universalComponentTests({
21
+ renderComponent: function renderComponent(props) {
22
+ return ___EmotionJSX(ModalBody, props);
23
+ }
24
+ });
25
+ describe('ModalBody', function () {
26
+ test('rendered', function () {
27
+ getComponent({
28
+ children: 'Lorem Ipsum'
29
+ });
30
+ screen.getByText(/lorem ipsum/i);
31
+ });
32
+ test('children as React node', function () {
33
+ var ChildrenNode = function ChildrenNode() {
34
+ return ___EmotionJSX("div", {
35
+ "data-testid": "custom-node"
36
+ }, "Custom Node");
37
+ };
38
+ getComponent({
39
+ children: ___EmotionJSX(ChildrenNode, null)
40
+ });
41
+ screen.getByTestId('custom-node');
42
+ screen.getByText(/custom node/i);
43
+ });
44
+ test('isScrollable adds ScrollBox wrapper', function () {
45
+ var ChildrenNode = function ChildrenNode() {
46
+ return ___EmotionJSX("div", {
47
+ "data-testid": "custom-node"
48
+ }, "Custom Node");
49
+ };
50
+ getComponent({
51
+ scrollProps: scrollProps,
52
+ isScrollable: true,
53
+ children: ___EmotionJSX(ChildrenNode, null)
54
+ });
55
+ var scrollBoxComponent = screen.getByTestId(testId);
56
+ expect(scrollBoxComponent).toBeInTheDocument();
57
+ expect(scrollBoxComponent).toHaveStyle({
58
+ maxHeight: '100px'
59
+ });
60
+ });
61
+ });
@@ -0,0 +1,34 @@
1
+ import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
2
+ import React, { forwardRef } from 'react';
3
+ import Button from '../Button';
4
+ import ButtonBar from '../ButtonBar';
5
+ import { jsx as ___EmotionJSX } from "@emotion/react";
6
+ var ModalFooter = /*#__PURE__*/forwardRef(function (props, ref) {
7
+ var onSubmit = props.onSubmit,
8
+ onCancel = props.onCancel,
9
+ footerProps = props.footerProps,
10
+ children = props.children,
11
+ _props$primaryButtonT = props.primaryButtonText,
12
+ primaryButtonText = _props$primaryButtonT === void 0 ? 'Save' : _props$primaryButtonT,
13
+ _props$secondaryButto = props.secondaryButtonText,
14
+ secondaryButtonText = _props$secondaryButto === void 0 ? 'Cancel' : _props$secondaryButto;
15
+
16
+ // eslint-disable-next-line react/jsx-no-useless-fragment
17
+ if (children) return ___EmotionJSX(React.Fragment, null, children);
18
+ return ___EmotionJSX(ButtonBar, _extends({
19
+ variant: "modal.footer",
20
+ as: "footer",
21
+ ref: ref
22
+ }, footerProps), ___EmotionJSX(Button, {
23
+ variant: "primary",
24
+ onPress: onSubmit,
25
+ mr: "md",
26
+ "aria-label": primaryButtonText
27
+ }, primaryButtonText), ___EmotionJSX(Button, {
28
+ variant: "link",
29
+ onPress: onCancel,
30
+ "aria-label": secondaryButtonText
31
+ }, secondaryButtonText));
32
+ });
33
+ ModalFooter.displayName = 'ModalFooter';
34
+ export default ModalFooter;
@@ -0,0 +1,95 @@
1
+ import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object/define-property";
2
+ import _Symbol from "@babel/runtime-corejs3/core-js-stable/symbol";
3
+ import _Object$create from "@babel/runtime-corejs3/core-js-stable/object/create";
4
+ import _Object$getPrototypeOf from "@babel/runtime-corejs3/core-js-stable/object/get-prototype-of";
5
+ import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each";
6
+ import _Object$setPrototypeOf from "@babel/runtime-corejs3/core-js-stable/object/set-prototype-of";
7
+ import _Promise from "@babel/runtime-corejs3/core-js-stable/promise";
8
+ import _reverseInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/reverse";
9
+ import _sliceInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/slice";
10
+ import _typeof from "@babel/runtime-corejs3/helpers/esm/typeof";
11
+ import _asyncToGenerator from "@babel/runtime-corejs3/helpers/esm/asyncToGenerator";
12
+ import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
13
+ function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = _Object$defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof _Symbol ? _Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return _Object$defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = _Object$create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = _Object$getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = _Object$create(IteratorPrototype); function defineIteratorMethods(prototype) { var _context2; _forEachInstanceProperty(_context2 = ["next", "throw", "return"]).call(_context2, function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], _forEachInstanceProperty(tryLocsList).call(tryLocsList, pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return _Object$setPrototypeOf ? _Object$setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = _Object$create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = _Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) keys.push(key); return _reverseInstanceProperty(keys).call(keys), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { var _context3; if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, _forEachInstanceProperty(_context3 = this.tryEntries).call(_context3, resetTryEntry), !skipTempReset) for (var name in this) "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+_sliceInstanceProperty(name).call(name, 1)) && (this[name] = undefined); }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
14
+ import React from 'react';
15
+ import userEvent from '@testing-library/user-event';
16
+ import { render, screen } from '../../utils/testUtils/testWrapper';
17
+ import { universalComponentTests } from '../../utils/testUtils/universalComponentTest';
18
+ import ModalFooter from './ModalFooter';
19
+ import { jsx as ___EmotionJSX } from "@emotion/react";
20
+ var defaultProps = {
21
+ children: ''
22
+ };
23
+ var getComponent = function getComponent() {
24
+ var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
25
+ return render(___EmotionJSX(ModalFooter, _extends({}, defaultProps, props)));
26
+ };
27
+ // Needs to be added to each components test file
28
+ universalComponentTests({
29
+ renderComponent: function renderComponent(props) {
30
+ return ___EmotionJSX(ModalFooter, props);
31
+ }
32
+ });
33
+ describe('ModalFooter', function () {
34
+ test('rendered', function () {
35
+ getComponent({
36
+ children: 'ModalFooter'
37
+ });
38
+ screen.getByText(/modalfooter/i);
39
+ });
40
+ test('onSubmit and onCancel are called when buttons are clicked', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
41
+ var onSubmit, onCancel, saveButton, cancelButton;
42
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
43
+ while (1) switch (_context.prev = _context.next) {
44
+ case 0:
45
+ onSubmit = jest.fn();
46
+ onCancel = jest.fn();
47
+ getComponent({
48
+ onSubmit: onSubmit,
49
+ onCancel: onCancel
50
+ });
51
+ saveButton = screen.getByRole('button', {
52
+ name: /save/i
53
+ });
54
+ cancelButton = screen.getByRole('button', {
55
+ name: /cancel/i
56
+ });
57
+ _context.next = 7;
58
+ return userEvent.click(saveButton);
59
+ case 7:
60
+ _context.next = 9;
61
+ return userEvent.click(cancelButton);
62
+ case 9:
63
+ expect(onSubmit).toHaveBeenCalledTimes(1);
64
+ expect(onCancel).toHaveBeenCalledTimes(1);
65
+ case 11:
66
+ case "end":
67
+ return _context.stop();
68
+ }
69
+ }, _callee);
70
+ })));
71
+ test('does not render buttons when children are provided', function () {
72
+ getComponent({
73
+ children: ___EmotionJSX("div", null, "Custom Footer")
74
+ });
75
+ expect(screen.getByText(/custom footer/i)).toBeInTheDocument();
76
+ expect(screen.queryByRole('button', {
77
+ name: /save/i
78
+ })).not.toBeInTheDocument();
79
+ expect(screen.queryByRole('button', {
80
+ name: /cancel/i
81
+ })).not.toBeInTheDocument();
82
+ });
83
+ test('primaryButtonText and secondaryButtonText props change button text', function () {
84
+ getComponent({
85
+ primaryButtonText: 'Submit',
86
+ secondaryButtonText: 'Dismiss'
87
+ });
88
+ expect(screen.getByRole('button', {
89
+ name: /submit/i
90
+ })).toBeInTheDocument();
91
+ expect(screen.getByRole('button', {
92
+ name: /dismiss/i
93
+ })).toBeInTheDocument();
94
+ });
95
+ });
@@ -0,0 +1,47 @@
1
+ import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
2
+ import React, { forwardRef } from 'react';
3
+ import CloseIcon from '@pingux/mdi-react/CloseIcon';
4
+ import Box from '../Box';
5
+ import Icon from '../Icon';
6
+ import IconButton from '../IconButton';
7
+ import Text from '../Text';
8
+ import { jsx as ___EmotionJSX } from "@emotion/react";
9
+ var ModalHeader = /*#__PURE__*/forwardRef(function (props, ref) {
10
+ var closeButton = props.closeButton,
11
+ hasCloseButton = props.hasCloseButton,
12
+ title = props.title,
13
+ onClose = props.onClose,
14
+ containerProps = props.containerProps,
15
+ titleProps = props.titleProps,
16
+ hasNoSeparator = props.hasNoSeparator;
17
+ var titleContent = typeof title === 'string' && title ? ___EmotionJSX(Box, {
18
+ flex: "1"
19
+ }, ___EmotionJSX(Text, _extends({}, titleProps, {
20
+ variant: "modalTitle",
21
+ role: "heading",
22
+ "aria-level": 1
23
+ }), title)) : title;
24
+ return ___EmotionJSX(Box, _extends({
25
+ variant: "modal.header",
26
+ isRow: true,
27
+ justifyContent: "space-between",
28
+ alignItems: "center",
29
+ as: "header",
30
+ ref: ref,
31
+ sx: {
32
+ borderBottomWidth: hasNoSeparator ? '0px' : '1px'
33
+ }
34
+ }, containerProps), titleContent, hasCloseButton && (closeButton !== null && closeButton !== void 0 ? closeButton : ___EmotionJSX(IconButton, {
35
+ "aria-label": "Close modal window",
36
+ "data-id": "icon-button__close-modal-window",
37
+ variant: "modalHeaderCloseButton",
38
+ onPress: onClose
39
+ }, ___EmotionJSX(Icon, {
40
+ icon: CloseIcon,
41
+ title: {
42
+ name: 'Close Icon'
43
+ }
44
+ }))));
45
+ });
46
+ ModalHeader.displayName = 'ModalHeader';
47
+ export default ModalHeader;
@@ -0,0 +1,93 @@
1
+ import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
2
+ import React from 'react';
3
+ import userEvent from '@testing-library/user-event';
4
+ import { render, screen } from '../../utils/testUtils/testWrapper';
5
+ import { universalComponentTests } from '../../utils/testUtils/universalComponentTest';
6
+ import ModalHeader from './ModalHeader';
7
+ import { jsx as ___EmotionJSX } from "@emotion/react";
8
+ var defaultProps = {
9
+ hasCloseButton: true
10
+ };
11
+ var getComponent = function getComponent() {
12
+ var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
13
+ return render(___EmotionJSX(ModalHeader, _extends({}, defaultProps, props)));
14
+ };
15
+ // Needs to be added to each components test file
16
+ universalComponentTests({
17
+ renderComponent: function renderComponent(props) {
18
+ return ___EmotionJSX(ModalHeader, props);
19
+ }
20
+ });
21
+ describe('ModalHeader', function () {
22
+ test('rendered', function () {
23
+ getComponent({
24
+ title: 'Lorem Ipsum'
25
+ });
26
+ screen.getByRole('heading', {
27
+ name: /lorem ipsum/i
28
+ });
29
+ screen.getByRole('button', {
30
+ name: /close modal window/i
31
+ });
32
+ });
33
+ test('trigger on close', function () {
34
+ var mockOnClose = jest.fn();
35
+ getComponent({
36
+ title: 'Lorem Ipsum',
37
+ onClose: mockOnClose
38
+ });
39
+ var closeButton = screen.getByRole('button', {
40
+ name: /close modal window/i
41
+ });
42
+ userEvent.click(closeButton);
43
+ expect(mockOnClose).toHaveBeenCalled();
44
+ });
45
+ test('does not render close button', function () {
46
+ getComponent({
47
+ title: 'Lorem Ipsum',
48
+ hasCloseButton: false
49
+ });
50
+ screen.getByRole('heading', {
51
+ name: /lorem ipsum/i
52
+ });
53
+ var closeButton = screen.queryByRole('button', {
54
+ name: /close modal window/i
55
+ });
56
+ expect(closeButton).not.toBeInTheDocument();
57
+ });
58
+ test('custom close button', function () {
59
+ var CustomCloseButton = function CustomCloseButton() {
60
+ return ___EmotionJSX("button", {
61
+ type: "button"
62
+ }, "Custom Close");
63
+ };
64
+ getComponent({
65
+ title: 'Lorem Ipsum',
66
+ closeButton: ___EmotionJSX(CustomCloseButton, null)
67
+ });
68
+ screen.getByRole('heading', {
69
+ name: /lorem ipsum/i
70
+ });
71
+ screen.getByRole('button', {
72
+ name: /custom close/i
73
+ });
74
+ expect(screen.getByRole('button', {
75
+ name: /custom close/i
76
+ })).toBeInTheDocument();
77
+ expect(screen.getByRole('button', {
78
+ name: /custom close/i
79
+ })).toHaveAttribute('type', 'button');
80
+ });
81
+ test('title as React node', function () {
82
+ var TitleNode = function TitleNode() {
83
+ return ___EmotionJSX("div", {
84
+ "data-testid": "custom-node"
85
+ }, "Custom Node");
86
+ };
87
+ getComponent({
88
+ title: ___EmotionJSX(TitleNode, null)
89
+ });
90
+ screen.getByTestId('custom-node');
91
+ screen.getByText(/custom node/i);
92
+ });
93
+ });
@@ -1 +1,4 @@
1
- export { default } from './Modal';
1
+ export { default } from './Modal';
2
+ export { default as ModalBody } from './ModalBody';
3
+ export { default as ModalFooter } from './ModalFooter';
4
+ export { default as ModalHeader } from './ModalHeader';
@@ -78,6 +78,8 @@ test('keyboard interaction with the trigger should open the modal', function ()
78
78
  test('close button should close the modal', function () {
79
79
  getComposedComponent({
80
80
  isDefaultOpen: true
81
+ }, {
82
+ title: 'Lorem Ipsum'
81
83
  });
82
84
 
83
85
  // Target the close button
@@ -87,6 +89,8 @@ test('close button should close the modal', function () {
87
89
  test('keyboard interactions on the close button should close the modal', function () {
88
90
  getComposedComponent({
89
91
  isDefaultOpen: true
92
+ }, {
93
+ title: 'Lorem Ipsum'
90
94
  });
91
95
 
92
96
  // Target the close button
@@ -198,6 +198,7 @@ test('should only hide the top-most overlay', function () {
198
198
  });
199
199
  test('should render a close button if hasCloseButton is true', function () {
200
200
  getComponent({
201
+ title: 'Lorem Ipsum',
201
202
  hasCloseButton: true
202
203
  });
203
204
  expect(screen.queryByRole('button')).toBeInTheDocument();
@@ -209,6 +210,7 @@ test('should render a custom close button if hasCloseButton is true and custom b
209
210
  });
210
211
  };
211
212
  getComponent({
213
+ title: 'Lorem Ipsum',
212
214
  hasCloseButton: true,
213
215
  closeButton: ___EmotionJSX(MyButton, null)
214
216
  });
@@ -217,6 +219,7 @@ test('should render a custom close button if hasCloseButton is true and custom b
217
219
  });
218
220
  test('shouldn\'t auto focus the first tabbable element', function () {
219
221
  getComponent({
222
+ title: 'Lorem Ipsum',
220
223
  hasCloseButton: true
221
224
  });
222
225
  var button = screen.queryByRole('button');
@@ -224,6 +227,7 @@ test('shouldn\'t auto focus the first tabbable element', function () {
224
227
  });
225
228
  test('should auto focus the first tabbable element if "hasAutoFocus" is true', function () {
226
229
  getComponent({
230
+ title: 'Lorem Ipsum',
227
231
  hasCloseButton: true,
228
232
  hasAutoFocus: true
229
233
  });
@@ -402,7 +402,6 @@ var DefaultMultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
402
402
  }, ___EmotionJSX(Badge, _extends({
403
403
  key: item.key,
404
404
  role: "presentation",
405
- bg: "active",
406
405
  variant: "selectedItemBadge",
407
406
  label: item.name,
408
407
  slots: item.slots