@contentful/f36-modal 4.15.1 → 4.18.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/dist/main.js DELETED
@@ -1,437 +0,0 @@
1
- var $a6cQm$react = require("react");
2
- var $a6cQm$reactmodal = require("react-modal");
3
- var $a6cQm$contentfulf36core = require("@contentful/f36-core");
4
- var $a6cQm$emotion = require("emotion");
5
- var $a6cQm$contentfulf36icons = require("@contentful/f36-icons");
6
- var $a6cQm$contentfulf36button = require("@contentful/f36-button");
7
- var $a6cQm$contentfulf36typography = require("@contentful/f36-typography");
8
- var $a6cQm$contentfulf36tokens = require("@contentful/f36-tokens");
9
- var $a6cQm$reactdom = require("react-dom");
10
-
11
- function $parcel$export(e, n, v, s) {
12
- Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
13
- }
14
- function $parcel$interopDefault(a) {
15
- return a && a.__esModule ? a.default : a;
16
- }
17
-
18
- $parcel$export(module.exports, "Modal", () => $2132db66f9439432$export$2b77a92f1a5ad772);
19
- $parcel$export(module.exports, "ModalConfirm", () => $657ddd6e4548962f$export$427af6990c8ff682);
20
- $parcel$export(module.exports, "ModalContent", () => $66391c55bbcf9065$export$6da19a24bf249f17);
21
- $parcel$export(module.exports, "ModalControls", () => $8b06e393320a8e77$export$c63fb08199be8e0e);
22
- $parcel$export(module.exports, "ModalHeader", () => $2679bd8c144d3995$export$f50a68e3694789ee);
23
- $parcel$export(module.exports, "ModalLauncher", () => $f6dfceab072669eb$export$e21b828b42c54a37);
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
- function $2e9361382cc113aa$export$4bef00d568400c9b() {
36
- return {
37
- root: /*#__PURE__*/ (0, $a6cQm$emotion.css)({
38
- position: "relative",
39
- padding: `${(0, ($parcel$interopDefault($a6cQm$contentfulf36tokens))).spacingM} ${(0, ($parcel$interopDefault($a6cQm$contentfulf36tokens))).spacingM} ${(0, ($parcel$interopDefault($a6cQm$contentfulf36tokens))).spacingM} ${(0, ($parcel$interopDefault($a6cQm$contentfulf36tokens))).spacingL}`,
40
- borderRadius: `${(0, ($parcel$interopDefault($a6cQm$contentfulf36tokens))).borderRadiusMedium} ${(0, ($parcel$interopDefault($a6cQm$contentfulf36tokens))).borderRadiusMedium} 0 0`,
41
- borderBottom: `1px solid ${(0, ($parcel$interopDefault($a6cQm$contentfulf36tokens))).gray300}`
42
- }),
43
- buttonContainer: /*#__PURE__*/ (0, $a6cQm$emotion.css)({
44
- position: "relative",
45
- width: (0, ($parcel$interopDefault($a6cQm$contentfulf36tokens))).spacing2Xl,
46
- height: (0, ($parcel$interopDefault($a6cQm$contentfulf36tokens))).spacingL,
47
- button: {
48
- position: "absolute",
49
- top: `calc(-1 * ${(0, ($parcel$interopDefault($a6cQm$contentfulf36tokens))).spacing2Xs})`,
50
- right: 0
51
- }
52
- })
53
- };
54
- }
55
-
56
-
57
- const $2679bd8c144d3995$export$f50a68e3694789ee = ({ onClose: onClose , title: title , testId: testId = "cf-ui-modal-header" , className: className , ...otherProps })=>{
58
- const styles = (0, $2e9361382cc113aa$export$4bef00d568400c9b)();
59
- return /*#__PURE__*/ (0, ($parcel$interopDefault($a6cQm$react))).createElement((0, $a6cQm$contentfulf36core.Flex), {
60
- ...otherProps,
61
- className: (0, $a6cQm$emotion.cx)(styles.root, className),
62
- testId: testId,
63
- alignItems: "center",
64
- justifyContent: "space-between"
65
- }, /*#__PURE__*/ (0, ($parcel$interopDefault($a6cQm$react))).createElement((0, $a6cQm$contentfulf36typography.Subheading), {
66
- as: "h2",
67
- isTruncated: true,
68
- marginBottom: "none"
69
- }, title), onClose && /*#__PURE__*/ (0, ($parcel$interopDefault($a6cQm$react))).createElement((0, $a6cQm$contentfulf36core.Flex), {
70
- alignItems: "center",
71
- className: styles.buttonContainer
72
- }, /*#__PURE__*/ (0, ($parcel$interopDefault($a6cQm$react))).createElement((0, $a6cQm$contentfulf36button.Button), {
73
- variant: "transparent",
74
- "aria-label": "Close",
75
- startIcon: /*#__PURE__*/ (0, ($parcel$interopDefault($a6cQm$react))).createElement((0, $a6cQm$contentfulf36icons.CloseIcon), {
76
- size: "small"
77
- }),
78
- onClick: ()=>{
79
- onClose();
80
- },
81
- size: "small"
82
- })));
83
- };
84
- $2679bd8c144d3995$export$f50a68e3694789ee.displayName = "ModalHeader";
85
-
86
-
87
-
88
-
89
-
90
-
91
-
92
- function $32e971b34c262557$export$5168abbf3ad664a0() {
93
- return {
94
- root: /*#__PURE__*/ (0, $a6cQm$emotion.css)({
95
- padding: `${(0, ($parcel$interopDefault($a6cQm$contentfulf36tokens))).spacingM} ${(0, ($parcel$interopDefault($a6cQm$contentfulf36tokens))).spacingL}`,
96
- color: (0, ($parcel$interopDefault($a6cQm$contentfulf36tokens))).gray700,
97
- fontSize: (0, ($parcel$interopDefault($a6cQm$contentfulf36tokens))).fontSizeM,
98
- fontFamily: (0, ($parcel$interopDefault($a6cQm$contentfulf36tokens))).fontStackPrimary,
99
- lineHeight: (0, ($parcel$interopDefault($a6cQm$contentfulf36tokens))).lineHeightM,
100
- overflowY: "auto",
101
- overflowX: "auto",
102
- boxSizing: "border-box"
103
- })
104
- };
105
- }
106
-
107
-
108
- const $66391c55bbcf9065$export$6da19a24bf249f17 = ({ testId: testId = "cf-ui-modal-content" , className: className , children: children , ...otherProps })=>{
109
- const styles = (0, $32e971b34c262557$export$5168abbf3ad664a0)();
110
- return /*#__PURE__*/ (0, ($parcel$interopDefault($a6cQm$react))).createElement((0, $a6cQm$contentfulf36core.Box), {
111
- ...otherProps,
112
- as: "div",
113
- className: (0, $a6cQm$emotion.cx)(styles.root, className),
114
- testId: testId
115
- }, children);
116
- };
117
- $66391c55bbcf9065$export$6da19a24bf249f17.displayName = "ModalContent";
118
-
119
-
120
-
121
-
122
-
123
- function $a1d799ea27882387$export$9af97f4b0b4c597a(props) {
124
- const modal = (0, $a6cQm$emotion.cx)(/*#__PURE__*/ (0, $a6cQm$emotion.css)({
125
- margin: (0, ($parcel$interopDefault($a6cQm$contentfulf36tokens))).spacing2Xl,
126
- backgroundColor: (0, ($parcel$interopDefault($a6cQm$contentfulf36tokens))).colorWhite,
127
- borderRadius: props.size === "zen" ? 0 : (0, ($parcel$interopDefault($a6cQm$contentfulf36tokens))).borderRadiusMedium,
128
- boxShadow: (0, ($parcel$interopDefault($a6cQm$contentfulf36tokens))).boxShadowHeavy,
129
- maxHeight: `calc(100vh - 1rem * (100 / ${(0, ($parcel$interopDefault($a6cQm$contentfulf36tokens))).fontBaseDefault}))`,
130
- maxWidth: `calc(100vw - 1rem * (100 / ${(0, ($parcel$interopDefault($a6cQm$contentfulf36tokens))).fontBaseDefault}))`,
131
- overflow: "hidden",
132
- display: "flex",
133
- flexDirection: "column"
134
- }), props.allowHeightOverflow ? /*#__PURE__*/ (0, $a6cQm$emotion.css)({
135
- name: "1evlo53",
136
- styles: "overflow:auto;max-height:none;"
137
- }) : null, props.size === "zen" ? /*#__PURE__*/ (0, $a6cQm$emotion.css)({
138
- name: "11c88st",
139
- styles: "max-width:none;max-height:none;margin:0;height:100%;width:100%;"
140
- }) : null, props.className);
141
- return {
142
- portal: /*#__PURE__*/ (0, $a6cQm$emotion.css)({
143
- name: "13o7eu2",
144
- styles: "display:block;"
145
- }),
146
- base: {
147
- root: (0, $a6cQm$emotion.cx)(/*#__PURE__*/ (0, $a6cQm$emotion.css)({
148
- zIndex: (0, ($parcel$interopDefault($a6cQm$contentfulf36tokens))).zIndexModalContent,
149
- position: "relative",
150
- padding: 0,
151
- display: "inline-block",
152
- margin: "0 auto",
153
- textAlign: "left",
154
- outline: "none",
155
- transform: props.size === "zen" ? "scale(1)" : "scale(0.85)",
156
- transition: `transform ${(0, ($parcel$interopDefault($a6cQm$contentfulf36tokens))).transitionDurationDefault} ${(0, ($parcel$interopDefault($a6cQm$contentfulf36tokens))).transitionEasingDefault}`
157
- }), props.size === "zen" ? /*#__PURE__*/ (0, $a6cQm$emotion.css)({
158
- name: "uwwqev",
159
- styles: "width:100%;height:100%;"
160
- }) : null),
161
- afterOpen: /*#__PURE__*/ (0, $a6cQm$emotion.css)({
162
- name: "plgkgv",
163
- styles: "transform:scale(1) !important;"
164
- }),
165
- beforeClose: /*#__PURE__*/ (0, $a6cQm$emotion.css)({
166
- transform: props.size === "zen" ? "scale(1)" : "scale(0.85)"
167
- })
168
- },
169
- modalOverlay: {
170
- root: (0, $a6cQm$emotion.cx)(/*#__PURE__*/ (0, $a6cQm$emotion.css)({
171
- display: "flex",
172
- alignItems: "baseline",
173
- flexWrap: "wrap",
174
- top: 0,
175
- right: 0,
176
- bottom: 0,
177
- left: 0,
178
- zIndex: (0, ($parcel$interopDefault($a6cQm$contentfulf36tokens))).zIndexModal,
179
- opacity: 0,
180
- transition: `opacity ${(0, ($parcel$interopDefault($a6cQm$contentfulf36tokens))).transitionDurationDefault} ${(0, ($parcel$interopDefault($a6cQm$contentfulf36tokens))).transitionEasingDefault}`,
181
- position: "fixed",
182
- overflowY: "auto",
183
- backgroundColor: "rgba(12, 20, 28, 0.74902)",
184
- textAlign: "center"
185
- }), props.position === "center" ? /*#__PURE__*/ (0, $a6cQm$emotion.css)({
186
- name: "1qe4tyl",
187
- styles: "align-items:center;justify-content:center;"
188
- }) : null),
189
- afterOpen: /*#__PURE__*/ (0, $a6cQm$emotion.css)({
190
- name: "whh5e5",
191
- styles: "opacity:1;"
192
- }),
193
- beforeClose: /*#__PURE__*/ (0, $a6cQm$emotion.css)({
194
- name: "q7lffx",
195
- styles: "opacity:0;"
196
- })
197
- },
198
- modal: modal
199
- };
200
- }
201
-
202
-
203
- const $854b6d713fe70fc9$var$ModalSizesMapper = {
204
- medium: "520px",
205
- small: "400px",
206
- large: "700px",
207
- fullWidth: "100vw",
208
- zen: "100vw"
209
- };
210
- function $854b6d713fe70fc9$var$focusFirstWithinNode(node) {
211
- if (node && node.querySelectorAll) {
212
- const elements = node.querySelectorAll("input, button");
213
- if (elements.length > 0) {
214
- const firstElement = elements[0]; // @ts-expect-error focus might be missing
215
- if (typeof firstElement.focus === "function") // @ts-expect-error focus might be missing
216
- firstElement.focus();
217
- }
218
- }
219
- }
220
- const $854b6d713fe70fc9$export$2b77a92f1a5ad772 = ({ allowHeightOverflow: allowHeightOverflow = false , position: position = "center" , shouldCloseOnEscapePress: shouldCloseOnEscapePress = true , shouldCloseOnOverlayClick: shouldCloseOnOverlayClick = true , size: size = "medium" , testId: testId = "cf-ui-modal" , topOffset: topOffset = "50px" , aria: aria , ...otherProps })=>{
221
- const contentRef = $a6cQm$react.useRef(null);
222
- const props = {
223
- ...otherProps,
224
- allowHeightOverflow: allowHeightOverflow,
225
- position: position,
226
- shouldCloseOnEscapePress: shouldCloseOnEscapePress,
227
- shouldCloseOnOverlayClick: shouldCloseOnOverlayClick,
228
- size: size,
229
- testId: testId,
230
- topOffset: topOffset
231
- };
232
- const styles = (0, $a1d799ea27882387$export$9af97f4b0b4c597a)({
233
- position: position,
234
- size: size,
235
- allowHeightOverflow: allowHeightOverflow,
236
- className: otherProps.className
237
- });
238
- $a6cQm$react.useEffect(()=>{
239
- if (props.isShown) setTimeout(()=>{
240
- if (props.initialFocusRef && props.initialFocusRef.current) {
241
- if (props.initialFocusRef.current.focus) props.initialFocusRef.current.focus();
242
- } else if (contentRef.current) $854b6d713fe70fc9$var$focusFirstWithinNode(contentRef.current);
243
- }, 100);
244
- }, [
245
- props.isShown,
246
- props.initialFocusRef
247
- ]);
248
- const renderDefault = ()=>{
249
- return /*#__PURE__*/ $a6cQm$react.createElement($a6cQm$react.Fragment, null, otherProps.title && /*#__PURE__*/ $a6cQm$react.createElement((0, $2679bd8c144d3995$export$f50a68e3694789ee), {
250
- title: otherProps.title,
251
- onClose: props.onClose,
252
- ...otherProps.modalHeaderProps
253
- }), /*#__PURE__*/ $a6cQm$react.createElement((0, $66391c55bbcf9065$export$6da19a24bf249f17), otherProps.modalContentProps, otherProps.children));
254
- };
255
- return /*#__PURE__*/ $a6cQm$react.createElement((0, ($parcel$interopDefault($a6cQm$reactmodal))), {
256
- ariaHideApp: false,
257
- aria: aria,
258
- onRequestClose: props.onClose,
259
- isOpen: otherProps.isShown,
260
- onAfterOpen: props.onAfterOpen,
261
- shouldCloseOnEsc: shouldCloseOnEscapePress,
262
- shouldCloseOnOverlayClick: shouldCloseOnOverlayClick,
263
- shouldFocusAfterRender: true,
264
- shouldReturnFocusAfterClose: true,
265
- portalClassName: styles.portal,
266
- style: {
267
- content: {
268
- top: position === "center" ? 0 : topOffset
269
- }
270
- },
271
- className: {
272
- base: styles.base.root,
273
- afterOpen: styles.base.afterOpen,
274
- beforeClose: styles.base.beforeClose
275
- },
276
- overlayClassName: {
277
- base: styles.modalOverlay.root,
278
- afterOpen: styles.modalOverlay.afterOpen,
279
- beforeClose: styles.modalOverlay.beforeClose
280
- },
281
- closeTimeoutMS: 200,
282
- contentRef: (ref)=>{
283
- contentRef.current = ref;
284
- }
285
- }, /*#__PURE__*/ $a6cQm$react.createElement((0, $a6cQm$contentfulf36core.Box), {
286
- testId: testId,
287
- style: {
288
- width: $854b6d713fe70fc9$var$ModalSizesMapper[size] || size
289
- },
290
- className: styles.modal,
291
- "data-modal-root": true
292
- }, typeof otherProps.children === "function" ? otherProps.children(props) : renderDefault()));
293
- };
294
- $854b6d713fe70fc9$export$2b77a92f1a5ad772.displayName = "Modal";
295
-
296
-
297
-
298
-
299
-
300
-
301
-
302
- const $8b06e393320a8e77$export$c63fb08199be8e0e = ({ testId: testId = "cf-ui-modal-controls" , className: className , children: children , ...otherProps })=>{
303
- return /*#__PURE__*/ (0, ($parcel$interopDefault($a6cQm$react))).createElement((0, $a6cQm$contentfulf36core.Flex), {
304
- ...otherProps,
305
- className: className,
306
- testId: testId,
307
- flexDirection: "row",
308
- justifyContent: "flex-end",
309
- margin: "spacingL",
310
- marginTop: "none"
311
- }, /*#__PURE__*/ (0, ($parcel$interopDefault($a6cQm$react))).createElement((0, $a6cQm$contentfulf36button.ButtonGroup), {
312
- variant: "spaced",
313
- spacing: "spacingS"
314
- }, children));
315
- };
316
- $8b06e393320a8e77$export$c63fb08199be8e0e.displayName = "ModalControls";
317
-
318
-
319
- const $2132db66f9439432$export$2b77a92f1a5ad772 = (0, $854b6d713fe70fc9$export$2b77a92f1a5ad772);
320
- $2132db66f9439432$export$2b77a92f1a5ad772.Content = (0, $66391c55bbcf9065$export$6da19a24bf249f17);
321
- $2132db66f9439432$export$2b77a92f1a5ad772.Header = (0, $2679bd8c144d3995$export$f50a68e3694789ee);
322
- $2132db66f9439432$export$2b77a92f1a5ad772.Controls = (0, $8b06e393320a8e77$export$c63fb08199be8e0e);
323
-
324
-
325
-
326
-
327
-
328
- const $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 })=>{
329
- const cancelRef = (0, ($parcel$interopDefault($a6cQm$react))).useRef(null);
330
- const confirmButton = confirmLabel ? /*#__PURE__*/ (0, ($parcel$interopDefault($a6cQm$react))).createElement((0, $a6cQm$contentfulf36button.Button), {
331
- testId: confirmTestId,
332
- isDisabled: isConfirmDisabled,
333
- isLoading: isConfirmLoading,
334
- variant: intent,
335
- size: "small",
336
- onClick: ()=>onConfirm()
337
- }, confirmLabel) : null;
338
- const cancelButton = cancelLabel ? /*#__PURE__*/ (0, ($parcel$interopDefault($a6cQm$react))).createElement((0, $a6cQm$contentfulf36button.Button), {
339
- testId: cancelTestId,
340
- variant: "secondary",
341
- onClick: onCancel,
342
- size: "small",
343
- ref: initialFocusRef || cancelRef
344
- }, cancelLabel) : null;
345
- return /*#__PURE__*/ (0, ($parcel$interopDefault($a6cQm$react))).createElement((0, $2132db66f9439432$export$2b77a92f1a5ad772), {
346
- testId: testId,
347
- isShown: isShown,
348
- onClose: onCancel,
349
- size: size,
350
- shouldCloseOnOverlayClick: shouldCloseOnOverlayClick,
351
- shouldCloseOnEscapePress: shouldCloseOnEscapePress,
352
- allowHeightOverflow: allowHeightOverflow,
353
- initialFocusRef: cancelRef
354
- }, ()=>{
355
- return /*#__PURE__*/ (0, ($parcel$interopDefault($a6cQm$react))).createElement((0, ($parcel$interopDefault($a6cQm$react))).Fragment, null, /*#__PURE__*/ (0, ($parcel$interopDefault($a6cQm$react))).createElement((0, $2132db66f9439432$export$2b77a92f1a5ad772).Header, {
356
- title: title || "",
357
- ...modalHeaderProps
358
- }), /*#__PURE__*/ (0, ($parcel$interopDefault($a6cQm$react))).createElement((0, $2132db66f9439432$export$2b77a92f1a5ad772).Content, modalContentProps, children), /*#__PURE__*/ (0, ($parcel$interopDefault($a6cQm$react))).createElement((0, $2132db66f9439432$export$2b77a92f1a5ad772).Controls, modalControlsProps, cancelButton, confirmButton));
359
- });
360
- };
361
- $657ddd6e4548962f$export$427af6990c8ff682.displayName = "ModalConfirm";
362
-
363
-
364
-
365
-
366
-
367
-
368
- const $f6dfceab072669eb$var$getRoot = (rootElId)=>{
369
- // Reuse the container if we find it
370
- let rootDom = document.getElementById(rootElId);
371
- if (rootDom !== null) return rootDom;
372
- // Otherwise create it
373
- rootDom = document.createElement("div");
374
- rootDom.setAttribute("id", rootElId);
375
- document.body.appendChild(rootDom);
376
- return rootDom;
377
- };
378
- const $f6dfceab072669eb$var$openModalsIds = new Map();
379
- function $f6dfceab072669eb$var$closeAll() {
380
- $f6dfceab072669eb$var$openModalsIds.forEach(async ({ render: render , currentConfig: currentConfig , delay: delay }, rootElId)=>{
381
- const config = {
382
- ...currentConfig,
383
- isShown: false
384
- };
385
- render(config);
386
- await new Promise((resolveDelay)=>setTimeout(resolveDelay, delay));
387
- (0, ($parcel$interopDefault($a6cQm$reactdom))).unmountComponentAtNode($f6dfceab072669eb$var$getRoot(rootElId));
388
- $f6dfceab072669eb$var$openModalsIds.delete(rootElId);
389
- });
390
- } // eslint-disable-next-line @typescript-eslint/no-explicit-any
391
- function $f6dfceab072669eb$var$open(componentRenderer, options = {}) {
392
- options = {
393
- delay: 300,
394
- ...options
395
- }; // Allow components to specify if they wish to reuse the modal container
396
- const rootElId = `modals-root${options.modalId || Date.now()}`;
397
- const rootDom = $f6dfceab072669eb$var$getRoot(rootElId);
398
- return new Promise((resolve)=>{
399
- let currentConfig = {
400
- onClose: onClose1,
401
- isShown: true
402
- };
403
- function render({ onClose: onClose , isShown: isShown }) {
404
- (0, ($parcel$interopDefault($a6cQm$reactdom))).render(componentRenderer({
405
- onClose: onClose,
406
- isShown: isShown
407
- }), rootDom);
408
- }
409
- async function onClose1(arg) {
410
- currentConfig = {
411
- ...currentConfig,
412
- isShown: false
413
- };
414
- render(currentConfig);
415
- await new Promise((resolveDelay)=>setTimeout(resolveDelay, options.delay));
416
- (0, ($parcel$interopDefault($a6cQm$reactdom))).unmountComponentAtNode(rootDom);
417
- rootDom.remove();
418
- $f6dfceab072669eb$var$openModalsIds.delete(rootElId);
419
- resolve(arg);
420
- }
421
- render(currentConfig);
422
- $f6dfceab072669eb$var$openModalsIds.set(rootElId, {
423
- render: render,
424
- currentConfig: currentConfig,
425
- delay: options.delay
426
- });
427
- });
428
- }
429
- const $f6dfceab072669eb$export$e21b828b42c54a37 = {
430
- open: $f6dfceab072669eb$var$open,
431
- closeAll: $f6dfceab072669eb$var$closeAll
432
- };
433
-
434
-
435
-
436
-
437
- //# sourceMappingURL=main.js.map
package/dist/main.js.map DELETED
@@ -1 +0,0 @@
1
- {"mappings":"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","sources":["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 { 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, ExpandProps } 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: { [key in ModalSizeType]: string } = {\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 * @default true\n */\n shouldCloseOnOverlayClick?: boolean;\n /**\n * Boolean indicating if pressing the esc key should close the overlay.\n * @default true\n */\n shouldCloseOnEscapePress?: boolean;\n /**\n * Indicating if modal is centered or linked to the top\n * @default center\n */\n position?: ModalPositionType;\n /**\n * Top offset if position is 'top'\n * @default 50px\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 * @default medium\n */\n size?: ModalSizeType | string | number;\n /**\n * Are modals higher than viewport allowed\n * @default false\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 const Modal = ({\n allowHeightOverflow = false,\n position = 'center',\n shouldCloseOnEscapePress = true,\n shouldCloseOnOverlayClick = true,\n size = 'medium',\n testId = 'cf-ui-modal',\n topOffset = '50px',\n aria,\n ...otherProps\n}: ExpandProps<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 <>\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 </>\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 style={{\n content: {\n top: position === 'center' ? 0 : topOffset,\n },\n }}\n className={{\n base: styles.base.root,\n afterOpen: styles.base.afterOpen,\n beforeClose: styles.base.beforeClose,\n }}\n overlayClassName={{\n base: styles.modalOverlay.root,\n afterOpen: styles.modalOverlay.afterOpen,\n beforeClose: styles.modalOverlay.beforeClose,\n }}\n closeTimeoutMS={200}\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\nModal.displayName = 'Modal';\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 const 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=\"h2\" 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\nModalHeader.displayName = 'ModalHeader';\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 const 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\nModalContent.displayName = 'ModalContent';\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';\n\nimport type { ModalProps } from './Modal';\n\nexport function getModalStyles(props: {\n size: ModalProps['size'];\n position: ModalProps['position'];\n allowHeightOverflow?: boolean;\n className?: string;\n}) {\n const modal = cx(\n css({\n margin: tokens.spacing2Xl,\n backgroundColor: tokens.colorWhite,\n borderRadius: props.size === 'zen' ? 0 : 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 transform: props.size === 'zen' ? 'scale(1)' : 'scale(0.85)',\n transition: `transform ${tokens.transitionDurationDefault} ${tokens.transitionEasingDefault}`,\n }),\n props.size === 'zen'\n ? css({\n width: '100%',\n height: '100%',\n })\n : null,\n ),\n afterOpen: css({\n transform: 'scale(1) !important',\n }),\n beforeClose: css({\n transform: props.size === 'zen' ? 'scale(1)' : 'scale(0.85)',\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,\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 const 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\nModalControls.displayName = 'ModalControls';\n","import React from 'react';\n\nimport { Modal } from '../CompoundModal';\nimport type { ModalProps } from '../Modal';\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?: ModalProps['size'];\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any -- we don't know the type of element to give initial focus\n initialFocusRef?: React.RefObject<any>;\n\n testId?: string;\n confirmTestId?: string;\n cancelTestId?: string;\n children: React.ReactNode;\n}\n\nexport const 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\nModalConfirm.displayName = 'ModalConfirm';\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","ExpandProps","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","content","top","base","root","afterOpen","beforeClose","modalOverlay","ref","width","modal","displayName","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","margin","backgroundColor","colorWhite","boxShadow","boxShadowHeavy","maxHeight","fontBaseDefault","maxWidth","overflow","display","flexDirection","zIndex","zIndexModalContent","textAlign","outline","transform","transition","transitionDurationDefault","transitionEasingDefault","alignItems","flexWrap","bottom","left","zIndexModal","opacity","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"}