@atlaskit/modal-dialog 14.2.12 → 14.3.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 (51) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/cjs/full-screen.js +87 -0
  3. package/dist/cjs/index.js +2 -2
  4. package/dist/cjs/internal/components/modal-dialog.js +16 -8
  5. package/dist/cjs/{modal-wrapper.js → internal/components/modal-wrapper.js} +10 -8
  6. package/dist/cjs/internal/components/positioner.compiled.css +1 -1
  7. package/dist/cjs/internal/components/positioner.js +26 -14
  8. package/dist/cjs/internal/types.js +5 -0
  9. package/dist/cjs/modal-body.js +16 -18
  10. package/dist/cjs/modal-dialog.js +16 -0
  11. package/dist/es2019/full-screen.js +50 -0
  12. package/dist/es2019/index.js +1 -1
  13. package/dist/es2019/internal/components/modal-dialog.js +15 -8
  14. package/dist/es2019/{modal-wrapper.js → internal/components/modal-wrapper.js} +10 -8
  15. package/dist/es2019/internal/components/positioner.js +24 -4
  16. package/dist/es2019/internal/types.js +1 -0
  17. package/dist/es2019/modal-body.js +15 -18
  18. package/dist/es2019/modal-dialog.js +9 -0
  19. package/dist/esm/full-screen.js +50 -0
  20. package/dist/esm/index.js +1 -1
  21. package/dist/esm/internal/components/modal-dialog.js +16 -8
  22. package/dist/esm/{modal-wrapper.js → internal/components/modal-wrapper.js} +10 -8
  23. package/dist/esm/internal/components/positioner.compiled.css +1 -1
  24. package/dist/esm/internal/components/positioner.js +26 -13
  25. package/dist/esm/internal/types.js +1 -0
  26. package/dist/esm/modal-body.js +16 -18
  27. package/dist/esm/modal-dialog.js +9 -0
  28. package/dist/types/full-screen.d.ts +10 -0
  29. package/dist/types/index.d.ts +1 -1
  30. package/dist/types/internal/components/modal-dialog.d.ts +2 -10
  31. package/dist/types/{modal-wrapper.d.ts → internal/components/modal-wrapper.d.ts} +4 -3
  32. package/dist/types/internal/components/positioner.d.ts +1 -0
  33. package/dist/types/internal/context.d.ts +4 -0
  34. package/dist/types/internal/types.d.ts +16 -0
  35. package/dist/types/modal-body.d.ts +4 -0
  36. package/dist/types/modal-dialog.d.ts +4 -0
  37. package/dist/types-ts4.5/full-screen.d.ts +10 -0
  38. package/dist/types-ts4.5/index.d.ts +1 -1
  39. package/dist/types-ts4.5/internal/components/modal-dialog.d.ts +2 -10
  40. package/dist/types-ts4.5/{modal-wrapper.d.ts → internal/components/modal-wrapper.d.ts} +4 -3
  41. package/dist/types-ts4.5/internal/components/positioner.d.ts +1 -0
  42. package/dist/types-ts4.5/internal/context.d.ts +4 -0
  43. package/dist/types-ts4.5/internal/types.d.ts +16 -0
  44. package/dist/types-ts4.5/modal-body.d.ts +4 -0
  45. package/dist/types-ts4.5/modal-dialog.d.ts +4 -0
  46. package/full-screen/package.json +17 -0
  47. package/modal-dialog/package.json +5 -5
  48. package/package.json +7 -6
  49. /package/dist/cjs/{modal-wrapper.compiled.css → internal/components/modal-wrapper.compiled.css} +0 -0
  50. /package/dist/es2019/{modal-wrapper.compiled.css → internal/components/modal-wrapper.compiled.css} +0 -0
  51. /package/dist/esm/{modal-wrapper.compiled.css → internal/components/modal-wrapper.compiled.css} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @atlaskit/modal-dialog
2
2
 
3
+ ## 14.3.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#173162](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/173162)
8
+ [`a3b23b79f4d68`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/a3b23b79f4d68) -
9
+ Adds a new `FullScreenModalDialog` component which is exposed behind the `/full-screen`
10
+ entrypoint.
11
+
12
+ ### Patch Changes
13
+
14
+ - Updated dependencies
15
+
3
16
  ## 14.2.12
4
17
 
