@atlaskit/modal-dialog 12.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2111 -0
- package/LICENSE +13 -0
- package/README.md +13 -0
- package/__perf__/default.tsx +42 -0
- package/__perf__/interactions.tsx +136 -0
- package/__perf__/scroll.tsx +98 -0
- package/codemods/12.0.0-lite-mode.ts +51 -0
- package/codemods/__tests__/12.0.0-lite-mode.test.ts +493 -0
- package/codemods/__tests__/handle-prop-spread.tsx +276 -0
- package/codemods/__tests__/inline-WidthNames-declaration.test.ts +260 -0
- package/codemods/__tests__/map-actions-prop.tsx +436 -0
- package/codemods/__tests__/map-body-from-props.test.ts +645 -0
- package/codemods/__tests__/map-container-from-props.test.ts +323 -0
- package/codemods/__tests__/map-footer-from-props.test.ts +544 -0
- package/codemods/__tests__/map-header-from-props.test.ts +559 -0
- package/codemods/__tests__/map-heading-prop.tsx +438 -0
- package/codemods/__tests__/remove-appearance-prop.test.ts +79 -0
- package/codemods/__tests__/remove-component-override-props.test.ts +153 -0
- package/codemods/__tests__/remove-is-chromeless.tsx +182 -0
- package/codemods/__tests__/rename-appearance-type.test.ts +52 -0
- package/codemods/__tests__/rename-inner-component-prop-types.test.ts +82 -0
- package/codemods/__tests__/rename-scrollBehavior-to-shouldScrollInViewport.test.ts +237 -0
- package/codemods/internal/constants.tsx +41 -0
- package/codemods/internal/utils.tsx +223 -0
- package/codemods/migrations/handle-prop-spread.tsx +51 -0
- package/codemods/migrations/inline-WidthNames-declaration.ts +92 -0
- package/codemods/migrations/map-actions-prop.tsx +430 -0
- package/codemods/migrations/map-body-from-props.ts +147 -0
- package/codemods/migrations/map-container-from-props.ts +72 -0
- package/codemods/migrations/map-footer-from-props.ts +107 -0
- package/codemods/migrations/map-header-from-props.ts +101 -0
- package/codemods/migrations/map-heading-prop.tsx +193 -0
- package/codemods/migrations/remove-appearance-prop.ts +27 -0
- package/codemods/migrations/remove-component-override-props.ts +84 -0
- package/codemods/migrations/remove-is-chromeless.tsx +42 -0
- package/codemods/migrations/rename-appearance-type.ts +9 -0
- package/codemods/migrations/rename-inner-component-prop-types.ts +28 -0
- package/codemods/migrations/rename-scrollBehavior-to-shouldScrollInViewport.ts +82 -0
- package/dist/cjs/hooks.js +22 -0
- package/dist/cjs/index.js +63 -0
- package/dist/cjs/internal/components/modal-dialog.js +155 -0
- package/dist/cjs/internal/components/positioner.js +89 -0
- package/dist/cjs/internal/components/scroll-container.js +138 -0
- package/dist/cjs/internal/constants.js +48 -0
- package/dist/cjs/internal/context.js +13 -0
- package/dist/cjs/internal/hooks/use-modal-stack.js +110 -0
- package/dist/cjs/internal/hooks/use-on-motion-finish.js +24 -0
- package/dist/cjs/internal/hooks/use-prevent-programmatic-scroll.js +55 -0
- package/dist/cjs/internal/hooks/use-scroll.js +20 -0
- package/dist/cjs/internal/utils.js +35 -0
- package/dist/cjs/modal-body.js +66 -0
- package/dist/cjs/modal-footer.js +40 -0
- package/dist/cjs/modal-header.js +43 -0
- package/dist/cjs/modal-title.js +108 -0
- package/dist/cjs/modal-transition.js +21 -0
- package/dist/cjs/modal-wrapper.js +126 -0
- package/dist/cjs/types.js +5 -0
- package/dist/cjs/version.json +5 -0
- package/dist/es2019/hooks.js +11 -0
- package/dist/es2019/index.js +7 -0
- package/dist/es2019/internal/components/modal-dialog.js +120 -0
- package/dist/es2019/internal/components/positioner.js +78 -0
- package/dist/es2019/internal/components/scroll-container.js +97 -0
- package/dist/es2019/internal/constants.js +27 -0
- package/dist/es2019/internal/context.js +3 -0
- package/dist/es2019/internal/hooks/use-modal-stack.js +85 -0
- package/dist/es2019/internal/hooks/use-on-motion-finish.js +17 -0
- package/dist/es2019/internal/hooks/use-prevent-programmatic-scroll.js +39 -0
- package/dist/es2019/internal/hooks/use-scroll.js +11 -0
- package/dist/es2019/internal/utils.js +22 -0
- package/dist/es2019/modal-body.js +50 -0
- package/dist/es2019/modal-footer.js +30 -0
- package/dist/es2019/modal-header.js +30 -0
- package/dist/es2019/modal-title.js +94 -0
- package/dist/es2019/modal-transition.js +10 -0
- package/dist/es2019/modal-wrapper.js +88 -0
- package/dist/es2019/types.js +1 -0
- package/dist/es2019/version.json +5 -0
- package/dist/esm/hooks.js +11 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/internal/components/modal-dialog.js +131 -0
- package/dist/esm/internal/components/positioner.js +76 -0
- package/dist/esm/internal/components/scroll-container.js +114 -0
- package/dist/esm/internal/constants.js +27 -0
- package/dist/esm/internal/context.js +3 -0
- package/dist/esm/internal/hooks/use-modal-stack.js +96 -0
- package/dist/esm/internal/hooks/use-on-motion-finish.js +16 -0
- package/dist/esm/internal/hooks/use-prevent-programmatic-scroll.js +44 -0
- package/dist/esm/internal/hooks/use-scroll.js +11 -0
- package/dist/esm/internal/utils.js +22 -0
- package/dist/esm/modal-body.js +49 -0
- package/dist/esm/modal-footer.js +29 -0
- package/dist/esm/modal-header.js +29 -0
- package/dist/esm/modal-title.js +93 -0
- package/dist/esm/modal-transition.js +10 -0
- package/dist/esm/modal-wrapper.js +96 -0
- package/dist/esm/types.js +1 -0
- package/dist/esm/version.json +5 -0
- package/dist/types/hooks.d.ts +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/internal/components/modal-dialog.d.ts +3 -0
- package/dist/types/internal/components/positioner.d.ts +10 -0
- package/dist/types/internal/components/scroll-container.d.ts +20 -0
- package/dist/types/internal/constants.d.ts +25 -0
- package/dist/types/internal/context.d.ts +20 -0
- package/dist/types/internal/hooks/use-modal-stack.d.ts +13 -0
- package/dist/types/internal/hooks/use-on-motion-finish.d.ts +4 -0
- package/dist/types/internal/hooks/use-prevent-programmatic-scroll.d.ts +7 -0
- package/dist/types/internal/hooks/use-scroll.d.ts +1 -0
- package/dist/types/internal/utils.d.ts +3 -0
- package/dist/types/modal-body.d.ts +16 -0
- package/dist/types/modal-footer.d.ts +16 -0
- package/dist/types/modal-header.d.ts +16 -0
- package/dist/types/modal-title.d.ts +26 -0
- package/dist/types/modal-transition.d.ts +3 -0
- package/dist/types/modal-wrapper.d.ts +5 -0
- package/dist/types/types.d.ts +90 -0
- package/extract-react-types/modal-attributes.tsx +5 -0
- package/hooks/package.json +7 -0
- package/modal-body/package.json +7 -0
- package/modal-dialog/package.json +7 -0
- package/modal-footer/package.json +7 -0
- package/modal-header/package.json +7 -0
- package/modal-title/package.json +7 -0
- package/modal-transition/package.json +7 -0
- package/package.json +113 -0
- package/types/package.json +7 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = useScroll;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
var _context = require("../context");
|
|
11
|
+
|
|
12
|
+
function useScroll() {
|
|
13
|
+
var shouldScrollInViewport = (0, _react.useContext)(_context.ScrollContext);
|
|
14
|
+
|
|
15
|
+
if (shouldScrollInViewport == null) {
|
|
16
|
+
throw Error('@atlaskit/modal-dialog: Scroll context unavailable – this component needs to be a child of ModalDialog.');
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return shouldScrollInViewport;
|
|
20
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.dialogHeight = exports.dialogWidth = void 0;
|
|
7
|
+
|
|
8
|
+
var _constants = require("./constants");
|
|
9
|
+
|
|
10
|
+
var dialogWidth = function dialogWidth(input) {
|
|
11
|
+
if (!input) {
|
|
12
|
+
return 'auto';
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
var isWidthName = _constants.width.values.indexOf(input.toString()) !== -1;
|
|
16
|
+
var widthName = isWidthName && input;
|
|
17
|
+
|
|
18
|
+
if (widthName) {
|
|
19
|
+
return "".concat(_constants.width.widths[widthName], "px");
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return typeof input === 'number' ? "".concat(input, "px") : input;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
exports.dialogWidth = dialogWidth;
|
|
26
|
+
|
|
27
|
+
var dialogHeight = function dialogHeight(input) {
|
|
28
|
+
if (!input) {
|
|
29
|
+
return 'auto';
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return typeof input === 'number' ? "".concat(input, "px") : input;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
exports.dialogHeight = dialogHeight;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
|
|
10
|
+
var _react = _interopRequireDefault(require("react"));
|
|
11
|
+
|
|
12
|
+
var _core = require("@emotion/core");
|
|
13
|
+
|
|
14
|
+
var _reactScrolllock = require("react-scrolllock");
|
|
15
|
+
|
|
16
|
+
var _hooks = require("./hooks");
|
|
17
|
+
|
|
18
|
+
var _scrollContainer = _interopRequireDefault(require("./internal/components/scroll-container"));
|
|
19
|
+
|
|
20
|
+
var _constants = require("./internal/constants");
|
|
21
|
+
|
|
22
|
+
var _useScroll = _interopRequireDefault(require("./internal/hooks/use-scroll"));
|
|
23
|
+
|
|
24
|
+
/** @jsx jsx */
|
|
25
|
+
var bodyStyles = (0, _core.css)({
|
|
26
|
+
/* This ensures the body fills the whole space between header and footer. */
|
|
27
|
+
flex: '1 1 auto'
|
|
28
|
+
});
|
|
29
|
+
/**
|
|
30
|
+
* Adding the padding here avoids cropping the keyline on its sides.
|
|
31
|
+
* The combined vertical spacing is maintained by subtracting the
|
|
32
|
+
* keyline height from header and footer. */
|
|
33
|
+
|
|
34
|
+
var bodyScrollStyles = (0, _core.css)({
|
|
35
|
+
padding: "".concat(_constants.keylineHeight, "px ").concat(_constants.padding, "px")
|
|
36
|
+
});
|
|
37
|
+
/**
|
|
38
|
+
* Keylines will not be shown if scrolling in viewport so we do
|
|
39
|
+
* not account for them in this case. */
|
|
40
|
+
|
|
41
|
+
var viewportScrollStyles = (0, _core.css)({
|
|
42
|
+
padding: "0px ".concat(_constants.padding, "px")
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
var ModalBody = function ModalBody(props) {
|
|
46
|
+
var children = props.children,
|
|
47
|
+
userDefinedTestId = props.testId;
|
|
48
|
+
|
|
49
|
+
var _useModal = (0, _hooks.useModal)(),
|
|
50
|
+
modalTestId = _useModal.testId;
|
|
51
|
+
|
|
52
|
+
var shouldScrollInViewport = (0, _useScroll.default)();
|
|
53
|
+
var testId = userDefinedTestId || modalTestId && "".concat(modalTestId, "--body");
|
|
54
|
+
return shouldScrollInViewport ? (0, _core.jsx)("div", {
|
|
55
|
+
css: [bodyStyles, viewportScrollStyles],
|
|
56
|
+
"data-testid": testId
|
|
57
|
+
}, children) : (0, _core.jsx)(_reactScrolllock.TouchScrollable, null, (0, _core.jsx)(_scrollContainer.default, {
|
|
58
|
+
testId: userDefinedTestId || modalTestId
|
|
59
|
+
}, (0, _core.jsx)("div", {
|
|
60
|
+
css: [bodyStyles, bodyScrollStyles],
|
|
61
|
+
"data-testid": testId
|
|
62
|
+
}, children)));
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
var _default = ModalBody;
|
|
66
|
+
exports.default = _default;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _core = require("@emotion/core");
|
|
9
|
+
|
|
10
|
+
var _hooks = require("./hooks");
|
|
11
|
+
|
|
12
|
+
var _constants = require("./internal/constants");
|
|
13
|
+
|
|
14
|
+
/** @jsx jsx */
|
|
15
|
+
var footerStyles = (0, _core.css)({
|
|
16
|
+
display: 'flex',
|
|
17
|
+
padding: _constants.padding,
|
|
18
|
+
paddingTop: "".concat(_constants.padding - _constants.keylineHeight, "px"),
|
|
19
|
+
position: 'relative',
|
|
20
|
+
alignItems: 'center',
|
|
21
|
+
justifyContent: 'flex-end',
|
|
22
|
+
gap: "".concat(_constants.footerItemGap, "px")
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
var ModalFooter = function ModalFooter(props) {
|
|
26
|
+
var children = props.children,
|
|
27
|
+
userDefinedTestId = props.testId;
|
|
28
|
+
|
|
29
|
+
var _useModal = (0, _hooks.useModal)(),
|
|
30
|
+
modalTestId = _useModal.testId;
|
|
31
|
+
|
|
32
|
+
var testId = userDefinedTestId || modalTestId && "".concat(modalTestId, "--footer");
|
|
33
|
+
return (0, _core.jsx)("div", {
|
|
34
|
+
css: footerStyles,
|
|
35
|
+
"data-testid": testId
|
|
36
|
+
}, children);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
var _default = ModalFooter;
|
|
40
|
+
exports.default = _default;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
|
|
10
|
+
var _react = _interopRequireDefault(require("react"));
|
|
11
|
+
|
|
12
|
+
var _core = require("@emotion/core");
|
|
13
|
+
|
|
14
|
+
var _hooks = require("./hooks");
|
|
15
|
+
|
|
16
|
+
var _constants = require("./internal/constants");
|
|
17
|
+
|
|
18
|
+
/** @jsx jsx */
|
|
19
|
+
var headerStyles = (0, _core.css)({
|
|
20
|
+
display: 'flex',
|
|
21
|
+
padding: _constants.padding,
|
|
22
|
+
paddingBottom: "".concat(_constants.padding - _constants.keylineHeight, "px"),
|
|
23
|
+
position: 'relative',
|
|
24
|
+
alignItems: 'center',
|
|
25
|
+
justifyContent: 'space-between'
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
var ModalHeader = function ModalHeader(props) {
|
|
29
|
+
var children = props.children,
|
|
30
|
+
userDefinedTestId = props.testId;
|
|
31
|
+
|
|
32
|
+
var _useModal = (0, _hooks.useModal)(),
|
|
33
|
+
modalTestId = _useModal.testId;
|
|
34
|
+
|
|
35
|
+
var testId = userDefinedTestId || modalTestId && "".concat(modalTestId, "--header");
|
|
36
|
+
return (0, _core.jsx)("div", {
|
|
37
|
+
css: headerStyles,
|
|
38
|
+
"data-testid": testId
|
|
39
|
+
}, children);
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
var _default = ModalHeader;
|
|
43
|
+
exports.default = _default;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
|
|
10
|
+
var _core = require("@emotion/core");
|
|
11
|
+
|
|
12
|
+
var _error = _interopRequireDefault(require("@atlaskit/icon/glyph/error"));
|
|
13
|
+
|
|
14
|
+
var _warning = _interopRequireDefault(require("@atlaskit/icon/glyph/warning"));
|
|
15
|
+
|
|
16
|
+
var _hooks = require("./hooks");
|
|
17
|
+
|
|
18
|
+
var _constants = require("./internal/constants");
|
|
19
|
+
|
|
20
|
+
/** @jsx jsx */
|
|
21
|
+
var fontSize = 20;
|
|
22
|
+
var lineHeight = 1;
|
|
23
|
+
var adjustedLineHeight = 1.2;
|
|
24
|
+
var titleStyles = (0, _core.css)({
|
|
25
|
+
display: 'flex',
|
|
26
|
+
minWidth: 0,
|
|
27
|
+
margin: 0,
|
|
28
|
+
alignItems: 'center',
|
|
29
|
+
fontSize: "".concat(fontSize, "px"),
|
|
30
|
+
fontStyle: 'inherit',
|
|
31
|
+
fontWeight: 500,
|
|
32
|
+
letterSpacing: "-0.008em",
|
|
33
|
+
lineHeight: lineHeight
|
|
34
|
+
});
|
|
35
|
+
var textStyles = (0, _core.css)({
|
|
36
|
+
minWidth: 0,
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* This ensures that the element fills the whole header space
|
|
40
|
+
* and its content does not overflow (since flex items don't
|
|
41
|
+
* shrink past its content size by default). */
|
|
42
|
+
flex: '1 1 auto',
|
|
43
|
+
wordWrap: 'break-word'
|
|
44
|
+
});
|
|
45
|
+
var iconStyles = (0, _core.css)({
|
|
46
|
+
marginRight: "".concat(_constants.titleIconMargin, "px"),
|
|
47
|
+
|
|
48
|
+
/* Keeps the size of the icon the same, in case the text element grows in width. */
|
|
49
|
+
flex: '0 0 auto'
|
|
50
|
+
});
|
|
51
|
+
/**
|
|
52
|
+
* When the title is truncated (not multi-line), we adjust the
|
|
53
|
+
* line height to avoid cropping the descenders. This removes
|
|
54
|
+
* the extra spacing that we get from that adjustment. */
|
|
55
|
+
|
|
56
|
+
var lineHeightOffset = fontSize - fontSize * adjustedLineHeight;
|
|
57
|
+
var truncatedTextStyles = (0, _core.css)({
|
|
58
|
+
marginTop: "".concat(lineHeightOffset / 2, "px"),
|
|
59
|
+
marginBottom: "".concat(lineHeightOffset / 2, "px"),
|
|
60
|
+
lineHeight: adjustedLineHeight,
|
|
61
|
+
overflow: 'hidden',
|
|
62
|
+
textOverflow: 'ellipsis',
|
|
63
|
+
whiteSpace: 'nowrap'
|
|
64
|
+
});
|
|
65
|
+
var truncatedTextIconStyles = (0, _core.css)({
|
|
66
|
+
marginBottom: "".concat(lineHeightOffset / 2, "px"),
|
|
67
|
+
lineHeight: 1.2
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
var TitleIcon = function TitleIcon(_ref) {
|
|
71
|
+
var appearance = _ref.appearance,
|
|
72
|
+
isMultiline = _ref.isMultiline;
|
|
73
|
+
var Icon = appearance === 'danger' ? _error.default : _warning.default;
|
|
74
|
+
return (0, _core.jsx)("span", {
|
|
75
|
+
css: [iconStyles, !isMultiline && truncatedTextIconStyles]
|
|
76
|
+
}, (0, _core.jsx)(Icon, {
|
|
77
|
+
label: "".concat(appearance, " icon"),
|
|
78
|
+
primaryColor: _constants.iconColor[appearance]
|
|
79
|
+
}));
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
var ModalTitle = function ModalTitle(props) {
|
|
83
|
+
var appearance = props.appearance,
|
|
84
|
+
children = props.children,
|
|
85
|
+
_props$isMultiline = props.isMultiline,
|
|
86
|
+
isMultiline = _props$isMultiline === void 0 ? true : _props$isMultiline,
|
|
87
|
+
userDefinedTestId = props.testId;
|
|
88
|
+
|
|
89
|
+
var _useModal = (0, _hooks.useModal)(),
|
|
90
|
+
titleId = _useModal.titleId,
|
|
91
|
+
modalTestId = _useModal.testId;
|
|
92
|
+
|
|
93
|
+
var testId = userDefinedTestId || modalTestId && "".concat(modalTestId, "--title");
|
|
94
|
+
return (0, _core.jsx)("h1", {
|
|
95
|
+
css: titleStyles,
|
|
96
|
+
"data-testid": testId
|
|
97
|
+
}, appearance && (0, _core.jsx)(TitleIcon, {
|
|
98
|
+
appearance: appearance,
|
|
99
|
+
isMultiline: isMultiline
|
|
100
|
+
}), (0, _core.jsx)("span", {
|
|
101
|
+
id: titleId,
|
|
102
|
+
css: [textStyles, !isMultiline && truncatedTextStyles],
|
|
103
|
+
"data-testid": testId && "".concat(testId, "-text")
|
|
104
|
+
}, children));
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
var _default = ModalTitle;
|
|
108
|
+
exports.default = _default;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
|
|
10
|
+
var _react = _interopRequireDefault(require("react"));
|
|
11
|
+
|
|
12
|
+
var _exitingPersistence = _interopRequireDefault(require("@atlaskit/motion/exiting-persistence"));
|
|
13
|
+
|
|
14
|
+
var ModalTransition = function ModalTransition(props) {
|
|
15
|
+
return /*#__PURE__*/_react.default.createElement(_exitingPersistence.default, {
|
|
16
|
+
appear: true
|
|
17
|
+
}, props.children);
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
var _default = ModalTransition;
|
|
21
|
+
exports.default = _default;
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports.default = void 0;
|
|
11
|
+
|
|
12
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
13
|
+
|
|
14
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
15
|
+
|
|
16
|
+
var _react = require("react");
|
|
17
|
+
|
|
18
|
+
var _core = require("@emotion/core");
|
|
19
|
+
|
|
20
|
+
var _reactFocusLock = _interopRequireDefault(require("react-focus-lock"));
|
|
21
|
+
|
|
22
|
+
var _reactScrolllock = _interopRequireWildcard(require("react-scrolllock"));
|
|
23
|
+
|
|
24
|
+
var _analyticsNext = require("@atlaskit/analytics-next");
|
|
25
|
+
|
|
26
|
+
var _blanket = _interopRequireDefault(require("@atlaskit/blanket"));
|
|
27
|
+
|
|
28
|
+
var _noop = _interopRequireDefault(require("@atlaskit/ds-lib/noop"));
|
|
29
|
+
|
|
30
|
+
var _useCloseOnEscapePress = _interopRequireDefault(require("@atlaskit/ds-lib/use-close-on-escape-press"));
|
|
31
|
+
|
|
32
|
+
var _fadeIn = _interopRequireDefault(require("@atlaskit/motion/fade-in"));
|
|
33
|
+
|
|
34
|
+
var _portal = _interopRequireDefault(require("@atlaskit/portal"));
|
|
35
|
+
|
|
36
|
+
var _constants = require("@atlaskit/theme/constants");
|
|
37
|
+
|
|
38
|
+
var _modalDialog = _interopRequireDefault(require("./internal/components/modal-dialog"));
|
|
39
|
+
|
|
40
|
+
var _useModalStack = _interopRequireDefault(require("./internal/hooks/use-modal-stack"));
|
|
41
|
+
|
|
42
|
+
var _usePreventProgrammaticScroll = _interopRequireDefault(require("./internal/hooks/use-prevent-programmatic-scroll"));
|
|
43
|
+
|
|
44
|
+
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); }
|
|
45
|
+
|
|
46
|
+
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; }
|
|
47
|
+
|
|
48
|
+
/** @jsx jsx */
|
|
49
|
+
var fillScreenStyles = (0, _core.css)({
|
|
50
|
+
width: '100vw',
|
|
51
|
+
height: '100vh',
|
|
52
|
+
position: 'fixed',
|
|
53
|
+
top: 0,
|
|
54
|
+
left: 0,
|
|
55
|
+
overflowY: 'auto',
|
|
56
|
+
WebkitOverflowScrolling: 'touch'
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
var ModalWrapper = function ModalWrapper(props) {
|
|
60
|
+
var _props$autoFocus = props.autoFocus,
|
|
61
|
+
autoFocus = _props$autoFocus === void 0 ? true : _props$autoFocus,
|
|
62
|
+
_props$shouldCloseOnE = props.shouldCloseOnEscapePress,
|
|
63
|
+
shouldCloseOnEscapePress = _props$shouldCloseOnE === void 0 ? true : _props$shouldCloseOnE,
|
|
64
|
+
_props$shouldCloseOnO = props.shouldCloseOnOverlayClick,
|
|
65
|
+
shouldCloseOnOverlayClick = _props$shouldCloseOnO === void 0 ? true : _props$shouldCloseOnO,
|
|
66
|
+
_props$shouldScrollIn = props.shouldScrollInViewport,
|
|
67
|
+
shouldScrollInViewport = _props$shouldScrollIn === void 0 ? false : _props$shouldScrollIn,
|
|
68
|
+
stackIndexOverride = props.stackIndex,
|
|
69
|
+
_props$onClose = props.onClose,
|
|
70
|
+
onClose = _props$onClose === void 0 ? _noop.default : _props$onClose,
|
|
71
|
+
_props$onStackChange = props.onStackChange,
|
|
72
|
+
onStackChange = _props$onStackChange === void 0 ? _noop.default : _props$onStackChange,
|
|
73
|
+
isBlanketHidden = props.isBlanketHidden,
|
|
74
|
+
testId = props.testId,
|
|
75
|
+
modalDialogProps = (0, _objectWithoutProperties2.default)(props, ["autoFocus", "shouldCloseOnEscapePress", "shouldCloseOnOverlayClick", "shouldScrollInViewport", "stackIndex", "onClose", "onStackChange", "isBlanketHidden", "testId"]);
|
|
76
|
+
var calculatedStackIndex = (0, _useModalStack.default)({
|
|
77
|
+
onStackChange: onStackChange
|
|
78
|
+
});
|
|
79
|
+
var stackIndex = stackIndexOverride || calculatedStackIndex;
|
|
80
|
+
var isForeground = stackIndex === 0; // When a user supplies a ref to focus we skip auto focus via react-focus-lock
|
|
81
|
+
|
|
82
|
+
var autoFocusLock = typeof autoFocus === 'boolean' ? autoFocus : false;
|
|
83
|
+
var onCloseHandler = (0, _analyticsNext.usePlatformLeafEventHandler)({
|
|
84
|
+
fn: onClose,
|
|
85
|
+
action: 'closed',
|
|
86
|
+
componentName: 'modalDialog',
|
|
87
|
+
packageName: "@atlaskit/modal-dialog",
|
|
88
|
+
packageVersion: "12.0.2"
|
|
89
|
+
});
|
|
90
|
+
var onBlanketClicked = (0, _react.useCallback)(function (e) {
|
|
91
|
+
if (shouldCloseOnOverlayClick) {
|
|
92
|
+
onCloseHandler(e);
|
|
93
|
+
}
|
|
94
|
+
}, [shouldCloseOnOverlayClick, onCloseHandler]);
|
|
95
|
+
(0, _usePreventProgrammaticScroll.default)();
|
|
96
|
+
(0, _useCloseOnEscapePress.default)({
|
|
97
|
+
onClose: onCloseHandler,
|
|
98
|
+
isDisabled: !shouldCloseOnEscapePress || !isForeground
|
|
99
|
+
});
|
|
100
|
+
var modalDialogWithBlanket = (0, _core.jsx)(_blanket.default, {
|
|
101
|
+
isTinted: !isBlanketHidden,
|
|
102
|
+
onBlanketClicked: onBlanketClicked,
|
|
103
|
+
testId: testId && "".concat(testId, "--blanket")
|
|
104
|
+
}, (0, _core.jsx)(_modalDialog.default, (0, _extends2.default)({
|
|
105
|
+
testId: testId,
|
|
106
|
+
autoFocus: autoFocus,
|
|
107
|
+
stackIndex: stackIndex,
|
|
108
|
+
onClose: onCloseHandler,
|
|
109
|
+
shouldScrollInViewport: shouldScrollInViewport
|
|
110
|
+
}, modalDialogProps)));
|
|
111
|
+
return (0, _core.jsx)(_portal.default, {
|
|
112
|
+
zIndex: _constants.layers.modal()
|
|
113
|
+
}, (0, _core.jsx)(_fadeIn.default, null, function (fadeInProps) {
|
|
114
|
+
return (0, _core.jsx)("div", (0, _extends2.default)({}, fadeInProps, {
|
|
115
|
+
css: fillScreenStyles,
|
|
116
|
+
"aria-hidden": !isForeground
|
|
117
|
+
}), (0, _core.jsx)(_reactFocusLock.default, {
|
|
118
|
+
autoFocus: autoFocusLock,
|
|
119
|
+
disabled: !isForeground,
|
|
120
|
+
returnFocus: true
|
|
121
|
+
}, (0, _core.jsx)(_reactScrolllock.default, null), shouldScrollInViewport ? (0, _core.jsx)(_reactScrolllock.TouchScrollable, null, modalDialogWithBlanket) : modalDialogWithBlanket));
|
|
122
|
+
}));
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
var _default = ModalWrapper;
|
|
126
|
+
exports.default = _default;
|