@contentful/f36-modal 4.0.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.
- package/LICENSE.md +7 -0
- package/README.md +6 -0
- package/dist/main.js +467 -0
- package/dist/main.js.map +1 -0
- package/dist/module.js +448 -0
- package/dist/module.js.map +1 -0
- package/dist/types.d.ts +186 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +41 -0
package/LICENSE.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
Copyright (c) 2018-present Contentful GmbH
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
4
|
+
|
|
5
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
6
|
+
|
|
7
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/README.md
ADDED
package/dist/main.js
ADDED
|
@@ -0,0 +1,467 @@
|
|
|
1
|
+
var $7x5iO$react = require("react");
|
|
2
|
+
var $7x5iO$reactmodal = require("react-modal");
|
|
3
|
+
var $7x5iO$contentfulf36core = require("@contentful/f36-core");
|
|
4
|
+
var $7x5iO$emotion = require("emotion");
|
|
5
|
+
var $7x5iO$contentfulf36icons = require("@contentful/f36-icons");
|
|
6
|
+
var $7x5iO$contentfulf36button = require("@contentful/f36-button");
|
|
7
|
+
var $7x5iO$contentfulf36typography = require("@contentful/f36-typography");
|
|
8
|
+
var $7x5iO$contentfulf36tokens = require("@contentful/f36-tokens");
|
|
9
|
+
var $7x5iO$reactdom = require("react-dom");
|
|
10
|
+
|
|
11
|
+
function $parcel$exportWildcard(dest, source) {
|
|
12
|
+
Object.keys(source).forEach(function(key) {
|
|
13
|
+
if (key === 'default' || key === '__esModule' || dest.hasOwnProperty(key)) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
Object.defineProperty(dest, key, {
|
|
18
|
+
enumerable: true,
|
|
19
|
+
get: function get() {
|
|
20
|
+
return source[key];
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
return dest;
|
|
26
|
+
}
|
|
27
|
+
function $parcel$export(e, n, v, s) {
|
|
28
|
+
Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
|
|
29
|
+
}
|
|
30
|
+
function $parcel$interopDefault(a) {
|
|
31
|
+
return a && a.__esModule ? a.default : a;
|
|
32
|
+
}
|
|
33
|
+
var $4eddba25b642b7ac$exports = {};
|
|
34
|
+
|
|
35
|
+
$parcel$export($4eddba25b642b7ac$exports, "Modal", () => $2132db66f9439432$export$2b77a92f1a5ad772);
|
|
36
|
+
$parcel$export($4eddba25b642b7ac$exports, "ModalConfirm", () => $657ddd6e4548962f$export$427af6990c8ff682);
|
|
37
|
+
$parcel$export($4eddba25b642b7ac$exports, "ModalContent", () => $66391c55bbcf9065$export$6da19a24bf249f17);
|
|
38
|
+
$parcel$export($4eddba25b642b7ac$exports, "ModalControls", () => $8b06e393320a8e77$export$c63fb08199be8e0e);
|
|
39
|
+
$parcel$export($4eddba25b642b7ac$exports, "ModalHeader", () => $2679bd8c144d3995$export$f50a68e3694789ee);
|
|
40
|
+
$parcel$export($4eddba25b642b7ac$exports, "ModalLauncher", () => $f6dfceab072669eb$export$e21b828b42c54a37);
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
function $2e9361382cc113aa$export$4bef00d568400c9b() {
|
|
53
|
+
return {
|
|
54
|
+
root: /*#__PURE__*/ $7x5iO$emotion.css({
|
|
55
|
+
position: 'relative',
|
|
56
|
+
padding: `${($parcel$interopDefault($7x5iO$contentfulf36tokens)).spacingM} ${($parcel$interopDefault($7x5iO$contentfulf36tokens)).spacingM} ${($parcel$interopDefault($7x5iO$contentfulf36tokens)).spacingM} ${($parcel$interopDefault($7x5iO$contentfulf36tokens)).spacingL}`,
|
|
57
|
+
borderRadius: `${($parcel$interopDefault($7x5iO$contentfulf36tokens)).borderRadiusMedium} ${($parcel$interopDefault($7x5iO$contentfulf36tokens)).borderRadiusMedium} 0 0`,
|
|
58
|
+
borderBottom: `1px solid ${($parcel$interopDefault($7x5iO$contentfulf36tokens)).gray300}`
|
|
59
|
+
}),
|
|
60
|
+
buttonContainer: /*#__PURE__*/ $7x5iO$emotion.css({
|
|
61
|
+
position: 'relative',
|
|
62
|
+
width: ($parcel$interopDefault($7x5iO$contentfulf36tokens)).spacing2Xl,
|
|
63
|
+
height: ($parcel$interopDefault($7x5iO$contentfulf36tokens)).spacingL,
|
|
64
|
+
button: {
|
|
65
|
+
position: 'absolute',
|
|
66
|
+
top: `calc(-1 * ${($parcel$interopDefault($7x5iO$contentfulf36tokens)).spacing2Xs})`,
|
|
67
|
+
right: 0
|
|
68
|
+
}
|
|
69
|
+
})
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
function $2679bd8c144d3995$export$f50a68e3694789ee({ onClose: onClose , title: title , testId: testId = 'cf-ui-modal-header' , className: className , ...otherProps }) {
|
|
75
|
+
const styles = $2e9361382cc113aa$export$4bef00d568400c9b();
|
|
76
|
+
return(/*#__PURE__*/ ($parcel$interopDefault($7x5iO$react)).createElement($7x5iO$contentfulf36core.Flex, {
|
|
77
|
+
...otherProps,
|
|
78
|
+
className: $7x5iO$emotion.cx(styles.root, className),
|
|
79
|
+
testId: testId,
|
|
80
|
+
alignItems: "center",
|
|
81
|
+
justifyContent: "space-between"
|
|
82
|
+
}, /*#__PURE__*/ ($parcel$interopDefault($7x5iO$react)).createElement($7x5iO$contentfulf36typography.Subheading, {
|
|
83
|
+
as: "h1",
|
|
84
|
+
isTruncated: true,
|
|
85
|
+
marginBottom: "none"
|
|
86
|
+
}, title), onClose && /*#__PURE__*/ ($parcel$interopDefault($7x5iO$react)).createElement($7x5iO$contentfulf36core.Flex, {
|
|
87
|
+
alignItems: "center",
|
|
88
|
+
className: styles.buttonContainer
|
|
89
|
+
}, /*#__PURE__*/ ($parcel$interopDefault($7x5iO$react)).createElement($7x5iO$contentfulf36button.Button, {
|
|
90
|
+
variant: "transparent",
|
|
91
|
+
"aria-label": "Close",
|
|
92
|
+
startIcon: /*#__PURE__*/ ($parcel$interopDefault($7x5iO$react)).createElement($7x5iO$contentfulf36icons.CloseIcon, {
|
|
93
|
+
size: "small"
|
|
94
|
+
}),
|
|
95
|
+
onClick: ()=>{
|
|
96
|
+
onClose();
|
|
97
|
+
},
|
|
98
|
+
size: "small"
|
|
99
|
+
}))));
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
function $32e971b34c262557$export$5168abbf3ad664a0() {
|
|
109
|
+
return {
|
|
110
|
+
root: /*#__PURE__*/ $7x5iO$emotion.css({
|
|
111
|
+
padding: `${($parcel$interopDefault($7x5iO$contentfulf36tokens)).spacingM} ${($parcel$interopDefault($7x5iO$contentfulf36tokens)).spacingL}`,
|
|
112
|
+
color: ($parcel$interopDefault($7x5iO$contentfulf36tokens)).gray700,
|
|
113
|
+
fontSize: ($parcel$interopDefault($7x5iO$contentfulf36tokens)).fontSizeM,
|
|
114
|
+
fontFamily: ($parcel$interopDefault($7x5iO$contentfulf36tokens)).fontStackPrimary,
|
|
115
|
+
lineHeight: ($parcel$interopDefault($7x5iO$contentfulf36tokens)).lineHeightM,
|
|
116
|
+
overflowY: 'auto',
|
|
117
|
+
overflowX: 'auto',
|
|
118
|
+
boxSizing: 'border-box'
|
|
119
|
+
})
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
function $66391c55bbcf9065$export$6da19a24bf249f17({ testId: testId = 'cf-ui-modal-content' , className: className , children: children , ...otherProps }) {
|
|
125
|
+
const styles = $32e971b34c262557$export$5168abbf3ad664a0();
|
|
126
|
+
return(/*#__PURE__*/ ($parcel$interopDefault($7x5iO$react)).createElement($7x5iO$contentfulf36core.Box, {
|
|
127
|
+
...otherProps,
|
|
128
|
+
as: "div",
|
|
129
|
+
className: $7x5iO$emotion.cx(styles.root, className),
|
|
130
|
+
testId: testId
|
|
131
|
+
}, children));
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
function $a1d799ea27882387$export$9af97f4b0b4c597a(props) {
|
|
139
|
+
const modal = $7x5iO$emotion.cx(/*#__PURE__*/ $7x5iO$emotion.css({
|
|
140
|
+
transition: `opacity ${($parcel$interopDefault($7x5iO$contentfulf36tokens)).transitionDurationLong} ${($parcel$interopDefault($7x5iO$contentfulf36tokens)).transitionEasingDefault}, transform ${($parcel$interopDefault($7x5iO$contentfulf36tokens)).transitionDurationDefault} ${($parcel$interopDefault($7x5iO$contentfulf36tokens)).transitionEasingCubicBezier}`,
|
|
141
|
+
opacity: '0.5',
|
|
142
|
+
margin: ($parcel$interopDefault($7x5iO$contentfulf36tokens)).spacing2Xl,
|
|
143
|
+
transform: 'scale(0.85)',
|
|
144
|
+
backgroundColor: ($parcel$interopDefault($7x5iO$contentfulf36tokens)).colorWhite,
|
|
145
|
+
borderRadius: ($parcel$interopDefault($7x5iO$contentfulf36tokens)).borderRadiusMedium,
|
|
146
|
+
boxShadow: ($parcel$interopDefault($7x5iO$contentfulf36tokens)).boxShadowHeavy,
|
|
147
|
+
maxHeight: `calc(100vh - 1rem * (100 / ${($parcel$interopDefault($7x5iO$contentfulf36tokens)).fontBaseDefault}))`,
|
|
148
|
+
maxWidth: `calc(100vw - 1rem * (100 / ${($parcel$interopDefault($7x5iO$contentfulf36tokens)).fontBaseDefault}))`,
|
|
149
|
+
overflow: 'hidden',
|
|
150
|
+
display: 'flex',
|
|
151
|
+
flexDirection: 'column'
|
|
152
|
+
}), props.allowHeightOverflow ? /*#__PURE__*/ $7x5iO$emotion.css({
|
|
153
|
+
name: "1evlo53",
|
|
154
|
+
styles: "overflow:auto;max-height:none;"
|
|
155
|
+
}) : null, props.size === 'zen' ? /*#__PURE__*/ $7x5iO$emotion.css({
|
|
156
|
+
name: "11c88st",
|
|
157
|
+
styles: "max-width:none;max-height:none;margin:0;height:100%;width:100%;"
|
|
158
|
+
}) : null, props.className);
|
|
159
|
+
return {
|
|
160
|
+
portal: /*#__PURE__*/ $7x5iO$emotion.css({
|
|
161
|
+
name: "13o7eu2",
|
|
162
|
+
styles: "display:block;"
|
|
163
|
+
}),
|
|
164
|
+
base: {
|
|
165
|
+
root: $7x5iO$emotion.cx(/*#__PURE__*/ $7x5iO$emotion.css({
|
|
166
|
+
zIndex: ($parcel$interopDefault($7x5iO$contentfulf36tokens)).zIndexModalContent,
|
|
167
|
+
position: 'relative',
|
|
168
|
+
padding: 0,
|
|
169
|
+
display: 'inline-block',
|
|
170
|
+
margin: '0 auto',
|
|
171
|
+
textAlign: 'left',
|
|
172
|
+
outline: 'none'
|
|
173
|
+
}), props.size === 'zen' ? /*#__PURE__*/ $7x5iO$emotion.css({
|
|
174
|
+
name: "uwwqev",
|
|
175
|
+
styles: "width:100%;height:100%;"
|
|
176
|
+
}) : null),
|
|
177
|
+
afterOpen: /*#__PURE__*/ $7x5iO$emotion.css({
|
|
178
|
+
name: "rdgc1",
|
|
179
|
+
styles: "[data-modal-root]{transform:scale(1);opacity:1;}"
|
|
180
|
+
}),
|
|
181
|
+
beforeClose: /*#__PURE__*/ $7x5iO$emotion.css({
|
|
182
|
+
name: "e66ys1",
|
|
183
|
+
styles: "[data-modal-root]{opacity:0.5;transform:scale(0.85);}"
|
|
184
|
+
})
|
|
185
|
+
},
|
|
186
|
+
modalOverlay: {
|
|
187
|
+
root: $7x5iO$emotion.cx(/*#__PURE__*/ $7x5iO$emotion.css({
|
|
188
|
+
display: 'flex',
|
|
189
|
+
alignItems: 'baseline',
|
|
190
|
+
flexWrap: 'wrap',
|
|
191
|
+
top: 0,
|
|
192
|
+
right: 0,
|
|
193
|
+
bottom: 0,
|
|
194
|
+
left: 0,
|
|
195
|
+
zIndex: ($parcel$interopDefault($7x5iO$contentfulf36tokens)).zIndexModal,
|
|
196
|
+
opacity: 0,
|
|
197
|
+
transition: `opacity ${($parcel$interopDefault($7x5iO$contentfulf36tokens)).transitionDurationDefault} ${($parcel$interopDefault($7x5iO$contentfulf36tokens)).transitionEasingDefault}`,
|
|
198
|
+
position: 'fixed',
|
|
199
|
+
overflowY: 'auto',
|
|
200
|
+
backgroundColor: 'rgba(12, 20, 28, 0.74902)',
|
|
201
|
+
textAlign: 'center'
|
|
202
|
+
}), props.position === 'center' ? /*#__PURE__*/ $7x5iO$emotion.css({
|
|
203
|
+
name: "1qe4tyl",
|
|
204
|
+
styles: "align-items:center;justify-content:center;"
|
|
205
|
+
}) : null),
|
|
206
|
+
afterOpen: /*#__PURE__*/ $7x5iO$emotion.css({
|
|
207
|
+
name: "mcmk46",
|
|
208
|
+
styles: "opacity:1 !important;"
|
|
209
|
+
}),
|
|
210
|
+
beforeClose: /*#__PURE__*/ $7x5iO$emotion.css({
|
|
211
|
+
name: "q7lffx",
|
|
212
|
+
styles: "opacity:0;"
|
|
213
|
+
})
|
|
214
|
+
},
|
|
215
|
+
modal: modal
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
const $854b6d713fe70fc9$var$ModalSizesMapper = {
|
|
221
|
+
medium: '520px',
|
|
222
|
+
small: '400px',
|
|
223
|
+
large: '700px',
|
|
224
|
+
fullWidth: '100vw',
|
|
225
|
+
zen: '100vw'
|
|
226
|
+
};
|
|
227
|
+
function $854b6d713fe70fc9$var$focusFirstWithinNode(node) {
|
|
228
|
+
if (node && node.querySelectorAll) {
|
|
229
|
+
const elements = node.querySelectorAll('input, button');
|
|
230
|
+
if (elements.length > 0) {
|
|
231
|
+
const firstElement = elements[0]; // @ts-expect-error focus might be missing
|
|
232
|
+
if (typeof firstElement.focus === 'function') // @ts-expect-error focus might be missing
|
|
233
|
+
firstElement.focus();
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
function $854b6d713fe70fc9$export$2b77a92f1a5ad772({ allowHeightOverflow: allowHeightOverflow , position: position , shouldCloseOnEscapePress: shouldCloseOnEscapePress , shouldCloseOnOverlayClick: shouldCloseOnOverlayClick , size: size , testId: testId , topOffset: topOffset , aria: aria , ...otherProps }) {
|
|
238
|
+
const contentRef = $7x5iO$react.useRef(null);
|
|
239
|
+
const props = {
|
|
240
|
+
...otherProps,
|
|
241
|
+
allowHeightOverflow: allowHeightOverflow,
|
|
242
|
+
position: position,
|
|
243
|
+
shouldCloseOnEscapePress: shouldCloseOnEscapePress,
|
|
244
|
+
shouldCloseOnOverlayClick: shouldCloseOnOverlayClick,
|
|
245
|
+
size: size,
|
|
246
|
+
testId: testId,
|
|
247
|
+
topOffset: topOffset
|
|
248
|
+
};
|
|
249
|
+
const styles = $a1d799ea27882387$export$9af97f4b0b4c597a({
|
|
250
|
+
position: position,
|
|
251
|
+
size: size,
|
|
252
|
+
allowHeightOverflow: allowHeightOverflow,
|
|
253
|
+
className: otherProps.className
|
|
254
|
+
});
|
|
255
|
+
$7x5iO$react.useEffect(()=>{
|
|
256
|
+
if (props.isShown) setTimeout(()=>{
|
|
257
|
+
if (props.initialFocusRef && props.initialFocusRef.current) {
|
|
258
|
+
if (props.initialFocusRef.current.focus) props.initialFocusRef.current.focus();
|
|
259
|
+
} else if (contentRef.current) $854b6d713fe70fc9$var$focusFirstWithinNode(contentRef.current);
|
|
260
|
+
}, 100);
|
|
261
|
+
}, [
|
|
262
|
+
props.isShown,
|
|
263
|
+
props.initialFocusRef
|
|
264
|
+
]);
|
|
265
|
+
const renderDefault = ()=>{
|
|
266
|
+
return(/*#__PURE__*/ $7x5iO$react.createElement($7x5iO$react.Fragment, null, otherProps.title && /*#__PURE__*/ $7x5iO$react.createElement($2679bd8c144d3995$export$f50a68e3694789ee, {
|
|
267
|
+
title: otherProps.title,
|
|
268
|
+
onClose: props.onClose,
|
|
269
|
+
...otherProps.modalHeaderProps
|
|
270
|
+
}), /*#__PURE__*/ $7x5iO$react.createElement($66391c55bbcf9065$export$6da19a24bf249f17, otherProps.modalContentProps, otherProps.children)));
|
|
271
|
+
};
|
|
272
|
+
return(/*#__PURE__*/ $7x5iO$react.createElement(($parcel$interopDefault($7x5iO$reactmodal)), {
|
|
273
|
+
ariaHideApp: false,
|
|
274
|
+
aria: aria,
|
|
275
|
+
onRequestClose: props.onClose,
|
|
276
|
+
isOpen: otherProps.isShown,
|
|
277
|
+
onAfterOpen: props.onAfterOpen,
|
|
278
|
+
shouldCloseOnEsc: shouldCloseOnEscapePress,
|
|
279
|
+
shouldCloseOnOverlayClick: shouldCloseOnOverlayClick,
|
|
280
|
+
shouldFocusAfterRender: true,
|
|
281
|
+
shouldReturnFocusAfterClose: true,
|
|
282
|
+
portalClassName: styles.portal,
|
|
283
|
+
className: {
|
|
284
|
+
base: styles.base.root,
|
|
285
|
+
afterOpen: styles.base.afterOpen,
|
|
286
|
+
beforeClose: styles.base.beforeClose
|
|
287
|
+
},
|
|
288
|
+
style: {
|
|
289
|
+
content: {
|
|
290
|
+
top: position === 'center' ? 0 : topOffset
|
|
291
|
+
}
|
|
292
|
+
},
|
|
293
|
+
overlayClassName: {
|
|
294
|
+
base: styles.modalOverlay.root,
|
|
295
|
+
afterOpen: styles.modalOverlay.afterOpen,
|
|
296
|
+
beforeClose: styles.modalOverlay.beforeClose
|
|
297
|
+
},
|
|
298
|
+
closeTimeoutMS: 300,
|
|
299
|
+
contentRef: (ref)=>{
|
|
300
|
+
contentRef.current = ref;
|
|
301
|
+
}
|
|
302
|
+
}, /*#__PURE__*/ $7x5iO$react.createElement($7x5iO$contentfulf36core.Box, {
|
|
303
|
+
testId: testId,
|
|
304
|
+
style: {
|
|
305
|
+
width: $854b6d713fe70fc9$var$ModalSizesMapper[size] || size
|
|
306
|
+
},
|
|
307
|
+
className: styles.modal,
|
|
308
|
+
"data-modal-root": true
|
|
309
|
+
}, typeof otherProps.children === 'function' ? otherProps.children(props) : renderDefault())));
|
|
310
|
+
} // Use defaultProps instead of default values in the function to allow the
|
|
311
|
+
// Storybook to import and use these values
|
|
312
|
+
$854b6d713fe70fc9$export$2b77a92f1a5ad772.defaultProps = {
|
|
313
|
+
allowHeightOverflow: false,
|
|
314
|
+
position: 'center',
|
|
315
|
+
shouldCloseOnEscapePress: true,
|
|
316
|
+
shouldCloseOnOverlayClick: true,
|
|
317
|
+
size: 'medium',
|
|
318
|
+
testId: 'cf-ui-modal',
|
|
319
|
+
topOffset: '50px'
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
function $8b06e393320a8e77$export$c63fb08199be8e0e({ testId: testId = 'cf-ui-modal-controls' , className: className , children: children , ...otherProps }) {
|
|
329
|
+
return(/*#__PURE__*/ ($parcel$interopDefault($7x5iO$react)).createElement($7x5iO$contentfulf36core.Flex, {
|
|
330
|
+
...otherProps,
|
|
331
|
+
className: className,
|
|
332
|
+
testId: testId,
|
|
333
|
+
flexDirection: "row",
|
|
334
|
+
justifyContent: "flex-end",
|
|
335
|
+
margin: "spacingL",
|
|
336
|
+
marginTop: "none"
|
|
337
|
+
}, /*#__PURE__*/ ($parcel$interopDefault($7x5iO$react)).createElement($7x5iO$contentfulf36button.ButtonGroup, {
|
|
338
|
+
variant: "spaced",
|
|
339
|
+
spacing: "spacingS"
|
|
340
|
+
}, children)));
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
const $2132db66f9439432$export$2b77a92f1a5ad772 = $854b6d713fe70fc9$export$2b77a92f1a5ad772;
|
|
345
|
+
$2132db66f9439432$export$2b77a92f1a5ad772.Content = $66391c55bbcf9065$export$6da19a24bf249f17;
|
|
346
|
+
$2132db66f9439432$export$2b77a92f1a5ad772.Header = $2679bd8c144d3995$export$f50a68e3694789ee;
|
|
347
|
+
$2132db66f9439432$export$2b77a92f1a5ad772.Controls = $8b06e393320a8e77$export$c63fb08199be8e0e;
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
function $657ddd6e4548962f$export$427af6990c8ff682({ allowHeightOverflow: allowHeightOverflow = false , cancelLabel: cancelLabel = 'Cancel' , cancelTestId: cancelTestId = 'cf-ui-modal-confirm-cancel-button' , children: children , confirmLabel: confirmLabel = 'Confirm' , confirmTestId: confirmTestId = 'cf-ui-modal-confirm-confirm-button' , intent: intent = 'positive' , isConfirmDisabled: isConfirmDisabled = false , isConfirmLoading: isConfirmLoading = false , isShown: isShown , modalContentProps: modalContentProps , modalControlsProps: modalControlsProps , modalHeaderProps: modalHeaderProps , onCancel: onCancel , onConfirm: onConfirm , shouldCloseOnEscapePress: shouldCloseOnEscapePress = true , shouldCloseOnOverlayClick: shouldCloseOnOverlayClick = true , size: size = 'medium' , testId: testId = 'cf-ui-modal-confirm' , title: title = 'Are you sure?' , initialFocusRef: initialFocusRef }) {
|
|
354
|
+
const cancelRef = ($parcel$interopDefault($7x5iO$react)).useRef(null);
|
|
355
|
+
const confirmButton = confirmLabel ? /*#__PURE__*/ ($parcel$interopDefault($7x5iO$react)).createElement($7x5iO$contentfulf36button.Button, {
|
|
356
|
+
testId: confirmTestId,
|
|
357
|
+
isDisabled: isConfirmDisabled,
|
|
358
|
+
isLoading: isConfirmLoading,
|
|
359
|
+
variant: intent,
|
|
360
|
+
size: "small",
|
|
361
|
+
onClick: ()=>onConfirm()
|
|
362
|
+
}, confirmLabel) : null;
|
|
363
|
+
const cancelButton = cancelLabel ? /*#__PURE__*/ ($parcel$interopDefault($7x5iO$react)).createElement($7x5iO$contentfulf36button.Button, {
|
|
364
|
+
testId: cancelTestId,
|
|
365
|
+
variant: "secondary",
|
|
366
|
+
onClick: onCancel,
|
|
367
|
+
size: "small",
|
|
368
|
+
ref: initialFocusRef || cancelRef
|
|
369
|
+
}, cancelLabel) : null;
|
|
370
|
+
return(/*#__PURE__*/ ($parcel$interopDefault($7x5iO$react)).createElement($2132db66f9439432$export$2b77a92f1a5ad772, {
|
|
371
|
+
testId: testId,
|
|
372
|
+
isShown: isShown,
|
|
373
|
+
onClose: onCancel,
|
|
374
|
+
size: size,
|
|
375
|
+
shouldCloseOnOverlayClick: shouldCloseOnOverlayClick,
|
|
376
|
+
shouldCloseOnEscapePress: shouldCloseOnEscapePress,
|
|
377
|
+
allowHeightOverflow: allowHeightOverflow,
|
|
378
|
+
initialFocusRef: cancelRef
|
|
379
|
+
}, ()=>{
|
|
380
|
+
return(/*#__PURE__*/ ($parcel$interopDefault($7x5iO$react)).createElement(($parcel$interopDefault($7x5iO$react)).Fragment, null, /*#__PURE__*/ ($parcel$interopDefault($7x5iO$react)).createElement($2132db66f9439432$export$2b77a92f1a5ad772.Header, {
|
|
381
|
+
title: title || '',
|
|
382
|
+
...modalHeaderProps
|
|
383
|
+
}), /*#__PURE__*/ ($parcel$interopDefault($7x5iO$react)).createElement($2132db66f9439432$export$2b77a92f1a5ad772.Content, modalContentProps, children), /*#__PURE__*/ ($parcel$interopDefault($7x5iO$react)).createElement($2132db66f9439432$export$2b77a92f1a5ad772.Controls, modalControlsProps, cancelButton, confirmButton)));
|
|
384
|
+
}));
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
|
|
389
|
+
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
const $f6dfceab072669eb$var$getRoot = (rootElId)=>{
|
|
393
|
+
// Reuse the container if we find it
|
|
394
|
+
let rootDom = document.getElementById(rootElId);
|
|
395
|
+
if (rootDom !== null) return rootDom;
|
|
396
|
+
// Otherwise create it
|
|
397
|
+
rootDom = document.createElement('div');
|
|
398
|
+
rootDom.setAttribute('id', rootElId);
|
|
399
|
+
document.body.appendChild(rootDom);
|
|
400
|
+
return rootDom;
|
|
401
|
+
};
|
|
402
|
+
const $f6dfceab072669eb$var$openModalsIds = new Map();
|
|
403
|
+
function $f6dfceab072669eb$var$closeAll() {
|
|
404
|
+
$f6dfceab072669eb$var$openModalsIds.forEach(async ({ render: render , currentConfig: currentConfig , delay: delay }, rootElId)=>{
|
|
405
|
+
const config = {
|
|
406
|
+
...currentConfig,
|
|
407
|
+
isShown: false
|
|
408
|
+
};
|
|
409
|
+
render(config);
|
|
410
|
+
await new Promise((resolveDelay)=>setTimeout(resolveDelay, delay)
|
|
411
|
+
);
|
|
412
|
+
($parcel$interopDefault($7x5iO$reactdom)).unmountComponentAtNode($f6dfceab072669eb$var$getRoot(rootElId));
|
|
413
|
+
$f6dfceab072669eb$var$openModalsIds.delete(rootElId);
|
|
414
|
+
});
|
|
415
|
+
} // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
416
|
+
function $f6dfceab072669eb$var$open(componentRenderer, options = {
|
|
417
|
+
}) {
|
|
418
|
+
options = {
|
|
419
|
+
delay: 300,
|
|
420
|
+
...options
|
|
421
|
+
}; // Allow components to specify if they wish to reuse the modal container
|
|
422
|
+
const rootElId = `modals-root${options.modalId || Date.now()}`;
|
|
423
|
+
const rootDom = $f6dfceab072669eb$var$getRoot(rootElId);
|
|
424
|
+
return new Promise((resolve)=>{
|
|
425
|
+
let currentConfig = {
|
|
426
|
+
onClose: onClose1,
|
|
427
|
+
isShown: true
|
|
428
|
+
};
|
|
429
|
+
function render({ onClose: onClose , isShown: isShown }) {
|
|
430
|
+
($parcel$interopDefault($7x5iO$reactdom)).render(componentRenderer({
|
|
431
|
+
onClose: onClose,
|
|
432
|
+
isShown: isShown
|
|
433
|
+
}), rootDom);
|
|
434
|
+
}
|
|
435
|
+
async function onClose1(arg) {
|
|
436
|
+
currentConfig = {
|
|
437
|
+
...currentConfig,
|
|
438
|
+
isShown: false
|
|
439
|
+
};
|
|
440
|
+
render(currentConfig);
|
|
441
|
+
await new Promise((resolveDelay)=>setTimeout(resolveDelay, options.delay)
|
|
442
|
+
);
|
|
443
|
+
($parcel$interopDefault($7x5iO$reactdom)).unmountComponentAtNode(rootDom);
|
|
444
|
+
rootDom.remove();
|
|
445
|
+
$f6dfceab072669eb$var$openModalsIds.delete(rootElId);
|
|
446
|
+
resolve(arg);
|
|
447
|
+
}
|
|
448
|
+
render(currentConfig);
|
|
449
|
+
$f6dfceab072669eb$var$openModalsIds.set(rootElId, {
|
|
450
|
+
render: render,
|
|
451
|
+
currentConfig: currentConfig,
|
|
452
|
+
delay: options.delay
|
|
453
|
+
});
|
|
454
|
+
});
|
|
455
|
+
}
|
|
456
|
+
const $f6dfceab072669eb$export$e21b828b42c54a37 = {
|
|
457
|
+
open: $f6dfceab072669eb$var$open,
|
|
458
|
+
closeAll: $f6dfceab072669eb$var$closeAll
|
|
459
|
+
};
|
|
460
|
+
|
|
461
|
+
|
|
462
|
+
|
|
463
|
+
|
|
464
|
+
$parcel$exportWildcard(module.exports, $4eddba25b642b7ac$exports);
|
|
465
|
+
|
|
466
|
+
|
|
467
|
+
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"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","sources":["packages/components/modal/index.ts","packages/components/modal/src/index.ts","packages/components/modal/src/CompoundModal.tsx","packages/components/modal/src/Modal.tsx","packages/components/modal/src/ModalHeader/ModalHeader.tsx","packages/components/modal/src/ModalHeader/ModalHeader.styles.ts","packages/components/modal/src/ModalContent/ModalContent.tsx","packages/components/modal/src/ModalContent/ModalContent.styles.ts","packages/components/modal/src/Modal.styles.ts","packages/components/modal/src/ModalControls/ModalControls.tsx","packages/components/modal/src/ModalConfirm/ModalConfirm.tsx","packages/components/modal/src/ModalLauncher/ModalLauncher.tsx"],"sourcesContent":["export * from './src/index';\n","export { Modal } from './CompoundModal';\nexport type { ModalProps } from './Modal';\nexport { ModalConfirm } from './ModalConfirm/ModalConfirm';\nexport type { ModalConfirmProps } from './ModalConfirm/ModalConfirm';\nexport { ModalContent } from './ModalContent/ModalContent';\nexport type { ModalContentProps } from './ModalContent/ModalContent';\nexport { ModalControls } from './ModalControls/ModalControls';\nexport type { ModalControlsProps } from './ModalControls/ModalControls';\nexport { ModalHeader } from './ModalHeader/ModalHeader';\nexport type { ModalHeaderProps } from './ModalHeader/ModalHeader';\nexport { ModalLauncher } from './ModalLauncher/ModalLauncher';\n","import { Modal as OriginalModal } from './Modal';\nimport { ModalContent } from './ModalContent/ModalContent';\nimport { ModalHeader } from './ModalHeader/ModalHeader';\nimport { ModalControls } from './ModalControls/ModalControls';\n\ntype CompoundModal = typeof OriginalModal & {\n Content: typeof ModalContent;\n Header: typeof ModalHeader;\n Controls: typeof ModalControls;\n};\n\nexport const Modal = OriginalModal as CompoundModal;\nModal.Content = ModalContent;\nModal.Header = ModalHeader;\nModal.Controls = ModalControls;\n","import * as React from 'react';\nimport ReactModal from 'react-modal';\n\nimport { Box } from '@contentful/f36-core';\nimport type { CommonProps } from '@contentful/f36-core';\n\nimport { ModalHeader, ModalHeaderProps } from './ModalHeader/ModalHeader';\nimport { ModalContent, ModalContentProps } from './ModalContent/ModalContent';\nimport { getModalStyles } from './Modal.styles';\nimport type { ModalSizeType, ModalPositionType } from './types';\n\nconst ModalSizesMapper = {\n medium: '520px',\n small: '400px',\n large: '700px',\n fullWidth: '100vw',\n zen: '100vw',\n};\n\nexport interface ModalProps extends CommonProps {\n /**\n * When true, the dialog is shown.\n */\n isShown: boolean;\n\n /**\n * Function that will be run when the modal is requested to be closed, prior to actually closing.\n */\n onClose: ReactModal.Props['onRequestClose'];\n\n /**\n * Function that will be run after the modal has opened.\n */\n onAfterOpen?: ReactModal.Props['onAfterOpen'];\n\n /**\n * Additional aria attributes\n */\n aria?: ReactModal.Props['aria'];\n\n /**\n * Boolean indicating if clicking the overlay should close the overlay.\n */\n shouldCloseOnOverlayClick?: boolean;\n /**\n * Boolean indicating if pressing the esc key should close the overlay.\n */\n shouldCloseOnEscapePress?: boolean;\n /**\n * Indicating if modal is centered or linked to the top\n */\n position?: ModalPositionType;\n /**\n Top offset if position is 'top'\n */\n topOffset?: number | string;\n /**\n Modal title that is used in header\n */\n title?: string;\n /**\n Size of the modal window\n */\n size?: ModalSizeType;\n /**\n * Are modals higher than viewport allowed\n */\n allowHeightOverflow?: boolean;\n\n /**\n * Optional props to override ModalHeader behaviour\n */\n modalHeaderProps?: Partial<ModalHeaderProps>;\n\n /**\n * Optional props to override ModalContent behaviour\n */\n modalContentProps?: Partial<ModalContentProps>;\n\n /**\n * Optional property to set initial focus\n */\n initialFocusRef?: React.RefObject<HTMLElement>;\n\n children: React.ReactNode | RenderModal;\n}\n\ntype RenderModal = (modalProps: ModalProps) => React.ReactNode;\n\nfunction focusFirstWithinNode(node: HTMLElement) {\n if (node && node.querySelectorAll) {\n const elements = node.querySelectorAll('input, button');\n if (elements.length > 0) {\n const firstElement = elements[0];\n // @ts-expect-error focus might be missing\n if (typeof firstElement.focus === 'function') {\n // @ts-expect-error focus might be missing\n firstElement.focus();\n }\n }\n }\n}\n\nexport function Modal({\n allowHeightOverflow,\n position,\n shouldCloseOnEscapePress,\n shouldCloseOnOverlayClick,\n size,\n testId,\n topOffset,\n aria,\n ...otherProps\n}: ModalProps) {\n const contentRef = React.useRef<HTMLDivElement>(null);\n\n const props = {\n ...otherProps,\n allowHeightOverflow,\n position,\n shouldCloseOnEscapePress,\n shouldCloseOnOverlayClick,\n size,\n testId,\n topOffset,\n };\n\n const styles = getModalStyles({\n position,\n size,\n allowHeightOverflow,\n className: otherProps.className,\n });\n\n React.useEffect(() => {\n if (props.isShown) {\n setTimeout(() => {\n if (props.initialFocusRef && props.initialFocusRef.current) {\n if (props.initialFocusRef.current.focus) {\n props.initialFocusRef.current.focus();\n }\n } else if (contentRef.current) {\n focusFirstWithinNode(contentRef.current);\n }\n }, 100);\n }\n }, [props.isShown, props.initialFocusRef]);\n\n const renderDefault = () => {\n return (\n <React.Fragment>\n {otherProps.title && (\n <ModalHeader\n title={otherProps.title}\n onClose={props.onClose}\n {...otherProps.modalHeaderProps}\n />\n )}\n <ModalContent {...otherProps.modalContentProps}>\n {otherProps.children}\n </ModalContent>\n </React.Fragment>\n );\n };\n\n return (\n <ReactModal\n ariaHideApp={false}\n aria={aria}\n onRequestClose={props.onClose}\n isOpen={otherProps.isShown}\n onAfterOpen={props.onAfterOpen}\n shouldCloseOnEsc={shouldCloseOnEscapePress}\n shouldCloseOnOverlayClick={shouldCloseOnOverlayClick}\n shouldFocusAfterRender\n shouldReturnFocusAfterClose\n portalClassName={styles.portal}\n className={{\n base: styles.base.root,\n afterOpen: styles.base.afterOpen,\n beforeClose: styles.base.beforeClose,\n }}\n style={{\n content: {\n top: position === 'center' ? 0 : topOffset,\n },\n }}\n overlayClassName={{\n base: styles.modalOverlay.root,\n afterOpen: styles.modalOverlay.afterOpen,\n beforeClose: styles.modalOverlay.beforeClose,\n }}\n closeTimeoutMS={300}\n contentRef={(ref) => {\n contentRef.current = ref;\n }}\n >\n <Box\n testId={testId}\n style={{\n width: ModalSizesMapper[size] || size,\n }}\n className={styles.modal}\n data-modal-root\n >\n {typeof otherProps.children === 'function'\n ? otherProps.children(props)\n : renderDefault()}\n </Box>\n </ReactModal>\n );\n}\n\n// Use defaultProps instead of default values in the function to allow the\n// Storybook to import and use these values\nModal.defaultProps = {\n allowHeightOverflow: false,\n position: 'center',\n shouldCloseOnEscapePress: true,\n shouldCloseOnOverlayClick: true,\n size: 'medium',\n testId: 'cf-ui-modal',\n topOffset: '50px',\n};\n","import React from 'react';\nimport { cx } from 'emotion';\nimport { CloseIcon } from '@contentful/f36-icons';\nimport { Flex } from '@contentful/f36-core';\nimport type { PropsWithHTMLElement, CommonProps } from '@contentful/f36-core';\nimport { Button } from '@contentful/f36-button';\nimport { Subheading } from '@contentful/f36-typography';\n\nimport { getModalHeaderStyles } from './ModalHeader.styles';\n\ninterface ModalHeaderInternalProps extends CommonProps {\n title: string;\n onClose?: Function;\n}\n\nexport type ModalHeaderProps = PropsWithHTMLElement<\n ModalHeaderInternalProps,\n 'div'\n>;\n\nexport function ModalHeader({\n onClose,\n title,\n testId = 'cf-ui-modal-header',\n className,\n ...otherProps\n}: ModalHeaderProps): React.ReactElement {\n const styles = getModalHeaderStyles();\n\n return (\n <Flex\n {...otherProps}\n className={cx(styles.root, className)}\n testId={testId}\n alignItems=\"center\"\n justifyContent=\"space-between\"\n >\n <Subheading as=\"h1\" isTruncated marginBottom=\"none\">\n {title}\n </Subheading>\n {onClose && (\n <Flex alignItems=\"center\" className={styles.buttonContainer}>\n <Button\n variant=\"transparent\"\n aria-label=\"Close\"\n startIcon={<CloseIcon size=\"small\" />}\n onClick={() => {\n onClose();\n }}\n size=\"small\"\n />\n </Flex>\n )}\n </Flex>\n );\n}\n","import tokens from '@contentful/f36-tokens';\nimport { css } from 'emotion';\n\nexport function getModalHeaderStyles() {\n return {\n root: css({\n position: 'relative',\n padding: `${tokens.spacingM} ${tokens.spacingM} ${tokens.spacingM} ${tokens.spacingL}`,\n borderRadius: `${tokens.borderRadiusMedium} ${tokens.borderRadiusMedium} 0 0`,\n borderBottom: `1px solid ${tokens.gray300}`,\n }),\n buttonContainer: css({\n position: 'relative',\n width: tokens.spacing2Xl,\n height: tokens.spacingL,\n button: {\n position: 'absolute',\n top: `calc(-1 * ${tokens.spacing2Xs})`,\n right: 0,\n },\n }),\n };\n}\n","import React from 'react';\nimport { cx } from 'emotion';\nimport type { PropsWithHTMLElement, CommonProps } from '@contentful/f36-core';\nimport { Box } from '@contentful/f36-core';\nimport { getModalContentStyles } from './ModalContent.styles';\n\ninterface ModalContentInternalProps extends CommonProps {\n children: React.ReactNode;\n}\n\nexport type ModalContentProps = PropsWithHTMLElement<\n ModalContentInternalProps,\n 'div'\n>;\n\nexport function ModalContent({\n testId = 'cf-ui-modal-content',\n className,\n children,\n ...otherProps\n}: ModalContentProps) {\n const styles = getModalContentStyles();\n return (\n <Box\n {...otherProps}\n as=\"div\"\n className={cx(styles.root, className)}\n testId={testId}\n >\n {children}\n </Box>\n );\n}\n","import { css } from 'emotion';\nimport tokens from '@contentful/f36-tokens';\n\nexport function getModalContentStyles() {\n return {\n root: css({\n padding: `${tokens.spacingM} ${tokens.spacingL}`,\n color: tokens.gray700,\n fontSize: tokens.fontSizeM,\n fontFamily: tokens.fontStackPrimary,\n lineHeight: tokens.lineHeightM,\n overflowY: 'auto',\n overflowX: 'auto',\n boxSizing: 'border-box',\n }),\n };\n}\n","import tokens from '@contentful/f36-tokens';\nimport { css, cx } from 'emotion';\nimport type { ModalPositionType, ModalSizeType } from './types';\n\nexport function getModalStyles(props: {\n size: ModalSizeType;\n position: ModalPositionType;\n allowHeightOverflow?: boolean;\n className?: string;\n}) {\n const modal = cx(\n css({\n transition: `opacity ${tokens.transitionDurationLong} ${tokens.transitionEasingDefault}, transform ${tokens.transitionDurationDefault} ${tokens.transitionEasingCubicBezier}`,\n opacity: '0.5',\n margin: tokens.spacing2Xl,\n transform: 'scale(0.85)',\n backgroundColor: tokens.colorWhite,\n borderRadius: tokens.borderRadiusMedium,\n boxShadow: tokens.boxShadowHeavy,\n maxHeight: `calc(100vh - 1rem * (100 / ${tokens.fontBaseDefault}))`,\n maxWidth: `calc(100vw - 1rem * (100 / ${tokens.fontBaseDefault}))`,\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n }),\n props.allowHeightOverflow\n ? css({\n overflow: 'auto',\n maxHeight: 'none',\n })\n : null,\n props.size === 'zen'\n ? css({\n maxWidth: 'none',\n maxHeight: 'none',\n margin: 0,\n height: '100%',\n width: '100%',\n })\n : null,\n props.className,\n );\n\n return {\n portal: css({\n display: 'block',\n }),\n base: {\n root: cx(\n css({\n zIndex: tokens.zIndexModalContent,\n position: 'relative',\n padding: 0,\n display: 'inline-block',\n margin: '0 auto',\n textAlign: 'left',\n outline: 'none',\n }),\n props.size === 'zen'\n ? css({\n width: '100%',\n height: '100%',\n })\n : null,\n ),\n afterOpen: css({\n '[data-modal-root]': {\n transform: 'scale(1)',\n opacity: '1',\n },\n }),\n beforeClose: css({\n '[data-modal-root]': {\n opacity: '0.5',\n transform: 'scale(0.85)',\n },\n }),\n },\n modalOverlay: {\n root: cx(\n css({\n display: 'flex',\n alignItems: 'baseline',\n flexWrap: 'wrap',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n zIndex: tokens.zIndexModal,\n opacity: 0,\n transition: `opacity ${tokens.transitionDurationDefault} ${tokens.transitionEasingDefault}`,\n position: 'fixed',\n overflowY: 'auto',\n backgroundColor: 'rgba(12, 20, 28, 0.74902)',\n textAlign: 'center',\n }),\n props.position === 'center'\n ? css({\n alignItems: 'center',\n justifyContent: 'center',\n })\n : null,\n ),\n afterOpen: css({\n opacity: '1 !important',\n }),\n beforeClose: css({\n opacity: 0,\n }),\n },\n modal,\n };\n}\n","import React from 'react';\n\nimport type { PropsWithHTMLElement, CommonProps } from '@contentful/f36-core';\nimport { Flex } from '@contentful/f36-core';\nimport { ButtonGroup } from '@contentful/f36-button';\n\ninterface ModalControlsInternalProps extends CommonProps {\n children: React.ReactElement[] | React.ReactElement;\n}\n\nexport type ModalControlsProps = PropsWithHTMLElement<\n ModalControlsInternalProps,\n 'div'\n>;\n\nexport function ModalControls({\n testId = 'cf-ui-modal-controls',\n className,\n children,\n ...otherProps\n}: ModalControlsProps): React.ReactElement {\n return (\n <Flex\n {...otherProps}\n className={className}\n testId={testId}\n flexDirection=\"row\"\n justifyContent=\"flex-end\"\n margin=\"spacingL\"\n marginTop=\"none\"\n >\n <ButtonGroup variant=\"spaced\" spacing=\"spacingS\">\n {children}\n </ButtonGroup>\n </Flex>\n );\n}\n","import React from 'react';\n\nimport { Modal } from '../CompoundModal';\nimport { ModalProps } from '../Modal';\nimport type { ModalSizeType } from '../types';\nimport type { ModalHeaderProps } from '../ModalHeader/ModalHeader';\nimport type { ModalContentProps } from '../ModalContent/ModalContent';\nimport type { ModalControlsProps } from '../ModalControls/ModalControls';\nimport { Button } from '@contentful/f36-button';\n\nexport interface ModalConfirmProps {\n /**\n * When true, the dialog is shown.\n */\n isShown: boolean;\n /**\n * Function that will be called when the confirm button is clicked. This does not close the ModalConfirm.\n */\n onConfirm(): void;\n /**\n * Function that will be called when the cancel button is clicked. This does not close the ModalConfirm.\n */\n onCancel: ModalProps['onClose'];\n /**\n Modal title that is used in header\n */\n title?: string;\n /**\n * Label of the confirm button\n */\n confirmLabel?: string | false;\n /**\n * Label of the cancel button\n */\n cancelLabel?: string | false;\n /**\n * The intent of the ModalConfirm. Used for the Button.\n */\n intent?: 'primary' | 'positive' | 'negative';\n /**\n Size of the modal window\n */\n size?: ModalSizeType;\n /**\n * Boolean indicating if clicking the overlay should close the overlay.\n */\n shouldCloseOnOverlayClick?: boolean;\n /**\n * Boolean indicating if pressing the esc key should close the overlay.\n */\n shouldCloseOnEscapePress?: boolean;\n /**\n * When true, the confirm button is set to disabled.\n */\n isConfirmDisabled?: boolean;\n /**\n * When true, the confirm button is set to loading.\n */\n isConfirmLoading?: boolean;\n /**\n * Are modals higher than viewport allowed\n */\n allowHeightOverflow?: boolean;\n\n /**\n * Optional props to override ModalHeader behaviour\n */\n modalHeaderProps?: Partial<ModalHeaderProps>;\n\n /**\n * Optional props to override ModalContent behaviour\n */\n modalContentProps?: Partial<ModalContentProps>;\n\n /**\n * Optional props to override ModalControl behaviour\n */\n modalControlsProps?: Partial<ModalControlsProps>;\n\n /**\n * Optional property to set initial focus\n */\n initialFocusRef?: React.RefObject<HTMLElement>;\n\n testId?: string;\n confirmTestId?: string;\n cancelTestId?: string;\n children: React.ReactNode;\n}\n\nexport function ModalConfirm({\n allowHeightOverflow = false,\n cancelLabel = 'Cancel',\n cancelTestId = 'cf-ui-modal-confirm-cancel-button',\n children,\n confirmLabel = 'Confirm',\n confirmTestId = 'cf-ui-modal-confirm-confirm-button',\n intent = 'positive',\n isConfirmDisabled = false,\n isConfirmLoading = false,\n isShown,\n modalContentProps,\n modalControlsProps,\n modalHeaderProps,\n onCancel,\n onConfirm,\n shouldCloseOnEscapePress = true,\n shouldCloseOnOverlayClick = true,\n size = 'medium',\n testId = 'cf-ui-modal-confirm',\n title = 'Are you sure?',\n initialFocusRef,\n}: ModalConfirmProps) {\n const cancelRef = React.useRef(null);\n\n const confirmButton = confirmLabel ? (\n <Button\n testId={confirmTestId}\n isDisabled={isConfirmDisabled}\n isLoading={isConfirmLoading}\n variant={intent}\n size=\"small\"\n onClick={() => onConfirm()}\n >\n {confirmLabel}\n </Button>\n ) : null;\n\n const cancelButton = cancelLabel ? (\n <Button\n testId={cancelTestId}\n variant=\"secondary\"\n onClick={onCancel}\n size=\"small\"\n ref={initialFocusRef || cancelRef}\n >\n {cancelLabel}\n </Button>\n ) : null;\n\n return (\n <Modal\n testId={testId}\n isShown={isShown}\n onClose={onCancel}\n size={size}\n shouldCloseOnOverlayClick={shouldCloseOnOverlayClick}\n shouldCloseOnEscapePress={shouldCloseOnEscapePress}\n allowHeightOverflow={allowHeightOverflow}\n initialFocusRef={cancelRef}\n >\n {() => {\n return (\n <React.Fragment>\n <Modal.Header title={title || ''} {...modalHeaderProps} />\n <Modal.Content {...modalContentProps}>{children}</Modal.Content>\n <Modal.Controls {...modalControlsProps}>\n {cancelButton}\n {confirmButton}\n </Modal.Controls>\n </React.Fragment>\n );\n }}\n </Modal>\n );\n}\n","/* global Promise */\nimport ReactDOM from 'react-dom';\n\n// @todo: change any to unknown\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ninterface ModalLauncherComponentRendererProps<T = any> {\n isShown: boolean;\n onClose: (result?: T) => void;\n}\n\ninterface ModalLauncherOpenOptions {\n /**\n * Unique id to be used as identifier for the modal contianer\n */\n modalId?: string;\n /**\n * ms before removing the component from the tree\n * @default 300\n */\n delay?: number;\n}\n\ninterface CloseModalData {\n delay: number;\n render: (args: ModalLauncherComponentRendererProps<any>) => void;\n currentConfig: ModalLauncherComponentRendererProps<any>;\n}\n\nconst getRoot = (rootElId: string): HTMLElement => {\n // Reuse the container if we find it\n let rootDom = document.getElementById(rootElId);\n if (rootDom !== null) {\n return rootDom;\n }\n\n // Otherwise create it\n rootDom = document.createElement('div');\n rootDom.setAttribute('id', rootElId);\n document.body.appendChild(rootDom);\n return rootDom;\n};\n\nconst openModalsIds: Map<string, CloseModalData> = new Map();\nfunction closeAll() {\n openModalsIds.forEach(async ({ render, currentConfig, delay }, rootElId) => {\n const config = { ...currentConfig, isShown: false };\n render(config);\n await new Promise((resolveDelay) => setTimeout(resolveDelay, delay));\n ReactDOM.unmountComponentAtNode(getRoot(rootElId));\n openModalsIds.delete(rootElId);\n });\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction open<T = any>(\n componentRenderer: (\n props: ModalLauncherComponentRendererProps<T>,\n ) => JSX.Element,\n options: ModalLauncherOpenOptions = {},\n): Promise<T> {\n options = { delay: 300, ...options };\n\n // Allow components to specify if they wish to reuse the modal container\n const rootElId = `modals-root${options.modalId || Date.now()}`;\n const rootDom = getRoot(rootElId);\n\n return new Promise((resolve) => {\n let currentConfig = { onClose, isShown: true };\n\n function render({\n onClose,\n isShown,\n }: ModalLauncherComponentRendererProps<T>) {\n ReactDOM.render(componentRenderer({ onClose, isShown }), rootDom);\n }\n\n async function onClose(arg?: T) {\n currentConfig = {\n ...currentConfig,\n isShown: false,\n };\n render(currentConfig);\n await new Promise((resolveDelay) =>\n setTimeout(resolveDelay, options.delay),\n );\n ReactDOM.unmountComponentAtNode(rootDom);\n rootDom.remove();\n openModalsIds.delete(rootElId);\n resolve(arg);\n }\n\n render(currentConfig);\n openModalsIds.set(rootElId, {\n render,\n currentConfig,\n delay: options.delay,\n });\n });\n}\n\nexport const ModalLauncher = {\n open,\n closeAll,\n};\n"],"names":["Modal","ModalProps","ModalConfirm","ModalConfirmProps","ModalContent","ModalContentProps","ModalControls","ModalControlsProps","ModalHeader","ModalHeaderProps","ModalLauncher","OriginalModal","CompoundModal","Content","Header","Controls","React","ReactModal","Box","CommonProps","getModalStyles","ModalSizeType","ModalPositionType","ModalSizesMapper","medium","small","large","fullWidth","zen","isShown","onClose","Props","onAfterOpen","aria","shouldCloseOnOverlayClick","shouldCloseOnEscapePress","position","topOffset","title","size","allowHeightOverflow","modalHeaderProps","Partial","modalContentProps","initialFocusRef","RefObject","HTMLElement","children","ReactNode","RenderModal","modalProps","focusFirstWithinNode","node","querySelectorAll","elements","length","firstElement","focus","testId","otherProps","contentRef","useRef","HTMLDivElement","props","styles","className","useEffect","setTimeout","current","renderDefault","portal","base","root","afterOpen","beforeClose","content","top","modalOverlay","ref","width","modal","defaultProps","CloseIcon","Flex","PropsWithHTMLElement","Button","Subheading","getModalHeaderStyles","ModalHeaderInternalProps","Function","ReactElement","buttonContainer","tokens","padding","spacingM","spacingL","borderRadius","borderRadiusMedium","borderBottom","gray300","spacing2Xl","height","button","spacing2Xs","right","getModalContentStyles","ModalContentInternalProps","color","gray700","fontSize","fontSizeM","fontFamily","fontStackPrimary","lineHeight","lineHeightM","overflowY","overflowX","boxSizing","transition","transitionDurationLong","transitionEasingDefault","transitionDurationDefault","transitionEasingCubicBezier","opacity","margin","transform","backgroundColor","colorWhite","boxShadow","boxShadowHeavy","maxHeight","fontBaseDefault","maxWidth","overflow","display","flexDirection","zIndex","zIndexModalContent","textAlign","outline","alignItems","flexWrap","bottom","left","zIndexModal","ButtonGroup","ModalControlsInternalProps","onConfirm","onCancel","confirmLabel","cancelLabel","intent","isConfirmDisabled","isConfirmLoading","modalControlsProps","confirmTestId","cancelTestId","cancelRef","confirmButton","cancelButton","ReactDOM","ModalLauncherComponentRendererProps","result","T","ModalLauncherOpenOptions","modalId","delay","CloseModalData","render","args","currentConfig","getRoot","rootElId","rootDom","document","getElementById","createElement","setAttribute","body","appendChild","openModalsIds","Map","closeAll","forEach","config","Promise","resolveDelay","unmountComponentAtNode","delete","open","componentRenderer","JSX","Element","options","Date","now","resolve","arg","remove","set"],"version":3,"file":"main.js.map"}
|