5
18
  ### Patch Changes
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.FullScreenModalDialog = FullScreenModalDialog;
8
+ Object.defineProperty(exports, "ModalBody", {
9
+ enumerable: true,
10
+ get: function get() {
11
+ return _modalBody.default;
12
+ }
13
+ });
14
+ Object.defineProperty(exports, "ModalFooter", {
15
+ enumerable: true,
16
+ get: function get() {
17
+ return _modalFooter.default;
18
+ }
19
+ });
20
+ Object.defineProperty(exports, "ModalHeader", {
21
+ enumerable: true,
22
+ get: function get() {
23
+ return _modalHeader.default;
24
+ }
25
+ });
26
+ Object.defineProperty(exports, "ModalTitle", {
27
+ enumerable: true,
28
+ get: function get() {
29
+ return _modalTitle.default;
30
+ }
31
+ });
32
+ Object.defineProperty(exports, "ModalTransition", {
33
+ enumerable: true,
34
+ get: function get() {
35
+ return _modalTransition.default;
36
+ }
37
+ });
38
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
39
+ var _react = _interopRequireDefault(require("react"));
40
+ var _modalWrapper = _interopRequireDefault(require("./internal/components/modal-wrapper"));
41
+ var _modalTransition = _interopRequireDefault(require("./modal-transition"));
42
+ var _modalHeader = _interopRequireDefault(require("./modal-header"));
43
+ var _modalTitle = _interopRequireDefault(require("./modal-title"));
44
+ var _modalBody = _interopRequireDefault(require("./modal-body"));
45
+ var _modalFooter = _interopRequireDefault(require("./modal-footer"));
46
+ function FullScreenModalDialog(props) {
47
+ return /*#__PURE__*/_react.default.createElement(_modalWrapper.default
48
+ // eslint-disable-next-line @repo/internal/react/no-unsafe-spread-props
49
+ , (0, _extends2.default)({}, props, {
50
+ /**
51
+ * Making this an internal-only prop and exposing it through a facade
52
+ * component so that we can keep public types simple.
53
+ *
54
+ * Otherwise we need complex conditional types that are harder to
55
+ * understand / maintain and aren't actually any better for consumers.
56
+ */
57
+ isFullScreen: true
58
+ /**
59
+ * Setting width and height to 100% because the `isFullScreen` prop just
60
+ * removes the spacing around the modal. We still need to set the size to
61
+ * be 100%.
62
+ *
63
+ * Intentionally reusing the existing internals as much as possible to
64
+ * keep complexity low and avoid duplication. It also makes the fullscreen
65
+ * changes easier to remove.
66
+ */,
67
+ width: "100%",
68
+ height: "100%"
69
+ /**
70
+ * Full screen modals only support body scrolling, so that the header
71
+ * and close button will always stay visible.
72
+ */,
73
+ shouldScrollInViewport: false
74
+ /**
75
+ * This prop is a noop for fullscreen modals, so we aren't exposing it to consumers.
76
+ * Using `false` internally to avoid potential bugs.
77
+ */,
78
+ shouldCloseOnOverlayClick: false
79
+ /**
80
+ * The blanket is only briefly visible for fullscreen modals when fading in,
81
+ * but provides a bit more of a visual cue that it has appeared on top.
82
+ *
83
+ * We don't want consumers to disable it.
84
+ */,
85
+ isBlanketHidden: false
86
+ }));
87
+ }
package/dist/cjs/index.js CHANGED
@@ -43,7 +43,7 @@ Object.defineProperty(exports, "ModalTransition", {
43
43
  Object.defineProperty(exports, "default", {
44
44
  enumerable: true,
45
45
  get: function get() {
46
- return _modalWrapper.default;
46
+ return _modalDialog.default;
47
47
  }
48
48
  });
49
49
  Object.defineProperty(exports, "useModal", {
@@ -52,7 +52,7 @@ Object.defineProperty(exports, "useModal", {
52
52
  return _hooks.useModal;
53
53
  }
54
54
  });
55
- var _modalWrapper = _interopRequireDefault(require("./modal-wrapper"));
55
+ var _modalDialog = _interopRequireDefault(require("./modal-dialog"));
56
56
  var _modalTransition = _interopRequireDefault(require("./modal-transition"));
57
57
  var _modalHeader = _interopRequireDefault(require("./modal-header"));
58
58
  var _modalTitle = _interopRequireDefault(require("./modal-title"));
@@ -30,7 +30,8 @@ var _positioner = _interopRequireDefault(require("./positioner"));
30
30
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
31
31
  var LOCAL_CURRENT_SURFACE_CSS_VAR = '--ds-elevation-surface-current';
32
32
  var dialogStyles = {
33
- root: "_16jlidpf _1o9zkb7n _i0dl1wug _1e0c1txw _1bsb1osq _p12fauwl _4t3i1osq _1tkeidpf _c71l1kxc _2lx21bp4 _bfhk1bhr _syaz1fxt _1q1l1bhr _lcxv1wug _1mq81kw7 _m01u1kw7 _1dg11kw7 _mizu1p6i _1ah31bk5 _ra3xnqa1 _128m1bk5 _1cvmnqa1 _4davt94y _epkx1sit _we1i1kw7 _zg7p1cd0 _yakv1kw7 _4lht1kw7 _1xlt6m9r"
33
+ root: "_16jlidpf _1o9zkb7n _i0dl1wug _1e0c1txw _1bsb1osq _p12fauwl _4t3i1osq _1tkeidpf _c71l1kxc _2lx21bp4 _bfhk1bhr _syaz1fxt _1q1l1bhr _lcxv1wug _1mq81kw7 _m01u1kw7 _1dg11kw7 _mizu1p6i _1ah31bk5 _ra3xnqa1 _128m1bk5 _1cvmnqa1 _4davt94y _we1i1kw7 _zg7p1cd0 _yakv1kw7 _4lht1kw7 _1xlt6m9r",
34
+ borderRadius: "_epkx1sit"
34
35
  };
35
36
  var viewportScrollStyles = null;
36
37
  var bodyScrollStyles = null;
@@ -49,7 +50,9 @@ var ModalDialog = function ModalDialog(props) {
49
50
  hasProvidedOnClose = props.hasProvidedOnClose,
50
51
  children = props.children,
51
52
  label = props.label,
52
- testId = props.testId;
53
+ testId = props.testId,
54
+ _props$isFullScreen = props.isFullScreen,
55
+ isFullScreen = _props$isFullScreen === void 0 ? false : _props$isFullScreen;
53
56
  var id = (0, _useId.useId)();
54
57
  var titleId = "modal-dialog-title-".concat(id);
55
58
  var defaultTestId = testId || 'modal-dialog';
@@ -79,9 +82,10 @@ var ModalDialog = function ModalDialog(props) {
79
82
  testId: defaultTestId,
80
83
  titleId: titleId,
81
84
  onClose: onClose,
82
- hasProvidedOnClose: hasProvidedOnClose
85
+ hasProvidedOnClose: hasProvidedOnClose,
86
+ isFullScreen: isFullScreen
83
87
  };
84
- }, [defaultTestId, titleId, onClose, hasProvidedOnClose]);
88
+ }, [defaultTestId, titleId, onClose, hasProvidedOnClose, isFullScreen]);
85
89
  (0, _layering.useCloseOnEscapePress)({
86
90
  onClose: onClose,
87
91
  isDisabled: !shouldCloseOnEscapePress
@@ -91,13 +95,17 @@ var ModalDialog = function ModalDialog(props) {
91
95
  return /*#__PURE__*/React.createElement(_positioner.default, {
92
96
  stackIndex: stackIndex,
93
97
  shouldScrollInViewport: shouldScrollInViewport,
94
- testId: defaultTestId
98
+ testId: defaultTestId,
99
+ isFullScreen: isFullScreen
95
100
  }, /*#__PURE__*/React.createElement(_context.ModalContext.Provider, {
96
101
  value: modalDialogContext
97
102
  }, /*#__PURE__*/React.createElement(_context.ScrollContext.Provider, {
98
103
  value: shouldScrollInViewport
99
- }, /*#__PURE__*/React.createElement(_fadeIn.default, {
100
- entranceDirection: "bottom",
104
+ }, /*#__PURE__*/React.createElement(_fadeIn.default
105
+ /**
106
+ * We don't want a 'slide in' for the full screen modals.
107
+ */, {
108
+ entranceDirection: isFullScreen ? undefined : 'bottom',
101
109
  onFinish: onMotionFinish
102
110
  }, function (bottomFadeInProps) {
103
111
  return /*#__PURE__*/React.createElement("section", (0, _extends2.default)({}, bottomFadeInProps, {
@@ -110,7 +118,7 @@ var ModalDialog = function ModalDialog(props) {
110
118
  '--modal-dialog-height': (0, _utils.dialogHeight)(height)
111
119
  },
112
120
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop
113
- className: (0, _runtime.ax)([dialogStyles.root, shouldScrollInViewport ? "_1tke1kxc _c71lglyw _8kn617ks" : "_cbiz17ks _bolh1kw7", bottomFadeInProps.className]),
121
+ className: (0, _runtime.ax)([dialogStyles.root, !isFullScreen && dialogStyles.borderRadius, shouldScrollInViewport ? "_1tke1kxc _c71lglyw _8kn617ks" : "_cbiz17ks _bolh1kw7", bottomFadeInProps.className]),
114
122
  role: "dialog",
115
123
  "aria-labelledby": label ? undefined : titleId,
116
124
  "data-testid": defaultTestId,
@@ -21,9 +21,9 @@ var _layering = require("@atlaskit/layering");
21
21
  var _fadeIn = _interopRequireDefault(require("@atlaskit/motion/fade-in"));
22
22
  var _portal = _interopRequireDefault(require("@atlaskit/portal"));
23
23
  var _constants = require("@atlaskit/theme/constants");
24
- var _modalDialog = _interopRequireDefault(require("./internal/components/modal-dialog"));
25
- var _useModalStack = _interopRequireDefault(require("./internal/hooks/use-modal-stack"));
26
- var _usePreventProgrammaticScroll = _interopRequireDefault(require("./internal/hooks/use-prevent-programmatic-scroll"));
24
+ var _useModalStack = _interopRequireDefault(require("../hooks/use-modal-stack"));
25
+ var _usePreventProgrammaticScroll = _interopRequireDefault(require("../hooks/use-prevent-programmatic-scroll"));
26
+ var _modalDialog = _interopRequireDefault(require("./modal-dialog"));
27
27
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
28
28
  var fillScreenStyles = null;
29
29
  var allowlistElements = function allowlistElements(element, callback) {
@@ -49,7 +49,7 @@ var allowlistElements = function allowlistElements(element, callback) {
49
49
  * - [Code](https://atlassian.design/components/modal-dialog/code)
50
50
  * - [Usage](https://atlassian.design/components/modal-dialog/usage)
51
51
  */
52
- var ModalWrapper = function ModalWrapper(props) {
52
+ var InternalModalWrapper = function InternalModalWrapper(props) {
53
53
  var _props$autoFocus = props.autoFocus,
54
54
  autoFocus = _props$autoFocus === void 0 ? true : _props$autoFocus,
55
55
  focusLockAllowlist = props.focusLockAllowlist,
@@ -72,7 +72,8 @@ var ModalWrapper = function ModalWrapper(props) {
72
72
  onCloseComplete = props.onCloseComplete,
73
73
  onOpenComplete = props.onOpenComplete,
74
74
  label = props.label,
75
- testId = props.testId;
75
+ testId = props.testId,
76
+ isFullScreen = props.isFullScreen;
76
77
  var calculatedStackIndex = (0, _useModalStack.default)({
77
78
  onStackChange: onStackChange
78
79
  });
@@ -86,7 +87,7 @@ var ModalWrapper = function ModalWrapper(props) {
86
87
  action: 'closed',
87
88
  componentName: 'modalDialog',
88
89
  packageName: "@atlaskit/modal-dialog",
89
- packageVersion: "14.2.11"
90
+ packageVersion: "14.2.12"
90
91
  });
91
92
  var onBlanketClicked = (0, _react.useCallback)(function (e) {
92
93
  if (shouldCloseOnOverlayClick) {
@@ -115,7 +116,8 @@ var ModalWrapper = function ModalWrapper(props) {
115
116
  width: width,
116
117
  onCloseComplete: onCloseComplete,
117
118
  onOpenComplete: onOpenComplete,
118
- hasProvidedOnClose: Boolean(providedOnClose)
119
+ hasProvidedOnClose: Boolean(providedOnClose),
120
+ isFullScreen: isFullScreen
119
121
  }, children));
120
122
  var returnFocus = true;
121
123
  var onDeactivation;
@@ -146,4 +148,4 @@ var ModalWrapper = function ModalWrapper(props) {
146
148
  }, /*#__PURE__*/React.createElement(_reactScrolllock.default, null), shouldScrollInViewport ? /*#__PURE__*/React.createElement(_reactScrolllock.TouchScrollable, null, modalDialogWithBlanket) : modalDialogWithBlanket));
147
149
  })));
148
150
  };
149
- var _default = exports.default = ModalWrapper;
151
+ var _default = exports.default = InternalModalWrapper;
@@ -13,4 +13,4 @@
13
13
  ._t9ec1b95{transform:translateY(var(--modal-dialog-translate-y))}
14
14
  ._t9ecglyw{transform:none}
15
15
  @media (prefers-reduced-motion:reduce){._1bumglyw{animation:none}._sedtglyw{transition:none}}
16
- @media (min-width:30rem){._1leth4k2{margin:var(--_wekiuq)}._eoawglyw{pointer-events:none}._we1i18uh{max-width:calc(100vw - 90pt)}._e8uozwhf{max-height:calc(100vh - 119px)}._y1k5stnw{position:absolute}._5ee4up15{inset-block-start:var(--_1v97vzp)}._1urridpf{inset-inline-end:0}._1juqidpf{inset-inline-start:0}._yakv1wug{margin-inline-end:auto}._4lht1wug{margin-inline-start:auto}}
16
+ @media (min-width:30rem){._1sg41wqb{margin-top:60px}._maxs1wug{margin-right:auto}._1jvh1wqb{margin-bottom:60px}._1uca1wug{margin-left:auto}._eoawglyw{pointer-events:none}._we1i18uh{max-width:calc(100vw - 90pt)}._e8uozwhf{max-height:calc(100vh - 119px)}._y1k5stnw{position:absolute}._5ee41wqb{inset-block-start:60px}._1urridpf{inset-inline-end:0}._1juqidpf{inset-inline-start:0}._yakv1wug{margin-inline-end:auto}._4lht1wug{margin-inline-start:auto}}
@@ -1,7 +1,6 @@
1
1
  /* positioner.tsx generated by @compiled/babel-plugin v0.36.1 */
2
2
  "use strict";
3
3
 
4
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
4
  var _typeof = require("@babel/runtime/helpers/typeof");
6
5
  Object.defineProperty(exports, "__esModule", {
7
6
  value: true
@@ -10,42 +9,55 @@ exports.default = void 0;
10
9
  require("./positioner.compiled.css");
11
10
  var React = _interopRequireWildcard(require("react"));
12
11
  var _runtime = require("@compiled/react/runtime");
13
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
14
12
  var _curves = require("@atlaskit/motion/curves");
15
13
  var _durations = require("@atlaskit/motion/durations");
16
14
  var _constants = require("@atlaskit/theme/constants");
17
15
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
18
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
19
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
20
16
  var gutter = 60;
21
17
  var maxWidthDimensions = "calc(100vw - ".concat(gutter * 2, "px)");
22
18
  var maxHeightDimensions = "calc(100vh - ".concat(gutter * 2 - 1, "px)");
23
19
 
24
20
  // Flex and min-content are set to constrain the height of the body and support multi-column scrolling experiences
25
21
  var positionerStyles = null;
26
- var viewportScrollStyles = null;
27
- var bodyScrollStyles = null;
22
+ var scrollStyles = {
23
+ viewport: "_4t3i1wug _kqswh2mm _1sg41wqb _maxs1wug _1jvh1wqb _1uca1wug _eoawglyw",
24
+ body: "_we1i18uh _e8uozwhf _y1k5stnw _5ee41wqb _1urridpf _1juqidpf _yakv1wug _4lht1wug _eoawglyw",
25
+ fullScreen: ""
26
+ };
28
27
  var stackTransitionStyles = null;
29
28
  var stackTransformStyles = null;
30
29
  var stackIdleStyles = null;
30
+ function getScrollBehavior(_ref) {
31
+ var isFullScreen = _ref.isFullScreen,
32
+ shouldScrollInViewport = _ref.shouldScrollInViewport;
33
+ if (isFullScreen) {
34
+ return 'fullScreen';
35
+ }
36
+ if (shouldScrollInViewport) {
37
+ return 'viewport';
38
+ }
39
+ return 'body';
40
+ }
31
41
  var Positioner = function Positioner(props) {
32
42
  var children = props.children,
33
43
  stackIndex = props.stackIndex,
34
44
  shouldScrollInViewport = props.shouldScrollInViewport,
35
- testId = props.testId;
45
+ testId = props.testId,
46
+ isFullScreen = props.isFullScreen;
47
+ var scrollBehavior = getScrollBehavior({
48
+ isFullScreen: isFullScreen,
49
+ shouldScrollInViewport: shouldScrollInViewport
50
+ });
36
51
  return /*#__PURE__*/React.createElement("div", {
37
- "data-testid": testId && "".concat(testId, "--positioner"),
38
- className: (0, _runtime.ax)(["_1e0c1txw _1bsb1osq _p12f1osq _4t3i1osq _kqsw1n9t _1pby16oo _2lx21bp4 _152tidpf _1e02idpf", "_k8m01e03 _1bumglyw _sedtglyw", stackIndex > 0 ? "_t9ec1b95" : "_t9ecglyw", shouldScrollInViewport ? "_4t3i1wug _kqswh2mm _1leth4k2 _eoawglyw" : "_we1i18uh _e8uozwhf _y1k5stnw _5ee4up15 _1urridpf _1juqidpf _yakv1wug _4lht1wug _eoawglyw"]),
39
- style: _objectSpread(_objectSpread({}, {
52
+ style: {
40
53
  '--modal-dialog-translate-y': "calc(".concat(stackIndex, "px * ", "var(--ds-space-100, 8px)", ")"),
41
54
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values -- Ignored via go/DSP-18766
42
55
  transitionDuration: "".concat(_durations.durations.medium, "ms"),
43
56
  // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop
44
57
  transitionTimingFunction: _curves.easeInOut
45
- }), {}, {
46
- "--_wekiuq": (0, _runtime.ix)("".concat(gutter, "px auto")),
47
- "--_1v97vzp": (0, _runtime.ix)("".concat(gutter, "px"))
48
- })
58
+ },
59
+ "data-testid": testId && "".concat(testId, "--positioner"),
60
+ className: (0, _runtime.ax)(["_1e0c1txw _1bsb1osq _p12f1osq _4t3i1osq _kqsw1n9t _1pby16oo _2lx21bp4 _152tidpf _1e02idpf", "_k8m01e03 _1bumglyw _sedtglyw", stackIndex > 0 ? "_t9ec1b95" : "_t9ecglyw", scrollStyles[scrollBehavior]])
49
61
  }, children);
50
62
  };
51
63
 
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -14,21 +14,12 @@ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
14
14
  var _hooks = require("./hooks");
15
15
  var _scrollContainer = _interopRequireDefault(require("./internal/components/scroll-container"));
16
16
  var _useScroll = _interopRequireDefault(require("./internal/hooks/use-scroll"));
17
- var bodyStyles = null;
18
- var fontStyles = null;
19
-
20
- /**
21
- * Adding the padding here avoids cropping the keyline on its sides.
22
- * The combined vertical spacing is maintained by subtracting the
23
- * keyline height from header and footer using negative margins.
24
- */
25
- var bodyScrollStyles = null;
26
-
27
- /**
28
- * Keylines will not be shown if scrolling in viewport so we do
29
- * not account for them in this case.
30
- */
31
- var viewportScrollStyles = null;
17
+ var styles = {
18
+ root: "_16jlkb7n _1o9zkb7n _i0dl1wug",
19
+ font: "_11c82smr",
20
+ paddingBlock: "_1rjc1bk5",
21
+ paddingInline: "_18zr1ejb"
22
+ };
32
23
  /**
33
24
  * __Modal body__
34
25
  *
@@ -40,19 +31,26 @@ var viewportScrollStyles = null;
40
31
  */
41
32
  var ModalBody = function ModalBody(props) {
42
33
  var children = props.children,
43
- userDefinedTestId = props.testId;
34
+ userDefinedTestId = props.testId,
35
+ _props$hasInlinePaddi = props.hasInlinePadding,
36
+ hasInlinePadding = _props$hasInlinePaddi === void 0 ? true : _props$hasInlinePaddi;
44
37
  var _useModal = (0, _hooks.useModal)(),
45
38
  modalTestId = _useModal.testId;
46
39
  var shouldScrollInViewport = (0, _useScroll.default)();
47
40
  var testId = userDefinedTestId || modalTestId && "".concat(modalTestId, "--body");
48
41
  return shouldScrollInViewport ? /*#__PURE__*/_react.default.createElement("div", {
49
42
  "data-testid": testId,
50
- className: (0, _runtime.ax)(["_16jlkb7n _1o9zkb7n _i0dl1wug", "_18zr1ejb", (0, _platformFeatureFlags.fg)('platform_ads_explicit_font_styles') && "_11c82smr"])
43
+ className: (0, _runtime.ax)([styles.root, hasInlinePadding && styles.paddingInline, (0, _platformFeatureFlags.fg)('platform_ads_explicit_font_styles') && styles.font])
51
44
  }, children) : /*#__PURE__*/_react.default.createElement(_reactScrolllock.TouchScrollable, null, /*#__PURE__*/_react.default.createElement(_scrollContainer.default, {
52
45
  testId: userDefinedTestId || modalTestId
53
46
  }, /*#__PURE__*/_react.default.createElement("div", {
54
47
  "data-testid": testId,
55
- className: (0, _runtime.ax)(["_16jlkb7n _1o9zkb7n _i0dl1wug", "_1rjc1bk5 _18zr1ejb", (0, _platformFeatureFlags.fg)('platform_ads_explicit_font_styles') && "_11c82smr"])
48
+ className: (0, _runtime.ax)([styles.root,
49
+ /**
50
+ * Adding block padding for scroll keylines, which are only shown when the scrolling
51
+ * is on the container.
52
+ */
53
+ styles.paddingBlock, hasInlinePadding && styles.paddingInline, (0, _platformFeatureFlags.fg)('platform_ads_explicit_font_styles') && styles.font])
56
54
  }, children)));
57
55
  };
58
56
  var _default = exports.default = ModalBody;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = ModalWrapper;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _modalWrapper = _interopRequireDefault(require("./internal/components/modal-wrapper"));
11
+ function ModalWrapper(props) {
12
+ // eslint-disable-next-line @repo/internal/react/no-unsafe-spread-props
13
+ return /*#__PURE__*/_react.default.createElement(_modalWrapper.default, (0, _extends2.default)({}, props, {
14
+ isFullScreen: false
15
+ }));
16
+ }
@@ -0,0 +1,50 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import React from 'react';
3
+ import InternalModalWrapper from './internal/components/modal-wrapper';
4
+ export function FullScreenModalDialog(props) {
5
+ return /*#__PURE__*/React.createElement(InternalModalWrapper
6
+ // eslint-disable-next-line @repo/internal/react/no-unsafe-spread-props
7
+ , _extends({}, props, {
8
+ /**
9
+ * Making this an internal-only prop and exposing it through a facade
10
+ * component so that we can keep public types simple.
11
+ *
12
+ * Otherwise we need complex conditional types that are harder to
13
+ * understand / maintain and aren't actually any better for consumers.
14
+ */
15
+ isFullScreen: true
16
+ /**
17
+ * Setting width and height to 100% because the `isFullScreen` prop just
18
+ * removes the spacing around the modal. We still need to set the size to
19
+ * be 100%.
20
+ *
21
+ * Intentionally reusing the existing internals as much as possible to
22
+ * keep complexity low and avoid duplication. It also makes the fullscreen
23
+ * changes easier to remove.
24
+ */,
25
+ width: "100%",
26
+ height: "100%"
27
+ /**
28
+ * Full screen modals only support body scrolling, so that the header
29
+ * and close button will always stay visible.
30
+ */,
31
+ shouldScrollInViewport: false
32
+ /**
33
+ * This prop is a noop for fullscreen modals, so we aren't exposing it to consumers.
34
+ * Using `false` internally to avoid potential bugs.
35
+ */,
36
+ shouldCloseOnOverlayClick: false
37
+ /**
38
+ * The blanket is only briefly visible for fullscreen modals when fading in,
39
+ * but provides a bit more of a visual cue that it has appeared on top.
40
+ *
41
+ * We don't want consumers to disable it.
42
+ */,
43
+ isBlanketHidden: false
44
+ }));
45
+ }
46
+ export { default as ModalTransition } from './modal-transition';
47
+ export { default as ModalHeader } from './modal-header';
48
+ export { default as ModalTitle } from './modal-title';
49
+ export { default as ModalBody } from './modal-body';
50
+ export { default as ModalFooter } from './modal-footer';
@@ -1,4 +1,4 @@
1
- export { default } from './modal-wrapper';
1
+ export { default } from './modal-dialog';
2
2
  export { default as ModalTransition } from './modal-transition';
3
3
  export { default as ModalHeader } from './modal-header';
4
4
  export { default as ModalTitle } from './modal-title';
@@ -19,7 +19,8 @@ import { dialogHeight, dialogWidth } from '../utils';
19
19
  import Positioner from './positioner';
20
20
  const LOCAL_CURRENT_SURFACE_CSS_VAR = '--ds-elevation-surface-current';
21
21
  const dialogStyles = {
22
- root: "_16jlidpf _1o9zkb7n _i0dl1wug _1e0c1txw _1bsb1osq _p12fauwl _4t3i1osq _1tkeidpf _c71l1kxc _2lx21bp4 _bfhk1bhr _syaz1fxt _1q1l1bhr _lcxv1wug _1mq81kw7 _m01u1kw7 _1dg11kw7 _mizu1p6i _1ah31bk5 _ra3xnqa1 _128m1bk5 _1cvmnqa1 _4davt94y _epkx1sit _we1i1kw7 _zg7p1cd0 _yakv1kw7 _4lht1kw7 _1xlt6m9r"
22
+ root: "_16jlidpf _1o9zkb7n _i0dl1wug _1e0c1txw _1bsb1osq _p12fauwl _4t3i1osq _1tkeidpf _c71l1kxc _2lx21bp4 _bfhk1bhr _syaz1fxt _1q1l1bhr _lcxv1wug _1mq81kw7 _m01u1kw7 _1dg11kw7 _mizu1p6i _1ah31bk5 _ra3xnqa1 _128m1bk5 _1cvmnqa1 _4davt94y _we1i1kw7 _zg7p1cd0 _yakv1kw7 _4lht1kw7 _1xlt6m9r",
23
+ borderRadius: "_epkx1sit"
23
24
  };
24
25
  const viewportScrollStyles = null;
25
26
  const bodyScrollStyles = null;
@@ -37,7 +38,8 @@ const ModalDialog = props => {
37
38
  hasProvidedOnClose,
38
39
  children,
39
40
  label,
40
- testId
41
+ testId,
42
+ isFullScreen = false
41
43
  } = props;
42
44
  const id = useId();
43
45
  const titleId = `modal-dialog-title-${id}`;
@@ -64,8 +66,9 @@ const ModalDialog = props => {
64
66
  testId: defaultTestId,
65
67
  titleId,
66
68
  onClose,
67
- hasProvidedOnClose
68
- }), [defaultTestId, titleId, onClose, hasProvidedOnClose]);
69
+ hasProvidedOnClose,
70
+ isFullScreen
71
+ }), [defaultTestId, titleId, onClose, hasProvidedOnClose, isFullScreen]);
69
72
  useCloseOnEscapePress({
70
73
  onClose,
71
74
  isDisabled: !shouldCloseOnEscapePress
@@ -76,13 +79,17 @@ const ModalDialog = props => {
76
79
  return /*#__PURE__*/React.createElement(Positioner, {
77
80
  stackIndex: stackIndex,
78
81
  shouldScrollInViewport: shouldScrollInViewport,
79
- testId: defaultTestId
82
+ testId: defaultTestId,
83
+ isFullScreen: isFullScreen
80
84
  }, /*#__PURE__*/React.createElement(ModalContext.Provider, {
81
85
  value: modalDialogContext
82
86
  }, /*#__PURE__*/React.createElement(ScrollContext.Provider, {
83
87
  value: shouldScrollInViewport
84
- }, /*#__PURE__*/React.createElement(FadeIn, {
85
- entranceDirection: "bottom",
88
+ }, /*#__PURE__*/React.createElement(FadeIn
89
+ /**
90
+ * We don't want a 'slide in' for the full screen modals.
91
+ */, {
92
+ entranceDirection: isFullScreen ? undefined : 'bottom',
86
93
  onFinish: onMotionFinish
87
94
  }, bottomFadeInProps => /*#__PURE__*/React.createElement("section", _extends({}, bottomFadeInProps, {
88
95
  "aria-label": label,
@@ -94,7 +101,7 @@ const ModalDialog = props => {
94
101
  '--modal-dialog-height': dialogHeight(height)
95
102
  },
96
103
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop
97
- className: ax([dialogStyles.root, shouldScrollInViewport ? "_1tke1kxc _c71lglyw _8kn617ks" : "_cbiz17ks _bolh1kw7", bottomFadeInProps.className]),
104
+ className: ax([dialogStyles.root, !isFullScreen && dialogStyles.borderRadius, shouldScrollInViewport ? "_1tke1kxc _c71lglyw _8kn617ks" : "_cbiz17ks _bolh1kw7", bottomFadeInProps.className]),
98
105
  role: "dialog",
99
106
  "aria-labelledby": label ? undefined : titleId,
100
107
  "data-testid": defaultTestId,
@@ -13,9 +13,9 @@ import { Layering } from '@atlaskit/layering';
13
13
  import FadeIn from '@atlaskit/motion/fade-in';
14
14
  import Portal from '@atlaskit/portal';
15
15
  import { layers } from '@atlaskit/theme/constants';
16
- import ModalDialog from './internal/components/modal-dialog';
17
- import useModalStack from './internal/hooks/use-modal-stack';
18
- import usePreventProgrammaticScroll from './internal/hooks/use-prevent-programmatic-scroll';
16
+ import useModalStack from '../hooks/use-modal-stack';
17
+ import usePreventProgrammaticScroll from '../hooks/use-prevent-programmatic-scroll';
18
+ import ModalDialog from './modal-dialog';
19
19
  const fillScreenStyles = null;
20
20
  const allowlistElements = (element, callback) => {
21
21
  // Allow focus to reach elements outside the modal:
@@ -40,7 +40,7 @@ const allowlistElements = (element, callback) => {
40
40
  * - [Code](https://atlassian.design/components/modal-dialog/code)
41
41
  * - [Usage](https://atlassian.design/components/modal-dialog/usage)
42
42
  */
43
- const ModalWrapper = props => {
43
+ const InternalModalWrapper = props => {
44
44
  const {
45
45
  autoFocus = true,
46
46
  focusLockAllowlist,
@@ -58,7 +58,8 @@ const ModalWrapper = props => {
58
58
  onCloseComplete,
59
59
  onOpenComplete,
60
60
  label,
61
- testId
61
+ testId,
62
+ isFullScreen
62
63
  } = props;
63
64
  const calculatedStackIndex = useModalStack({
64
65
  onStackChange
@@ -73,7 +74,7 @@ const ModalWrapper = props => {
73
74
  action: 'closed',
74
75
  componentName: 'modalDialog',
75
76
  packageName: "@atlaskit/modal-dialog",
76
- packageVersion: "14.2.11"
77
+ packageVersion: "14.2.12"
77
78
  });
78
79
  const onBlanketClicked = useCallback(e => {
79
80
  if (shouldCloseOnOverlayClick) {
@@ -100,7 +101,8 @@ const ModalWrapper = props => {
100
101
  width: width,
101
102
  onCloseComplete: onCloseComplete,
102
103
  onOpenComplete: onOpenComplete,
103
- hasProvidedOnClose: Boolean(providedOnClose)
104
+ hasProvidedOnClose: Boolean(providedOnClose),
105
+ isFullScreen: isFullScreen
104
106
  }, children));
105
107
  let returnFocus = true;
106
108
  let onDeactivation;
@@ -129,4 +131,4 @@ const ModalWrapper = props => {
129
131
  whiteList: allowListCallback
130
132
  }, /*#__PURE__*/React.createElement(ScrollLock, null), shouldScrollInViewport ? /*#__PURE__*/React.createElement(TouchScrollable, null, modalDialogWithBlanket) : modalDialogWithBlanket)))));
131
133
  };
132
- export default ModalWrapper;
134
+ export default InternalModalWrapper;
@@ -11,18 +11,38 @@ const maxHeightDimensions = `calc(100vh - ${gutter * 2 - 1}px)`;
11
11
 
12
12
  // Flex and min-content are set to constrain the height of the body and support multi-column scrolling experiences
13
13
  const positionerStyles = null;
14
- const viewportScrollStyles = null;
15
- const bodyScrollStyles = null;
14
+ const scrollStyles = {
15
+ viewport: "_4t3i1wug _kqswh2mm _1sg41wqb _maxs1wug _1jvh1wqb _1uca1wug _eoawglyw",
16
+ body: "_we1i18uh _e8uozwhf _y1k5stnw _5ee41wqb _1urridpf _1juqidpf _yakv1wug _4lht1wug _eoawglyw",
17
+ fullScreen: ""
18
+ };
16
19
  const stackTransitionStyles = null;
17
20
  const stackTransformStyles = null;
18
21
  const stackIdleStyles = null;
22
+ function getScrollBehavior({
23
+ isFullScreen,
24
+ shouldScrollInViewport
25
+ }) {
26
+ if (isFullScreen) {
27
+ return 'fullScreen';
28
+ }
29
+ if (shouldScrollInViewport) {
30
+ return 'viewport';
31
+ }
32
+ return 'body';
33
+ }
19
34
  const Positioner = props => {
20
35
  const {
21
36
  children,
22
37
  stackIndex,
23
38
  shouldScrollInViewport,
24
- testId
39
+ testId,
40
+ isFullScreen
25
41
  } = props;
42
+ const scrollBehavior = getScrollBehavior({
43
+ isFullScreen,
44
+ shouldScrollInViewport
45
+ });
26
46
  return /*#__PURE__*/React.createElement("div", {
27
47
  style: {
28
48
  '--modal-dialog-translate-y': `calc(${stackIndex}px * ${"var(--ds-space-100, 8px)"})`,
@@ -32,7 +52,7 @@ const Positioner = props => {
32
52
  transitionTimingFunction: easeInOut
33
53
  },
34
54
  "data-testid": testId && `${testId}--positioner`,
35
- className: ax(["_1e0c1txw _1bsb1osq _p12f1osq _4t3i1osq _kqsw1n9t _1pby16oo _2lx21bp4 _152tidpf _1e02idpf", "_k8m01e03 _1bumglyw _sedtglyw", stackIndex > 0 ? "_t9ec1b95" : "_t9ecglyw", shouldScrollInViewport ? "_4t3i1wug _kqswh2mm _1sg41wqb _maxs1wug _1jvh1wqb _1uca1wug _eoawglyw" : "_we1i18uh _e8uozwhf _y1k5stnw _5ee41wqb _1urridpf _1juqidpf _yakv1wug _4lht1wug _eoawglyw"])
55
+ className: ax(["_1e0c1txw _1bsb1osq _p12f1osq _4t3i1osq _kqsw1n9t _1pby16oo _2lx21bp4 _152tidpf _1e02idpf", "_k8m01e03 _1bumglyw _sedtglyw", stackIndex > 0 ? "_t9ec1b95" : "_t9ecglyw", scrollStyles[scrollBehavior]])
36
56
  }, children);
37
57
  };
38
58
 
@@ -0,0 +1 @@
1
+ export {};