@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,89 @@
|
|
|
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 _curves = require("@atlaskit/motion/curves");
|
|
11
|
+
|
|
12
|
+
var _durations = require("@atlaskit/motion/durations");
|
|
13
|
+
|
|
14
|
+
var _constants = require("@atlaskit/theme/constants");
|
|
15
|
+
|
|
16
|
+
var _constants2 = require("../constants");
|
|
17
|
+
|
|
18
|
+
/** @jsx jsx */
|
|
19
|
+
var maxWidthDimensions = "calc(100vw - ".concat(_constants2.gutter * 2, "px)");
|
|
20
|
+
var maxHeightDimensions = "calc(100vh - ".concat(_constants2.gutter * 2 - 1, "px)");
|
|
21
|
+
var positionerStyles = (0, _core.css)({
|
|
22
|
+
width: '100%',
|
|
23
|
+
maxWidth: '100%',
|
|
24
|
+
height: '100%',
|
|
25
|
+
position: 'fixed',
|
|
26
|
+
zIndex: _constants.layers.modal(),
|
|
27
|
+
top: 0,
|
|
28
|
+
left: 0
|
|
29
|
+
});
|
|
30
|
+
var viewportScrollStyles = (0, _core.css)({
|
|
31
|
+
width: 'max-content',
|
|
32
|
+
height: 'auto',
|
|
33
|
+
position: 'relative',
|
|
34
|
+
'@media (min-width: 480px)': {
|
|
35
|
+
margin: "".concat(_constants2.gutter, "px auto")
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
var bodyScrollStyles = (0, _core.css)({
|
|
39
|
+
'@media (min-width: 480px)': {
|
|
40
|
+
width: 'max-content',
|
|
41
|
+
maxWidth: maxWidthDimensions,
|
|
42
|
+
maxHeight: maxHeightDimensions,
|
|
43
|
+
marginRight: 'auto',
|
|
44
|
+
marginLeft: 'auto',
|
|
45
|
+
position: 'absolute',
|
|
46
|
+
top: "".concat(_constants2.gutter, "px"),
|
|
47
|
+
right: 0,
|
|
48
|
+
left: 0,
|
|
49
|
+
pointerEvents: 'none'
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
var stackTransitionStyles = (0, _core.css)({
|
|
53
|
+
transitionDuration: "".concat(_durations.mediumDurationMs, "ms"),
|
|
54
|
+
transitionProperty: 'transform',
|
|
55
|
+
transitionTimingFunction: _curves.easeInOut,
|
|
56
|
+
|
|
57
|
+
/** Duplicated from @atlaskit/motion/accessibility
|
|
58
|
+
* because @repo/internal/styles/consistent-style-ordering
|
|
59
|
+
* doesn't work well with object spreading. */
|
|
60
|
+
'@media (prefers-reduced-motion: reduce)': {
|
|
61
|
+
animation: 'none',
|
|
62
|
+
transition: 'none'
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
var stackTransformStyles = (0, _core.css)({
|
|
66
|
+
transform: 'translateY(var(--modal-dialog-translate-y))'
|
|
67
|
+
});
|
|
68
|
+
var stackIdleStyles = (0, _core.css)({
|
|
69
|
+
transform: 'none'
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
var Positioner = function Positioner(props) {
|
|
73
|
+
var children = props.children,
|
|
74
|
+
stackIndex = props.stackIndex,
|
|
75
|
+
shouldScrollInViewport = props.shouldScrollInViewport,
|
|
76
|
+
testId = props.testId;
|
|
77
|
+
return (0, _core.jsx)("div", {
|
|
78
|
+
style: {
|
|
79
|
+
'--modal-dialog-translate-y': "".concat(stackIndex * (_constants2.verticalOffset / 2), "px")
|
|
80
|
+
},
|
|
81
|
+
css: [positionerStyles, stackTransitionStyles,
|
|
82
|
+
/* We only want to apply transform on modals shifting to the back of the stack. */
|
|
83
|
+
stackIndex > 0 ? stackTransformStyles : stackIdleStyles, shouldScrollInViewport ? viewportScrollStyles : bodyScrollStyles],
|
|
84
|
+
"data-testid": testId && "".concat(testId, "--positioner")
|
|
85
|
+
}, children);
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
var _default = Positioner;
|
|
89
|
+
exports.default = _default;
|
|
@@ -0,0 +1,138 @@
|
|
|
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 _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
|
+
|
|
14
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
15
|
+
|
|
16
|
+
var _core = require("@emotion/core");
|
|
17
|
+
|
|
18
|
+
var _rafSchd = _interopRequireDefault(require("raf-schd"));
|
|
19
|
+
|
|
20
|
+
var _mergeRefs = _interopRequireDefault(require("@atlaskit/ds-lib/merge-refs"));
|
|
21
|
+
|
|
22
|
+
var _useLazyCallback = _interopRequireDefault(require("@atlaskit/ds-lib/use-lazy-callback"));
|
|
23
|
+
|
|
24
|
+
var _useStateRef3 = _interopRequireDefault(require("@atlaskit/ds-lib/use-state-ref"));
|
|
25
|
+
|
|
26
|
+
var _focusRing = _interopRequireDefault(require("@atlaskit/focus-ring"));
|
|
27
|
+
|
|
28
|
+
var _constants = require("../constants");
|
|
29
|
+
|
|
30
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
31
|
+
|
|
32
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
33
|
+
|
|
34
|
+
/** @jsx jsx */
|
|
35
|
+
var baseStyles = (0, _core.css)({
|
|
36
|
+
/**
|
|
37
|
+
* We need to inherit flex styles from its parent here
|
|
38
|
+
* in case they're set because we're essentially being a proxy container
|
|
39
|
+
* between the original flex parent and its children (the modal body).
|
|
40
|
+
*/
|
|
41
|
+
display: 'inherit',
|
|
42
|
+
margin: 0,
|
|
43
|
+
flex: 'inherit',
|
|
44
|
+
flexDirection: 'inherit',
|
|
45
|
+
overflowX: 'hidden',
|
|
46
|
+
overflowY: 'auto',
|
|
47
|
+
'@media (min-width: 480px)': {
|
|
48
|
+
height: 'unset',
|
|
49
|
+
overflowY: 'auto'
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
var topKeylineStyles = (0, _core.css)({
|
|
53
|
+
borderTop: "".concat(_constants.keylineHeight, "px solid ").concat(_constants.keylineColor)
|
|
54
|
+
});
|
|
55
|
+
var bottomKeylineStyles = (0, _core.css)({
|
|
56
|
+
borderBottom: "".concat(_constants.keylineHeight, "px solid ").concat(_constants.keylineColor)
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* A container that shows top and bottom keylines when the
|
|
61
|
+
* content overflows into the scrollable element.
|
|
62
|
+
*/
|
|
63
|
+
var ScrollContainer = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
64
|
+
var testId = props.testId,
|
|
65
|
+
children = props.children;
|
|
66
|
+
|
|
67
|
+
var _useStateRef = (0, _useStateRef3.default)({
|
|
68
|
+
previous: false,
|
|
69
|
+
next: false
|
|
70
|
+
}),
|
|
71
|
+
_useStateRef2 = (0, _slicedToArray2.default)(_useStateRef, 2),
|
|
72
|
+
hasSiblings = _useStateRef2[0],
|
|
73
|
+
setSiblings = _useStateRef2[1];
|
|
74
|
+
|
|
75
|
+
var _useState = (0, _react.useState)(false),
|
|
76
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
77
|
+
showContentFocus = _useState2[0],
|
|
78
|
+
setContentFocus = _useState2[1];
|
|
79
|
+
|
|
80
|
+
var _useState3 = (0, _react.useState)(false),
|
|
81
|
+
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
82
|
+
showTopKeyline = _useState4[0],
|
|
83
|
+
setTopKeyline = _useState4[1];
|
|
84
|
+
|
|
85
|
+
var _useState5 = (0, _react.useState)(false),
|
|
86
|
+
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
|
|
87
|
+
showBottomKeyline = _useState6[0],
|
|
88
|
+
setBottomKeyline = _useState6[1];
|
|
89
|
+
|
|
90
|
+
var scrollableRef = (0, _react.useRef)(null);
|
|
91
|
+
var setLazySiblings = (0, _useLazyCallback.default)(setSiblings);
|
|
92
|
+
var setLazyContentFocus = (0, _useLazyCallback.default)((0, _rafSchd.default)(function () {
|
|
93
|
+
var target = scrollableRef.current;
|
|
94
|
+
target && setContentFocus(target.scrollHeight > target.clientHeight);
|
|
95
|
+
}));
|
|
96
|
+
var setLazyKeylines = (0, _useLazyCallback.default)((0, _rafSchd.default)(function () {
|
|
97
|
+
var target = scrollableRef.current;
|
|
98
|
+
|
|
99
|
+
if (target) {
|
|
100
|
+
var scrollableDistance = target.scrollHeight - target.clientHeight;
|
|
101
|
+
|
|
102
|
+
if (hasSiblings.current.previous) {
|
|
103
|
+
setTopKeyline(target.scrollTop > _constants.keylineHeight);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (hasSiblings.current.next) {
|
|
107
|
+
setBottomKeyline(target.scrollTop <= scrollableDistance - _constants.keylineHeight);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}));
|
|
111
|
+
(0, _react.useEffect)(function () {
|
|
112
|
+
var target = scrollableRef.current;
|
|
113
|
+
window.addEventListener('resize', setLazyKeylines, false);
|
|
114
|
+
target === null || target === void 0 ? void 0 : target.addEventListener('scroll', setLazyKeylines, false);
|
|
115
|
+
setLazyContentFocus();
|
|
116
|
+
setLazyKeylines();
|
|
117
|
+
setLazySiblings({
|
|
118
|
+
previous: Boolean(target === null || target === void 0 ? void 0 : target.previousElementSibling),
|
|
119
|
+
next: Boolean(target === null || target === void 0 ? void 0 : target.nextElementSibling)
|
|
120
|
+
});
|
|
121
|
+
return function () {
|
|
122
|
+
window.removeEventListener('resize', setLazyKeylines, false);
|
|
123
|
+
target === null || target === void 0 ? void 0 : target.removeEventListener('scroll', setLazyKeylines, false);
|
|
124
|
+
};
|
|
125
|
+
}, [setLazyContentFocus, setLazyKeylines, setLazySiblings]);
|
|
126
|
+
return (0, _core.jsx)(_focusRing.default, {
|
|
127
|
+
isInset: true
|
|
128
|
+
}, (0, _core.jsx)("div", {
|
|
129
|
+
// eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex
|
|
130
|
+
tabIndex: showContentFocus ? 0 : undefined,
|
|
131
|
+
"data-testid": testId && "".concat(testId, "--scrollable"),
|
|
132
|
+
ref: (0, _mergeRefs.default)([ref, scrollableRef]),
|
|
133
|
+
css: [baseStyles, showTopKeyline && topKeylineStyles, showBottomKeyline && bottomKeylineStyles]
|
|
134
|
+
}, children));
|
|
135
|
+
});
|
|
136
|
+
ScrollContainer.displayName = 'ScrollContainer';
|
|
137
|
+
var _default = ScrollContainer;
|
|
138
|
+
exports.default = _default;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.iconColor = exports.focusOutlineColor = exports.textColor = exports.keylineColor = exports.keylineHeight = exports.titleIconMargin = exports.footerItemGap = exports.padding = exports.verticalOffset = exports.borderRadius = exports.gutter = exports.width = void 0;
|
|
7
|
+
|
|
8
|
+
var _colors = require("@atlaskit/theme/colors");
|
|
9
|
+
|
|
10
|
+
var _constants = require("@atlaskit/theme/constants");
|
|
11
|
+
|
|
12
|
+
var width = {
|
|
13
|
+
values: ['small', 'medium', 'large', 'x-large'],
|
|
14
|
+
widths: {
|
|
15
|
+
small: 400,
|
|
16
|
+
medium: 600,
|
|
17
|
+
large: 800,
|
|
18
|
+
'x-large': 968
|
|
19
|
+
},
|
|
20
|
+
defaultValue: 'medium'
|
|
21
|
+
};
|
|
22
|
+
exports.width = width;
|
|
23
|
+
var gutter = 60;
|
|
24
|
+
exports.gutter = gutter;
|
|
25
|
+
var gridSize = (0, _constants.gridSize)();
|
|
26
|
+
var borderRadius = (0, _constants.borderRadius)();
|
|
27
|
+
exports.borderRadius = borderRadius;
|
|
28
|
+
var verticalOffset = gridSize * 2;
|
|
29
|
+
exports.verticalOffset = verticalOffset;
|
|
30
|
+
var padding = gridSize * 3;
|
|
31
|
+
exports.padding = padding;
|
|
32
|
+
var footerItemGap = gridSize;
|
|
33
|
+
exports.footerItemGap = footerItemGap;
|
|
34
|
+
var titleIconMargin = gridSize;
|
|
35
|
+
exports.titleIconMargin = titleIconMargin;
|
|
36
|
+
var keylineHeight = 2;
|
|
37
|
+
exports.keylineHeight = keylineHeight;
|
|
38
|
+
var keylineColor = _colors.N30;
|
|
39
|
+
exports.keylineColor = keylineColor;
|
|
40
|
+
var textColor = (0, _colors.text)();
|
|
41
|
+
exports.textColor = textColor;
|
|
42
|
+
var focusOutlineColor = _colors.N800;
|
|
43
|
+
exports.focusOutlineColor = focusOutlineColor;
|
|
44
|
+
var iconColor = {
|
|
45
|
+
danger: _colors.R400,
|
|
46
|
+
warning: _colors.Y400
|
|
47
|
+
};
|
|
48
|
+
exports.iconColor = iconColor;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ScrollContext = exports.ModalContext = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
var ModalContext = /*#__PURE__*/(0, _react.createContext)(null);
|
|
11
|
+
exports.ModalContext = ModalContext;
|
|
12
|
+
var ScrollContext = /*#__PURE__*/(0, _react.createContext)(null);
|
|
13
|
+
exports.ScrollContext = ScrollContext;
|
|
@@ -0,0 +1,110 @@
|
|
|
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 = useModalStack;
|
|
9
|
+
|
|
10
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
|
+
|
|
12
|
+
var _react = require("react");
|
|
13
|
+
|
|
14
|
+
var _useLazyCallback = _interopRequireDefault(require("@atlaskit/ds-lib/use-lazy-callback"));
|
|
15
|
+
|
|
16
|
+
var _usePreviousValue = _interopRequireDefault(require("@atlaskit/ds-lib/use-previous-value"));
|
|
17
|
+
|
|
18
|
+
var _useStateRef3 = _interopRequireDefault(require("@atlaskit/ds-lib/use-state-ref"));
|
|
19
|
+
|
|
20
|
+
var _exitingPersistence = require("@atlaskit/motion/exiting-persistence");
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* ________________________________________________
|
|
24
|
+
* | MAJOR VERSIONS WILL NOT KNOW ABOUT EACH OTHER! |
|
|
25
|
+
* ------------------------------------------------
|
|
26
|
+
*
|
|
27
|
+
* An array which holds references to all currently open modal dialogs.
|
|
28
|
+
* This will only work for modal dialogs of the same major version,
|
|
29
|
+
* as the reference will be different between them.
|
|
30
|
+
*
|
|
31
|
+
* E.g. V11 won't know about any from V12.
|
|
32
|
+
*/
|
|
33
|
+
var modalStackRegister = [];
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Returns the position of the calling modal dialog in the modal dialog stack.
|
|
37
|
+
* Stack index of `0` is the highest position in the stack,
|
|
38
|
+
* with every higher number being behind in the stack.
|
|
39
|
+
*/
|
|
40
|
+
function useModalStack(_ref) {
|
|
41
|
+
var onStackChange = _ref.onStackChange;
|
|
42
|
+
|
|
43
|
+
var _useExitingPersistenc = (0, _exitingPersistence.useExitingPersistence)(),
|
|
44
|
+
isExiting = _useExitingPersistenc.isExiting;
|
|
45
|
+
|
|
46
|
+
var _useStateRef = (0, _useStateRef3.default)(0),
|
|
47
|
+
_useStateRef2 = (0, _slicedToArray2.default)(_useStateRef, 2),
|
|
48
|
+
stackIndexRef = _useStateRef2[0],
|
|
49
|
+
setStackIndex = _useStateRef2[1];
|
|
50
|
+
|
|
51
|
+
var currentStackIndex = stackIndexRef.current;
|
|
52
|
+
var previousStackIndex = (0, _usePreviousValue.default)(stackIndexRef.current); // We want to ensure this function **never changes** during the lifecycle of this component.
|
|
53
|
+
// This is why it's assigned to a ref and not in a useMemo/useCallback.
|
|
54
|
+
|
|
55
|
+
var updateStack = (0, _useLazyCallback.default)(function () {
|
|
56
|
+
var newStackIndex = modalStackRegister.indexOf(updateStack); // We access the stack index ref instead of state because this closure will always only
|
|
57
|
+
// have the initial state and not any of the later values.
|
|
58
|
+
|
|
59
|
+
if (stackIndexRef.current !== newStackIndex) {
|
|
60
|
+
setStackIndex(newStackIndex);
|
|
61
|
+
stackIndexRef.current = newStackIndex;
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
(0, _react.useEffect)(function () {
|
|
65
|
+
var currentStackIndex = modalStackRegister.indexOf(updateStack);
|
|
66
|
+
|
|
67
|
+
if (!isExiting && currentStackIndex === -1) {
|
|
68
|
+
// We are opening the modal dialog.
|
|
69
|
+
// Add ourselves to the modal stack register!
|
|
70
|
+
modalStackRegister.unshift(updateStack);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (isExiting && currentStackIndex !== -1) {
|
|
74
|
+
// We are closing the modal dialog using a wrapping modal transition component.
|
|
75
|
+
// Remove ourselves from the modal stack register!
|
|
76
|
+
// NOTE: Modal dialogs that don't have a wrapping modal transition component won't flow through here!
|
|
77
|
+
// For that scenario we cleanup when the component unmounts.
|
|
78
|
+
modalStackRegister.splice(currentStackIndex, 1);
|
|
79
|
+
} // Fire all registered modal dialogs to update their position in the stack.
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
modalStackRegister.forEach(function (cb) {
|
|
83
|
+
return cb();
|
|
84
|
+
});
|
|
85
|
+
}, [updateStack, isExiting]);
|
|
86
|
+
(0, _react.useEffect)(function () {
|
|
87
|
+
return function () {
|
|
88
|
+
// Final cleanup just in case this modal dialog did not have a wrapping modal transition.
|
|
89
|
+
var currentStackIndex = modalStackRegister.indexOf(updateStack);
|
|
90
|
+
|
|
91
|
+
if (currentStackIndex !== -1) {
|
|
92
|
+
modalStackRegister.splice(currentStackIndex, 1);
|
|
93
|
+
modalStackRegister.forEach(function (cb) {
|
|
94
|
+
return cb();
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
}, [updateStack]);
|
|
99
|
+
(0, _react.useEffect)(function () {
|
|
100
|
+
if (previousStackIndex === undefined) {
|
|
101
|
+
// Initial case that we don't need to notify about.
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (previousStackIndex !== currentStackIndex) {
|
|
106
|
+
onStackChange(currentStackIndex);
|
|
107
|
+
}
|
|
108
|
+
}, [onStackChange, previousStackIndex, currentStackIndex]);
|
|
109
|
+
return currentStackIndex;
|
|
110
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = useOnMotionFinish;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
function useOnMotionFinish(_ref) {
|
|
11
|
+
var onOpenComplete = _ref.onOpenComplete,
|
|
12
|
+
onCloseComplete = _ref.onCloseComplete;
|
|
13
|
+
var motionRef = (0, _react.useRef)(null);
|
|
14
|
+
var onMotionFinish = (0, _react.useCallback)(function (state) {
|
|
15
|
+
if (state === 'entering' && onOpenComplete) {
|
|
16
|
+
onOpenComplete(motionRef.current, true);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if (state === 'exiting' && onCloseComplete) {
|
|
20
|
+
onCloseComplete(motionRef.current);
|
|
21
|
+
}
|
|
22
|
+
}, [onOpenComplete, onCloseComplete]);
|
|
23
|
+
return [motionRef, onMotionFinish];
|
|
24
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
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 = usePreventProgrammaticScroll;
|
|
9
|
+
|
|
10
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
|
+
|
|
12
|
+
var _react = require("react");
|
|
13
|
+
|
|
14
|
+
var _useWindowEvent = _interopRequireDefault(require("@atlaskit/ds-lib/use-window-event"));
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Returns how far the body is scrolled from the top of the viewport.
|
|
18
|
+
*
|
|
19
|
+
* ____
|
|
20
|
+
* ||____|| <-- overflow
|
|
21
|
+
* | | <-- viewport
|
|
22
|
+
* |____|
|
|
23
|
+
*
|
|
24
|
+
* Scroll distance is the height of overflow outside the viewport.
|
|
25
|
+
*/
|
|
26
|
+
function getScrollDistance() {
|
|
27
|
+
var _document$documentEle, _document$body;
|
|
28
|
+
|
|
29
|
+
return window.pageYOffset || ((_document$documentEle = document.documentElement) === null || _document$documentEle === void 0 ? void 0 : _document$documentEle.scrollTop) || ((_document$body = document.body) === null || _document$body === void 0 ? void 0 : _document$body.scrollTop) || 0;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Prevents programatic scrolling of the viewport with `scrollIntoView`.
|
|
33
|
+
* Should be used in conjunction with a scroll lock to prevent a user from scrolling.
|
|
34
|
+
*
|
|
35
|
+
* @returns scroll top offset of the viewport
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
function usePreventProgrammaticScroll() {
|
|
40
|
+
var _useState = (0, _react.useState)(0),
|
|
41
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
42
|
+
scrollTopOffset = _useState2[0],
|
|
43
|
+
setScrollTopOffset = _useState2[1];
|
|
44
|
+
|
|
45
|
+
(0, _react.useLayoutEffect)(function () {
|
|
46
|
+
setScrollTopOffset(getScrollDistance());
|
|
47
|
+
}, []);
|
|
48
|
+
var onWindowScroll = (0, _react.useCallback)(function () {
|
|
49
|
+
if (getScrollDistance() !== scrollTopOffset) {
|
|
50
|
+
window.scrollTo(window.pageXOffset, scrollTopOffset);
|
|
51
|
+
}
|
|
52
|
+
}, [scrollTopOffset]);
|
|
53
|
+
(0, _useWindowEvent.default)('scroll', onWindowScroll);
|
|
54
|
+
return scrollTopOffset;
|
|
55
|
+
}
|