@zendeskgarden/react-modals 8.75.1 → 8.76.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 (50) hide show
  1. package/dist/esm/elements/Body.js +42 -0
  2. package/dist/esm/elements/Close.js +53 -0
  3. package/dist/esm/elements/DrawerModal/Body.js +43 -0
  4. package/dist/esm/elements/DrawerModal/Close.js +54 -0
  5. package/dist/esm/elements/DrawerModal/DrawerModal.js +187 -0
  6. package/dist/esm/elements/DrawerModal/Footer.js +37 -0
  7. package/dist/esm/elements/DrawerModal/FooterItem.js +37 -0
  8. package/dist/esm/elements/DrawerModal/Header.js +69 -0
  9. package/dist/esm/elements/Footer.js +43 -0
  10. package/dist/esm/elements/FooterItem.js +36 -0
  11. package/dist/esm/elements/Header.js +70 -0
  12. package/dist/esm/elements/Modal.js +185 -0
  13. package/dist/esm/elements/TooltipModal/Body.js +43 -0
  14. package/dist/esm/elements/TooltipModal/Close.js +49 -0
  15. package/dist/esm/elements/TooltipModal/Footer.js +37 -0
  16. package/dist/esm/elements/TooltipModal/FooterItem.js +37 -0
  17. package/dist/esm/elements/TooltipModal/Title.js +68 -0
  18. package/dist/esm/elements/TooltipModal/TooltipModal.js +178 -0
  19. package/dist/esm/index.js +15 -0
  20. package/dist/esm/node_modules/@zendeskgarden/svg-icons/src/16/alert-error-stroke.svg.js +37 -0
  21. package/dist/esm/node_modules/@zendeskgarden/svg-icons/src/16/x-stroke.svg.js +26 -0
  22. package/dist/esm/styled/StyledBackdrop.js +34 -0
  23. package/dist/esm/styled/StyledBody.js +22 -0
  24. package/dist/esm/styled/StyledClose.js +35 -0
  25. package/dist/esm/styled/StyledDangerIcon.js +19 -0
  26. package/dist/esm/styled/StyledDrawerModal.js +36 -0
  27. package/dist/esm/styled/StyledDrawerModalBody.js +23 -0
  28. package/dist/esm/styled/StyledDrawerModalClose.js +28 -0
  29. package/dist/esm/styled/StyledDrawerModalFooter.js +22 -0
  30. package/dist/esm/styled/StyledDrawerModalFooterItem.js +23 -0
  31. package/dist/esm/styled/StyledDrawerModalHeader.js +24 -0
  32. package/dist/esm/styled/StyledFooter.js +22 -0
  33. package/dist/esm/styled/StyledFooterItem.js +22 -0
  34. package/dist/esm/styled/StyledHeader.js +23 -0
  35. package/dist/esm/styled/StyledModal.js +50 -0
  36. package/dist/esm/styled/StyledTooltipModal.js +34 -0
  37. package/dist/esm/styled/StyledTooltipModalBackdrop.js +22 -0
  38. package/dist/esm/styled/StyledTooltipModalBody.js +22 -0
  39. package/dist/esm/styled/StyledTooltipModalClose.js +23 -0
  40. package/dist/esm/styled/StyledTooltipModalFooter.js +22 -0
  41. package/dist/esm/styled/StyledTooltipModalFooterItem.js +23 -0
  42. package/dist/esm/styled/StyledTooltipModalTitle.js +28 -0
  43. package/dist/esm/styled/StyledTooltipWrapper.js +27 -0
  44. package/dist/esm/types/index.js +9 -0
  45. package/dist/esm/utils/gardenPlacements.js +62 -0
  46. package/dist/esm/utils/useModalContext.js +18 -0
  47. package/dist/esm/utils/useTooltipModalContext.js +18 -0
  48. package/dist/index.cjs.js +47 -63
  49. package/package.json +5 -5
  50. package/dist/index.esm.js +0 -1160
package/dist/index.esm.js DELETED
@@ -1,1160 +0,0 @@
1
- /**
2
- * Copyright Zendesk, Inc.
3
- *
4
- * Use of this source code is governed under the Apache License, Version 2.0
5
- * found at http://www.apache.org/licenses/LICENSE-2.0.
6
- */
7
-
8
- import * as React from 'react';
9
- import React__default, { createContext, useContext, forwardRef, useRef, useState, useEffect, useMemo } from 'react';
10
- import ReactDOM, { createPortal } from 'react-dom';
11
- import styled, { keyframes, css, ThemeContext } from 'styled-components';
12
- import PropTypes from 'prop-types';
13
- import { getColorV8, retrieveComponentStyles, DEFAULT_THEME, getLineHeight, focusStyles, mediaQuery, menuStyles, arrowStyles, useDocument, useText } from '@zendeskgarden/react-theming';
14
- import { useModal } from '@zendeskgarden/container-modal';
15
- import { useFocusVisible } from '@zendeskgarden/container-focusvisible';
16
- import mergeRefs from 'react-merge-refs';
17
- import isWindow from 'dom-helpers/isWindow';
18
- import ownerDocument from 'dom-helpers/ownerDocument';
19
- import ownerWindow from 'dom-helpers/ownerWindow';
20
- import css$1 from 'dom-helpers/css';
21
- import getScrollbarSize from 'dom-helpers/scrollbarSize';
22
- import { usePopper } from 'react-popper';
23
- import { CSSTransition } from 'react-transition-group';
24
- import activeElement from 'dom-helpers/activeElement';
25
-
26
- function _extends$2() {
27
- _extends$2 = Object.assign ? Object.assign.bind() : function (target) {
28
- for (var i = 1; i < arguments.length; i++) {
29
- var source = arguments[i];
30
- for (var key in source) {
31
- if (Object.prototype.hasOwnProperty.call(source, key)) {
32
- target[key] = source[key];
33
- }
34
- }
35
- }
36
- return target;
37
- };
38
- return _extends$2.apply(this, arguments);
39
- }
40
-
41
- const COMPONENT_ID$j = 'modals.backdrop';
42
- const animationName$1 = keyframes(["0%{opacity:0;}100%{opacity:1;}"]);
43
- const animationStyles$1 = props => {
44
- if (props.isAnimated) {
45
- return css(["animation:", " 0.15s ease-in;"], animationName$1);
46
- }
47
- return '';
48
- };
49
- const StyledBackdrop = styled.div.attrs({
50
- 'data-garden-id': COMPONENT_ID$j,
51
- 'data-garden-version': '8.75.1'
52
- }).withConfig({
53
- displayName: "StyledBackdrop",
54
- componentId: "sc-mzdjpo-0"
55
- })(["display:flex;position:fixed;inset:0;align-items:", ";justify-content:", ";z-index:400;background-color:", ";overflow:auto;-webkit-overflow-scrolling:touch;font-family:", ";direction:", ";", ";", ";"], props => props.isCentered && 'center', props => props.isCentered && 'center', props => getColorV8('neutralHue', 800, props.theme, 0.85), props => props.theme.fonts.system, props => props.theme.rtl && 'rtl', animationStyles$1, props => retrieveComponentStyles(COMPONENT_ID$j, props));
56
- StyledBackdrop.defaultProps = {
57
- theme: DEFAULT_THEME
58
- };
59
- StyledBackdrop.propTypes = {
60
- isCentered: PropTypes.bool,
61
- isAnimated: PropTypes.bool
62
- };
63
-
64
- const COMPONENT_ID$i = 'modals.body';
65
- const StyledBody = styled.div.attrs({
66
- 'data-garden-id': COMPONENT_ID$i,
67
- 'data-garden-version': '8.75.1'
68
- }).withConfig({
69
- displayName: "StyledBody",
70
- componentId: "sc-14rzecg-0"
71
- })(["display:block;margin:0;padding:", ";height:100%;overflow:auto;line-height:", ";color:", ";font-size:", ";", ";"], props => `${props.theme.space.base * 5}px ${props.theme.space.base * 10}px`, props => getLineHeight(props.theme.lineHeights.md, props.theme.fontSizes.md), props => getColorV8('foreground', 600 , props.theme), props => props.theme.fontSizes.md, props => retrieveComponentStyles(COMPONENT_ID$i, props));
72
- StyledBody.defaultProps = {
73
- theme: DEFAULT_THEME
74
- };
75
-
76
- const COMPONENT_ID$h = 'modals.close';
77
- const colorStyles = props => {
78
- const backgroundColor = 'primaryHue';
79
- const foregroundColor = 'neutralHue';
80
- return css(["background-color:transparent;color:", ";&:hover{background-color:", ";color:", ";}", " &:active{transition:background-color 0.1s ease-in-out,color 0.1s ease-in-out;background-color:", ";color:", ";}"], getColorV8(foregroundColor, 600, props.theme), getColorV8(backgroundColor, 600, props.theme, 0.08), getColorV8(foregroundColor, 700, props.theme), focusStyles({
81
- theme: props.theme,
82
- hue: backgroundColor
83
- }), getColorV8(backgroundColor, 600, props.theme, 0.2), getColorV8(foregroundColor, 800, props.theme));
84
- };
85
- const BASE_MULTIPLIERS$1 = {
86
- top: 2.5,
87
- side: 6.5,
88
- size: 10
89
- };
90
- const StyledClose = styled.button.attrs({
91
- 'data-garden-id': COMPONENT_ID$h,
92
- 'data-garden-version': '8.75.1'
93
- }).withConfig({
94
- displayName: "StyledClose",
95
- componentId: "sc-iseudj-0"
96
- })(["display:block;position:absolute;top:", "px;", ":", ";transition:box-shadow 0.1s ease-in-out,background-color 0.25s ease-in-out,color 0.25s ease-in-out;border:none;border-radius:50%;background-color:transparent;cursor:pointer;padding:0;width:", "px;height:", "px;overflow:hidden;text-decoration:none;font-size:0;user-select:none;&::-moz-focus-inner{border:0;}", " & > svg{vertical-align:middle;}", ";"], props => props.theme.space.base * BASE_MULTIPLIERS$1.top, props => props.theme.rtl ? 'left' : 'right', props => `${props.theme.space.base * BASE_MULTIPLIERS$1.side}px`, props => props.theme.space.base * BASE_MULTIPLIERS$1.size, props => props.theme.space.base * BASE_MULTIPLIERS$1.size, props => colorStyles(props), props => retrieveComponentStyles(COMPONENT_ID$h, props));
97
- StyledClose.defaultProps = {
98
- theme: DEFAULT_THEME
99
- };
100
-
101
- const COMPONENT_ID$g = 'modals.footer';
102
- const StyledFooter = styled.div.attrs({
103
- 'data-garden-id': COMPONENT_ID$g,
104
- 'data-garden-version': '8.75.1'
105
- }).withConfig({
106
- displayName: "StyledFooter",
107
- componentId: "sc-d8pfdu-0"
108
- })(["display:flex;flex-shrink:0;align-items:center;justify-content:flex-end;border-top:", ";padding:", ";", ";"], props => props.isLarge && `${props.theme.borders.sm} ${getColorV8('neutralHue', 200, props.theme)}`, props => props.isLarge ? `${props.theme.space.base * 8}px ${props.theme.space.base * 10}px` : `${props.theme.space.base * 5}px ${props.theme.space.base * 10}px ${props.theme.space.base * 8}px`, props => retrieveComponentStyles(COMPONENT_ID$g, props));
109
- StyledFooter.defaultProps = {
110
- theme: DEFAULT_THEME
111
- };
112
-
113
- const COMPONENT_ID$f = 'modals.footer_item';
114
- const StyledFooterItem = styled.span.attrs({
115
- 'data-garden-id': COMPONENT_ID$f,
116
- 'data-garden-version': '8.75.1'
117
- }).withConfig({
118
- displayName: "StyledFooterItem",
119
- componentId: "sc-1mb76hl-0"
120
- })(["display:flex;margin-", ":", "px;min-width:0;&:first-child{margin-", ":0;}", ";"], props => props.theme.rtl ? 'right' : 'left', props => props.theme.space.base * 5, props => props.theme.rtl ? 'right' : 'left', props => retrieveComponentStyles(COMPONENT_ID$f, props));
121
- StyledFooterItem.defaultProps = {
122
- theme: DEFAULT_THEME
123
- };
124
-
125
- const COMPONENT_ID$e = 'modals.header';
126
- const StyledHeader = styled.div.attrs({
127
- 'data-garden-id': COMPONENT_ID$e,
128
- 'data-garden-version': '8.75.1'
129
- }).withConfig({
130
- displayName: "StyledHeader",
131
- componentId: "sc-1787r9v-0"
132
- })(["display:block;position:", ";margin:0;border-bottom:", " ", ";padding:", ";", " line-height:", ";color:", ";font-size:", ";font-weight:", ";", ";"], props => props.isDanger && 'relative', props => props.theme.borders.sm, getColorV8('neutralHue', 200), props => `${props.theme.space.base * 5}px ${props.theme.space.base * 10}px`, props => props.isCloseButtonPresent && `padding-${props.theme.rtl ? 'left' : 'right'}: ${props.theme.space.base * (BASE_MULTIPLIERS$1.size + BASE_MULTIPLIERS$1.side + 2)}px;`, props => getLineHeight(props.theme.lineHeights.md, props.theme.fontSizes.md), props => props.isDanger ? getColorV8('dangerHue', 600, props.theme) : getColorV8('foreground', 600 , props.theme), props => props.theme.fontSizes.md, props => props.theme.fontWeights.semibold, props => retrieveComponentStyles(COMPONENT_ID$e, props));
133
- StyledHeader.defaultProps = {
134
- theme: DEFAULT_THEME
135
- };
136
-
137
- var _g, _circle;
138
- function _extends$1() { _extends$1 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$1.apply(this, arguments); }
139
- var SvgAlertErrorStroke = function SvgAlertErrorStroke(props) {
140
- return /*#__PURE__*/React.createElement("svg", _extends$1({
141
- xmlns: "http://www.w3.org/2000/svg",
142
- width: 16,
143
- height: 16,
144
- focusable: "false",
145
- viewBox: "0 0 16 16",
146
- "aria-hidden": "true"
147
- }, props), _g || (_g = /*#__PURE__*/React.createElement("g", {
148
- fill: "none",
149
- stroke: "currentColor"
150
- }, /*#__PURE__*/React.createElement("circle", {
151
- cx: 7.5,
152
- cy: 8.5,
153
- r: 7
154
- }), /*#__PURE__*/React.createElement("path", {
155
- strokeLinecap: "round",
156
- d: "M7.5 4.5V9"
157
- }))), _circle || (_circle = /*#__PURE__*/React.createElement("circle", {
158
- cx: 7.5,
159
- cy: 12,
160
- r: 1,
161
- fill: "currentColor"
162
- })));
163
- };
164
-
165
- const StyledDangerIcon = styled(SvgAlertErrorStroke).withConfig({
166
- displayName: "StyledDangerIcon",
167
- componentId: "sc-1kwbb39-0"
168
- })(["position:absolute;top:", "px;", ":", ";"], props => props.theme.space.base * 5.5, props => props.theme.rtl ? 'right' : 'left', props => `${props.theme.space.base * 4}px`);
169
- StyledDangerIcon.defaultProps = {
170
- theme: DEFAULT_THEME
171
- };
172
-
173
- const COMPONENT_ID$d = 'modals.modal';
174
- const animationName = keyframes(["0%{transform:scale(0);opacity:0;}50%{transform:scale(1.05);}100%{opacity:1;}"]);
175
- const animationStyles = props => {
176
- if (props.isAnimated) {
177
- return css(["animation:", " 0.3s ease-in;"], animationName);
178
- }
179
- return '';
180
- };
181
- const boxShadow$1 = props => {
182
- const {
183
- theme
184
- } = props;
185
- const {
186
- space,
187
- shadows
188
- } = theme;
189
- const offsetY = `${space.base * 5}px`;
190
- const blurRadius = `${space.base * 7}px`;
191
- const color = getColorV8('neutralHue', 800, theme, 0.35);
192
- return shadows.lg(offsetY, blurRadius, color);
193
- };
194
- const sizeStyles$1 = props => {
195
- return css(["", "{width:", ";}"], mediaQuery('up', props.isLarge ? 'md' : 'sm', props.theme), props.isLarge ? props.theme.breakpoints.md : props.theme.breakpoints.sm);
196
- };
197
- const StyledModal = styled.div.attrs({
198
- 'data-garden-id': COMPONENT_ID$d,
199
- 'data-garden-version': '8.75.1'
200
- }).withConfig({
201
- displayName: "StyledModal",
202
- componentId: "sc-1pe1axu-0"
203
- })(["display:flex;position:fixed;flex-direction:column;animation-delay:0.01s;margin:", ";border-radius:", ";box-shadow:", ";background-color:", ";min-height:60px;max-height:calc(100vh - ", "px);overflow:auto;direction:", ";", ";", ";&:focus{outline:none;}@media (max-height:399px){top:", "px;bottom:auto;margin-bottom:", "px;max-height:none;}@media screen and (-ms-high-contrast:active),screen and (-ms-high-contrast:none){right:", ";bottom:", ";transform:", ";}", ";"], props => props.isCentered ? '0' : `${props.theme.space.base * 12}px`, props => props.theme.borderRadii.md, boxShadow$1, props => getColorV8('background', 600 , props.theme), props => props.theme.space.base * 24, props => props.theme.rtl && 'rtl', animationStyles, sizeStyles$1, props => props.theme.space.base * 6, props => props.theme.space.base * 6, props => props.isCentered && '50%', props => props.isCentered && '50%', props => props.isCentered && 'translate(50%, 50%)', props => retrieveComponentStyles(COMPONENT_ID$d, props));
204
- StyledModal.propTypes = {
205
- isLarge: PropTypes.bool,
206
- isAnimated: PropTypes.bool
207
- };
208
- StyledModal.defaultProps = {
209
- theme: DEFAULT_THEME
210
- };
211
-
212
- const COMPONENT_ID$c = 'modals.tooltip_modal.backdrop';
213
- const StyledTooltipModalBackdrop = styled.div.attrs({
214
- 'data-garden-id': COMPONENT_ID$c,
215
- 'data-garden-version': '8.75.1'
216
- }).withConfig({
217
- displayName: "StyledTooltipModalBackdrop",
218
- componentId: "sc-1yaomgq-0"
219
- })(["position:fixed;inset:0;z-index:400;overflow:hidden;-webkit-overflow-scrolling:touch;font-family:", ";direction:", ";&.garden-tooltip-modal-transition-exit-active{pointer-events:none;}&.garden-tooltip-modal-transition-exit-active div{transition:opacity 200ms;opacity:0;}", ";"], props => props.theme.fonts.system, props => props.theme.rtl && 'rtl', props => retrieveComponentStyles(COMPONENT_ID$c, props));
220
- StyledTooltipModalBackdrop.defaultProps = {
221
- theme: DEFAULT_THEME
222
- };
223
-
224
- function getPopperPlacement(gardenPlacement) {
225
- const gardenToPopperMapping = {
226
- auto: 'auto',
227
- top: 'top',
228
- 'top-start': 'top-start',
229
- 'top-end': 'top-end',
230
- bottom: 'bottom',
231
- 'bottom-start': 'bottom-start',
232
- 'bottom-end': 'bottom-end',
233
- end: 'right',
234
- 'end-top': 'right-start',
235
- 'end-bottom': 'right-end',
236
- start: 'left',
237
- 'start-top': 'left-start',
238
- 'start-bottom': 'left-end'
239
- };
240
- return gardenToPopperMapping[gardenPlacement];
241
- }
242
- function getRtlPopperPlacement(gardenPlacement) {
243
- const rtlPlacementMappings = {
244
- left: 'right',
245
- 'left-start': 'right-start',
246
- 'left-end': 'right-end',
247
- 'top-start': 'top-end',
248
- 'top-end': 'top-start',
249
- right: 'left',
250
- 'right-start': 'left-start',
251
- 'right-end': 'left-end',
252
- 'bottom-start': 'bottom-end',
253
- 'bottom-end': 'bottom-start'
254
- };
255
- const popperPlacement = getPopperPlacement(gardenPlacement);
256
- return rtlPlacementMappings[popperPlacement] || popperPlacement;
257
- }
258
- function getArrowPosition(popperPlacement) {
259
- const arrowPositionMappings = {
260
- top: 'bottom',
261
- 'top-start': 'bottom-left',
262
- 'top-end': 'bottom-right',
263
- right: 'left',
264
- 'right-start': 'left-top',
265
- 'right-end': 'left-bottom',
266
- bottom: 'top',
267
- 'bottom-start': 'top-left',
268
- 'bottom-end': 'top-right',
269
- left: 'right',
270
- 'left-start': 'right-top',
271
- 'left-end': 'right-bottom'
272
- };
273
- return arrowPositionMappings[popperPlacement] || 'top';
274
- }
275
- function getMenuPosition(popperPlacement) {
276
- return popperPlacement ? popperPlacement.split('-')[0] : 'bottom';
277
- }
278
-
279
- const StyledTooltipWrapper = styled.div.attrs(props => ({
280
- className: props.isAnimated && 'is-animated'
281
- })).withConfig({
282
- displayName: "StyledTooltipWrapper",
283
- componentId: "sc-1xk05kf-0"
284
- })(["", ";"], props => menuStyles(getMenuPosition(props.placement), {
285
- theme: props.theme,
286
- hidden: false,
287
- margin: '0',
288
- zIndex: props.zIndex,
289
- animationModifier: '.is-animated'
290
- }));
291
- StyledTooltipWrapper.defaultProps = {
292
- theme: DEFAULT_THEME
293
- };
294
-
295
- const COMPONENT_ID$b = 'modals.tooltip_modal';
296
- const StyledTooltipModal = styled.div.attrs(props => ({
297
- 'data-garden-id': COMPONENT_ID$b,
298
- 'data-garden-version': '8.75.1',
299
- className: props.isAnimated && 'is-animated'
300
- })).withConfig({
301
- displayName: "StyledTooltipModal",
302
- componentId: "sc-42ubfr-0"
303
- })(["padding:", "px;width:400px;", ";", ";"], props => props.theme.space.base * 5, props => {
304
- const computedArrowStyles = arrowStyles(getArrowPosition(props.placement), {
305
- size: `${props.theme.space.base * 2}px`,
306
- inset: '1px',
307
- animationModifier: '.is-animated'
308
- });
309
- if (props.isAnimated) {
310
- return props.hasArrow && props.transitionState === 'entered' && computedArrowStyles;
311
- }
312
- return props.hasArrow && computedArrowStyles;
313
- }, props => retrieveComponentStyles(COMPONENT_ID$b, props));
314
- StyledTooltipModal.defaultProps = {
315
- theme: DEFAULT_THEME
316
- };
317
-
318
- const COMPONENT_ID$a = 'modals.tooltip_modal.title';
319
- const sizeStyles = props => `
320
- /* stylelint-disable-next-line property-no-unknown */
321
- padding-${props.theme.rtl ? 'left' : 'right'}: ${props.theme.space.base * 8}px;
322
- line-height: ${getLineHeight(props.theme.lineHeights.md, props.theme.fontSizes.md)};
323
- font-size: ${props.theme.fontSizes.md};
324
- `;
325
- const StyledTooltipModalTitle = styled.div.attrs({
326
- 'data-garden-id': COMPONENT_ID$a,
327
- 'data-garden-version': '8.75.1'
328
- }).withConfig({
329
- displayName: "StyledTooltipModalTitle",
330
- componentId: "sc-11xjgjs-0"
331
- })(["margin:0;color:", ";font-weight:", ";", ";", ";"], props => getColorV8('foreground', 600 , props.theme), props => props.theme.fontWeights.semibold, props => sizeStyles(props), props => retrieveComponentStyles(COMPONENT_ID$a, props));
332
- StyledTooltipModalTitle.defaultProps = {
333
- theme: DEFAULT_THEME
334
- };
335
-
336
- const COMPONENT_ID$9 = 'modals.tooltip_modal.body';
337
- const StyledTooltipModalBody = styled.div.attrs({
338
- 'data-garden-id': COMPONENT_ID$9,
339
- 'data-garden-version': '8.75.1'
340
- }).withConfig({
341
- displayName: "StyledTooltipModalBody",
342
- componentId: "sc-195dkzj-0"
343
- })(["display:block;margin:0;padding-top:", "px;line-height:", ";color:", ";font-size:", ";", ";"], props => props.theme.space.base * 1.5, props => getLineHeight(props.theme.lineHeights.md, props.theme.fontSizes.md), props => getColorV8('foreground', 600 , props.theme), props => props.theme.fontSizes.md, props => retrieveComponentStyles(COMPONENT_ID$9, props));
344
- StyledTooltipModalBody.defaultProps = {
345
- theme: DEFAULT_THEME
346
- };
347
-
348
- const COMPONENT_ID$8 = 'modals.tooltip_modal.footer';
349
- const StyledTooltipModalFooter = styled.div.attrs({
350
- 'data-garden-id': COMPONENT_ID$8,
351
- 'data-garden-version': '8.75.1'
352
- }).withConfig({
353
- displayName: "StyledTooltipModalFooter",
354
- componentId: "sc-fm36a9-0"
355
- })(["display:flex;flex-shrink:0;align-items:center;justify-content:flex-end;padding-top:", "px;", ";"], p => p.theme.space.base * 5, props => retrieveComponentStyles(COMPONENT_ID$8, props));
356
- StyledTooltipModalFooter.defaultProps = {
357
- theme: DEFAULT_THEME
358
- };
359
-
360
- const COMPONENT_ID$7 = 'modals.tooltip_modal.footer_item';
361
- const StyledTooltipModalFooterItem = styled(StyledFooterItem).attrs({
362
- 'data-garden-id': COMPONENT_ID$7,
363
- 'data-garden-version': '8.75.1'
364
- }).withConfig({
365
- displayName: "StyledTooltipModalFooterItem",
366
- componentId: "sc-1nahj6p-0"
367
- })(["", ";"], props => retrieveComponentStyles(COMPONENT_ID$7, props));
368
- StyledTooltipModalFooterItem.defaultProps = {
369
- theme: DEFAULT_THEME
370
- };
371
-
372
- const COMPONENT_ID$6 = 'modals.tooltip_modal.close';
373
- const StyledTooltipModalClose = styled(StyledClose).attrs({
374
- 'data-garden-id': COMPONENT_ID$6,
375
- 'data-garden-version': '8.75.1'
376
- }).withConfig({
377
- displayName: "StyledTooltipModalClose",
378
- componentId: "sc-1h2ke3q-0"
379
- })(["top:", "px;", ":", ";width:", "px;height:", "px;", ";"], props => props.theme.space.base * 3.5, props => props.theme.rtl ? 'left' : 'right', props => `${props.theme.space.base * 3}px`, props => props.theme.space.base * 8, props => props.theme.space.base * 8, props => retrieveComponentStyles(COMPONENT_ID$6, props));
380
- StyledTooltipModalClose.defaultProps = {
381
- theme: DEFAULT_THEME
382
- };
383
-
384
- const COMPONENT_ID$5 = 'modals.drawer_modal';
385
- const DRAWER_WIDTH = 380;
386
- const boxShadow = props => {
387
- const {
388
- theme
389
- } = props;
390
- const {
391
- space,
392
- shadows
393
- } = theme;
394
- const offsetY = `${space.base * 5}px`;
395
- const blurRadius = `${space.base * 7}px`;
396
- const color = getColorV8('neutralHue', 800, theme, 0.35);
397
- return shadows.lg(offsetY, blurRadius, color);
398
- };
399
- const StyledDrawerModal = styled.div.attrs({
400
- 'data-garden-id': COMPONENT_ID$5,
401
- 'data-garden-version': '8.75.1'
402
- }).withConfig({
403
- displayName: "StyledDrawerModal",
404
- componentId: "sc-i1sake-0"
405
- })(["display:flex;position:fixed;top:0;", ":0;flex-direction:column;z-index:500;box-shadow:", ";background:", ";width:", "px;height:100%;overflow:auto;-webkit-overflow-scrolling:touch;font-family:", ";direction:", ";&.garden-drawer-transition-enter{transform:translateX(", "px);}&.garden-drawer-transition-enter-active{transform:translateX(0);transition:transform 0.25s ease-in-out;}&.garden-drawer-transition-exit-active{transform:translateX(", "px);transition:transform 0.25s ease-in-out;}&:focus{outline:none;}", ";"], props => props.theme.rtl ? 'left' : 'right', boxShadow, props => getColorV8('background', 600 , props.theme), DRAWER_WIDTH, props => props.theme.fonts.system, props => props.theme.rtl && 'rtl', props => props.theme.rtl ? -DRAWER_WIDTH : DRAWER_WIDTH, props => props.theme.rtl ? -DRAWER_WIDTH : DRAWER_WIDTH, props => retrieveComponentStyles(COMPONENT_ID$5, props));
406
- StyledDrawerModal.defaultProps = {
407
- theme: DEFAULT_THEME
408
- };
409
-
410
- const COMPONENT_ID$4 = 'modals.drawer_modal.close';
411
- const BASE_MULTIPLIERS = {
412
- top: BASE_MULTIPLIERS$1.top,
413
- side: 2,
414
- size: BASE_MULTIPLIERS$1.size
415
- };
416
- const StyledDrawerModalClose = styled(StyledClose).attrs({
417
- 'data-garden-id': COMPONENT_ID$4,
418
- 'data-garden-version': '8.75.1'
419
- }).withConfig({
420
- displayName: "StyledDrawerModalClose",
421
- componentId: "sc-hrnaom-0"
422
- })(["", ":", ";", ";"], props => props.theme.rtl ? 'left' : 'right', props => `${props.theme.space.base * BASE_MULTIPLIERS.side}px`, props => retrieveComponentStyles(COMPONENT_ID$4, props));
423
- StyledDrawerModalClose.defaultProps = {
424
- theme: DEFAULT_THEME
425
- };
426
-
427
- const COMPONENT_ID$3 = 'modals.drawer_modal.header';
428
- const StyledDrawerModalHeader = styled(StyledHeader).attrs({
429
- 'data-garden-id': COMPONENT_ID$3,
430
- 'data-garden-version': '8.75.1'
431
- }).withConfig({
432
- displayName: "StyledDrawerModalHeader",
433
- componentId: "sc-1u04rqw-0"
434
- })(["padding:", "px;", " ", ";"], props => props.theme.space.base * 5, props => props.isCloseButtonPresent && `padding-${props.theme.rtl ? 'left' : 'right'}: ${props.theme.space.base * (BASE_MULTIPLIERS.size + BASE_MULTIPLIERS.side + 2)}px;`, props => retrieveComponentStyles(COMPONENT_ID$3, props));
435
- StyledDrawerModalHeader.defaultProps = {
436
- theme: DEFAULT_THEME
437
- };
438
-
439
- const COMPONENT_ID$2 = 'modals.drawer_modal.body';
440
- const StyledDrawerModalBody = styled(StyledBody).attrs({
441
- 'data-garden-id': COMPONENT_ID$2,
442
- 'data-garden-version': '8.75.1'
443
- }).withConfig({
444
- displayName: "StyledDrawerModalBody",
445
- componentId: "sc-yafe2y-0"
446
- })(["padding:", "px;", ";"], props => props.theme.space.base * 5, props => retrieveComponentStyles(COMPONENT_ID$2, props));
447
- StyledDrawerModalBody.defaultProps = {
448
- theme: DEFAULT_THEME
449
- };
450
-
451
- const COMPONENT_ID$1 = 'modals.drawer_modal.footer';
452
- const StyledDrawerModalFooter = styled.div.attrs({
453
- 'data-garden-id': COMPONENT_ID$1,
454
- 'data-garden-version': '8.75.1'
455
- }).withConfig({
456
- displayName: "StyledDrawerModalFooter",
457
- componentId: "sc-17if4ka-0"
458
- })(["display:flex;flex-shrink:0;justify-content:flex-end;border-top:", ";padding:", "px;", ";"], props => `${props.theme.borders.sm} ${getColorV8('neutralHue', 200, props.theme)}`, props => props.theme.space.base * 5, props => retrieveComponentStyles(COMPONENT_ID$1, props));
459
- StyledDrawerModalFooter.defaultProps = {
460
- theme: DEFAULT_THEME
461
- };
462
-
463
- const COMPONENT_ID = 'modals.drawer_modal.footer_item';
464
- const StyledDrawerModalFooterItem = styled(StyledFooterItem).attrs({
465
- 'data-garden-id': COMPONENT_ID,
466
- 'data-garden-version': '8.75.1'
467
- }).withConfig({
468
- displayName: "StyledDrawerModalFooterItem",
469
- componentId: "sc-1vbl885-0"
470
- })(["", ";"], props => retrieveComponentStyles(COMPONENT_ID, props));
471
- StyledDrawerModalFooterItem.defaultProps = {
472
- theme: DEFAULT_THEME
473
- };
474
-
475
- const ModalsContext = createContext(undefined);
476
- const useModalContext = () => {
477
- const context = useContext(ModalsContext);
478
- if (context === undefined) {
479
- throw new Error('useModalContext must be used within a ModalsContext.Provider');
480
- }
481
- return context;
482
- };
483
-
484
- const isOverflowing = element => {
485
- const doc = ownerDocument(element);
486
- const win = ownerWindow(doc);
487
- const isBody = element && element.tagName.toLowerCase() === 'body';
488
- if (!isWindow(doc) && !isBody) {
489
- return element.scrollHeight > element.clientHeight;
490
- }
491
- const style = win.getComputedStyle(doc.body);
492
- const marginLeft = parseInt(style.getPropertyValue('margin-left'), 10);
493
- const marginRight = parseInt(style.getPropertyValue('margin-right'), 10);
494
- return marginLeft + doc.body.clientWidth + marginRight < win.innerWidth;
495
- };
496
- const Modal = forwardRef((_ref, ref) => {
497
- let {
498
- backdropProps,
499
- children,
500
- onClose,
501
- isLarge,
502
- isCentered,
503
- isAnimated,
504
- id,
505
- appendToNode,
506
- focusOnMount,
507
- restoreFocus,
508
- ...modalProps
509
- } = _ref;
510
- const theme = useContext(ThemeContext);
511
- const modalRef = useRef(null);
512
- const environment = useDocument(theme);
513
- const [isCloseButtonPresent, setIsCloseButtonPresent] = useState(false);
514
- const [hasHeader, setHasHeader] = useState(false);
515
- const {
516
- getBackdropProps,
517
- getModalProps,
518
- getTitleProps,
519
- getContentProps,
520
- getCloseProps
521
- } = useModal({
522
- idPrefix: id,
523
- onClose,
524
- modalRef,
525
- focusOnMount,
526
- restoreFocus
527
- });
528
- useFocusVisible({
529
- scope: modalRef,
530
- relativeDocument: environment
531
- });
532
- useEffect(() => {
533
- if (!environment) {
534
- return undefined;
535
- }
536
- const htmlElement = environment.querySelector('html');
537
- const bodyElement = environment.querySelector('body');
538
- let previousHtmlOverflow;
539
- let previousBodyPaddingRight;
540
- if (bodyElement) {
541
- if (isOverflowing(bodyElement)) {
542
- const scrollbarSize = getScrollbarSize();
543
- const bodyPaddingRight = parseInt(css$1(bodyElement, 'paddingRight') || '0', 10);
544
- previousBodyPaddingRight = bodyElement.style.paddingRight;
545
- bodyElement.style.paddingRight = `${bodyPaddingRight + scrollbarSize}px`;
546
- }
547
- if (htmlElement) {
548
- previousHtmlOverflow = htmlElement.style.overflow;
549
- htmlElement.style.overflow = 'hidden';
550
- }
551
- return () => {
552
- if (htmlElement) {
553
- htmlElement.style.overflow = previousHtmlOverflow;
554
- }
555
- bodyElement.style.paddingRight = previousBodyPaddingRight;
556
- };
557
- }
558
- return undefined;
559
- }, [environment]);
560
- const rootNode = useMemo(() => {
561
- if (appendToNode) {
562
- return appendToNode;
563
- }
564
- if (environment) {
565
- return environment.body;
566
- }
567
- return undefined;
568
- }, [appendToNode, environment]);
569
- const value = useMemo(() => ({
570
- isLarge,
571
- isCloseButtonPresent,
572
- hasHeader,
573
- setHasHeader,
574
- getTitleProps,
575
- getContentProps,
576
- getCloseProps,
577
- setIsCloseButtonPresent
578
- }), [isLarge, hasHeader, isCloseButtonPresent, getTitleProps, getContentProps, getCloseProps]);
579
- const modalContainerProps = getModalProps({
580
- 'aria-describedby': undefined,
581
- ...(hasHeader ? {} : {
582
- 'aria-labelledby': undefined
583
- })
584
- });
585
- const attribute = hasHeader ? 'aria-labelledby' : 'aria-label';
586
- const defaultValue = hasHeader ? modalContainerProps['aria-labelledby'] : 'Modal dialog';
587
- const labelValue = hasHeader ? modalContainerProps['aria-labelledby'] : modalProps['aria-label'];
588
- const ariaProps = {
589
- [attribute]: useText(Modal, {
590
- [attribute]: labelValue
591
- }, attribute, defaultValue)
592
- };
593
- if (!rootNode) {
594
- return null;
595
- }
596
- return createPortal( React__default.createElement(ModalsContext.Provider, {
597
- value: value
598
- }, React__default.createElement(StyledBackdrop, _extends$2({
599
- isCentered: isCentered,
600
- isAnimated: isAnimated
601
- }, getBackdropProps(backdropProps)), React__default.createElement(StyledModal, _extends$2({
602
- isCentered: isCentered,
603
- isAnimated: isAnimated,
604
- isLarge: isLarge
605
- }, modalContainerProps, ariaProps, modalProps, {
606
- ref: mergeRefs([ref, modalRef])
607
- }), children))), rootNode);
608
- });
609
- Modal.displayName = 'Modal';
610
- Modal.propTypes = {
611
- backdropProps: PropTypes.object,
612
- isLarge: PropTypes.bool,
613
- isAnimated: PropTypes.bool,
614
- isCentered: PropTypes.bool,
615
- focusOnMount: PropTypes.bool,
616
- restoreFocus: PropTypes.bool,
617
- onClose: PropTypes.func,
618
- appendToNode: PropTypes.any
619
- };
620
- Modal.defaultProps = {
621
- isAnimated: true,
622
- isCentered: true
623
- };
624
-
625
- const Body$2 = forwardRef((props, ref) => {
626
- const {
627
- getContentProps
628
- } = useModalContext();
629
- return React__default.createElement(StyledBody, _extends$2({}, getContentProps(props), {
630
- ref: ref
631
- }));
632
- });
633
- Body$2.displayName = 'Body';
634
-
635
- var _path;
636
- function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
637
- var SvgXStroke = function SvgXStroke(props) {
638
- return /*#__PURE__*/React.createElement("svg", _extends({
639
- xmlns: "http://www.w3.org/2000/svg",
640
- width: 16,
641
- height: 16,
642
- focusable: "false",
643
- viewBox: "0 0 16 16",
644
- "aria-hidden": "true"
645
- }, props), _path || (_path = /*#__PURE__*/React.createElement("path", {
646
- stroke: "currentColor",
647
- strokeLinecap: "round",
648
- d: "M3 13L13 3m0 10L3 3"
649
- })));
650
- };
651
-
652
- const Close$2 = forwardRef((props, ref) => {
653
- const {
654
- getCloseProps,
655
- setIsCloseButtonPresent
656
- } = useModalContext();
657
- useEffect(() => {
658
- setIsCloseButtonPresent(true);
659
- return () => setIsCloseButtonPresent(false);
660
- });
661
- const ariaLabel = useText(Close$2, props, 'aria-label', 'Close modal');
662
- return React__default.createElement(StyledClose, _extends$2({}, getCloseProps({
663
- ...props,
664
- 'aria-label': ariaLabel
665
- }), {
666
- ref: ref
667
- }), React__default.createElement(SvgXStroke, null));
668
- });
669
- Close$2.displayName = 'Close';
670
-
671
- const Footer$2 = React__default.forwardRef((props, ref) => {
672
- const {
673
- isLarge
674
- } = useModalContext();
675
- return React__default.createElement(StyledFooter, _extends$2({
676
- ref: ref,
677
- isLarge: isLarge
678
- }, props));
679
- });
680
- Footer$2.displayName = 'Footer';
681
-
682
- const FooterItem$2 = React__default.forwardRef((props, ref) => React__default.createElement(StyledFooterItem, _extends$2({
683
- ref: ref
684
- }, props)));
685
- FooterItem$2.displayName = 'FooterItem';
686
-
687
- const Header$1 = forwardRef((_ref, ref) => {
688
- let {
689
- children,
690
- tag,
691
- ...other
692
- } = _ref;
693
- const {
694
- isCloseButtonPresent,
695
- hasHeader,
696
- setHasHeader,
697
- getTitleProps
698
- } = useModalContext();
699
- useEffect(() => {
700
- if (!hasHeader && setHasHeader) {
701
- setHasHeader(true);
702
- }
703
- return () => {
704
- if (hasHeader && setHasHeader) {
705
- setHasHeader(false);
706
- }
707
- };
708
- }, [hasHeader, setHasHeader]);
709
- return React__default.createElement(StyledHeader, _extends$2({}, getTitleProps(other), {
710
- as: tag,
711
- isCloseButtonPresent: isCloseButtonPresent,
712
- ref: ref
713
- }), other.isDanger && React__default.createElement(StyledDangerIcon, null), children);
714
- });
715
- Header$1.displayName = 'Header';
716
- Header$1.propTypes = {
717
- isDanger: PropTypes.bool,
718
- tag: PropTypes.any
719
- };
720
- Header$1.defaultProps = {
721
- tag: 'div'
722
- };
723
-
724
- const TooltipModalContext = createContext(undefined);
725
- const useTooltipModalContext = () => {
726
- const context = useContext(TooltipModalContext);
727
- if (context === undefined) {
728
- throw new Error('Element must be used within a TooltipModal component.');
729
- }
730
- return context;
731
- };
732
-
733
- const TitleComponent = forwardRef((_ref, ref) => {
734
- let {
735
- children,
736
- tag,
737
- ...other
738
- } = _ref;
739
- const {
740
- getTitleProps,
741
- hasTitle,
742
- setHasTitle
743
- } = useTooltipModalContext();
744
- useEffect(() => {
745
- if (!hasTitle && setHasTitle) {
746
- setHasTitle(true);
747
- }
748
- return () => {
749
- if (hasTitle && setHasTitle) {
750
- setHasTitle(false);
751
- }
752
- };
753
- }, [hasTitle, setHasTitle]);
754
- return React__default.createElement(StyledTooltipModalTitle, _extends$2({}, getTitleProps(other), {
755
- as: tag,
756
- ref: ref
757
- }), children);
758
- });
759
- TitleComponent.displayName = 'TooltipModal.Title';
760
- TitleComponent.propTypes = {
761
- tag: PropTypes.any
762
- };
763
- TitleComponent.defaultProps = {
764
- tag: 'div'
765
- };
766
- const Title = TitleComponent;
767
-
768
- const BodyComponent$1 = forwardRef((props, ref) => {
769
- const {
770
- getContentProps
771
- } = useTooltipModalContext();
772
- return React__default.createElement(StyledTooltipModalBody, _extends$2({}, getContentProps(props), {
773
- ref: ref
774
- }));
775
- });
776
- BodyComponent$1.displayName = 'TooltipModal.Body';
777
- const Body$1 = BodyComponent$1;
778
-
779
- const CloseComponent$1 = forwardRef((props, ref) => {
780
- const {
781
- getCloseProps
782
- } = useTooltipModalContext();
783
- const ariaLabel = useText(CloseComponent$1, props, 'aria-label', 'Close tooltip');
784
- return React__default.createElement(StyledTooltipModalClose, _extends$2({}, getCloseProps({
785
- ...props,
786
- 'aria-label': ariaLabel
787
- }), {
788
- ref: ref
789
- }), React__default.createElement(SvgXStroke, null));
790
- });
791
- CloseComponent$1.displayName = 'TooltipModal.Close';
792
- const Close$1 = CloseComponent$1;
793
-
794
- const FooterComponent$1 = forwardRef((props, ref) => React__default.createElement(StyledTooltipModalFooter, _extends$2({
795
- ref: ref
796
- }, props)));
797
- FooterComponent$1.displayName = 'TooltipModal.Footer';
798
- const Footer$1 = FooterComponent$1;
799
-
800
- const FooterItemComponent$1 = forwardRef((props, ref) => React__default.createElement(StyledTooltipModalFooterItem, _extends$2({
801
- ref: ref
802
- }, props)));
803
- FooterItemComponent$1.displayName = 'TooltipModal.FooterItem';
804
- const FooterItem$1 = FooterItemComponent$1;
805
-
806
- const TooltipModalComponent = React__default.forwardRef((_ref, ref) => {
807
- let {
808
- appendToNode,
809
- referenceElement,
810
- popperModifiers,
811
- placement,
812
- onClose,
813
- hasArrow,
814
- isAnimated,
815
- zIndex,
816
- backdropProps,
817
- focusOnMount,
818
- restoreFocus,
819
- id,
820
- ...props
821
- } = _ref;
822
- const theme = useContext(ThemeContext);
823
- const previousReferenceElementRef = useRef();
824
- const modalRef = useRef(null);
825
- const transitionRef = useRef(null);
826
- const [popperElement, setPopperElement] = useState();
827
- const [hasTitle, setHasTitle] = useState(false);
828
- const {
829
- getTitleProps,
830
- getCloseProps,
831
- getContentProps,
832
- getBackdropProps,
833
- getModalProps
834
- } = useModal({
835
- idPrefix: id,
836
- onClose,
837
- modalRef,
838
- focusOnMount,
839
- restoreFocus: false
840
- });
841
- useEffect(() => {
842
- if (!referenceElement && previousReferenceElementRef.current && restoreFocus) {
843
- previousReferenceElementRef.current.focus();
844
- }
845
- previousReferenceElementRef.current = referenceElement;
846
- }, [referenceElement, restoreFocus]);
847
- const popperPlacement = useMemo(() => theme.rtl ? getRtlPopperPlacement(placement) : getPopperPlacement(placement), [placement, theme.rtl]);
848
- const {
849
- styles,
850
- attributes,
851
- state
852
- } = usePopper(referenceElement, popperElement, {
853
- placement: popperPlacement,
854
- modifiers: [{
855
- name: 'offset',
856
- options: {
857
- offset: [0, theme.space.base * 3]
858
- }
859
- },
860
- ...(popperModifiers || [])]
861
- });
862
- const modalProps = getModalProps({
863
- 'aria-describedby': undefined,
864
- ...(hasTitle ? {} : {
865
- 'aria-labelledby': undefined
866
- })
867
- });
868
- const attribute = hasTitle ? 'aria-labelledby' : 'aria-label';
869
- const defaultValue = hasTitle ? modalProps['aria-labelledby'] : 'Modal dialog';
870
- const labelValue = hasTitle ? modalProps['aria-labelledby'] : props['aria-label'];
871
- const ariaProps = {
872
- [attribute]: useText(TooltipModalComponent, {
873
- [attribute]: labelValue
874
- }, attribute, defaultValue)
875
- };
876
- const value = {
877
- hasTitle,
878
- setHasTitle,
879
- getTitleProps,
880
- getContentProps,
881
- getCloseProps
882
- };
883
- const Node = React__default.createElement(CSSTransition, {
884
- unmountOnExit: true,
885
- timeout: isAnimated ? 200 : 0,
886
- in: Boolean(referenceElement),
887
- classNames: isAnimated ? 'garden-tooltip-modal-transition' : '',
888
- nodeRef: transitionRef
889
- }, transitionState => {
890
- return React__default.createElement(TooltipModalContext.Provider, {
891
- value: value
892
- }, React__default.createElement(StyledTooltipModalBackdrop, _extends$2({}, getBackdropProps(), backdropProps, {
893
- ref: transitionRef
894
- }), React__default.createElement(StyledTooltipWrapper, _extends$2({
895
- ref: setPopperElement,
896
- style: styles.popper,
897
- placement: state ? state.placement : undefined,
898
- zIndex: zIndex,
899
- isAnimated: isAnimated
900
- }, attributes.popper), React__default.createElement(StyledTooltipModal, _extends$2({
901
- transitionState: transitionState,
902
- placement: state ? state.placement : 'top',
903
- hasArrow: hasArrow,
904
- isAnimated: isAnimated
905
- }, modalProps, ariaProps, props, {
906
- ref: mergeRefs([modalRef, ref])
907
- })))));
908
- });
909
- return appendToNode ? createPortal(Node, appendToNode) : Node;
910
- });
911
- TooltipModalComponent.displayName = 'TooltipModal';
912
- TooltipModalComponent.defaultProps = {
913
- placement: 'auto',
914
- hasArrow: true,
915
- focusOnMount: true,
916
- restoreFocus: true
917
- };
918
- TooltipModalComponent.propTypes = {
919
- appendToNode: PropTypes.any,
920
- referenceElement: PropTypes.any,
921
- popperModifiers: PropTypes.any,
922
- placement: PropTypes.any,
923
- isAnimated: PropTypes.bool,
924
- hasArrow: PropTypes.bool,
925
- zIndex: PropTypes.number,
926
- onClose: PropTypes.func,
927
- backdropProps: PropTypes.any,
928
- focusOnMount: PropTypes.bool,
929
- restoreFocus: PropTypes.bool
930
- };
931
- const TooltipModal = TooltipModalComponent;
932
- TooltipModal.Body = Body$1;
933
- TooltipModal.Close = Close$1;
934
- TooltipModal.Footer = Footer$1;
935
- TooltipModal.FooterItem = FooterItem$1;
936
- TooltipModal.Title = Title;
937
-
938
- const HeaderComponent = forwardRef((_ref, ref) => {
939
- let {
940
- tag,
941
- ...other
942
- } = _ref;
943
- const {
944
- isCloseButtonPresent,
945
- hasHeader,
946
- setHasHeader,
947
- getTitleProps
948
- } = useModalContext();
949
- useEffect(() => {
950
- if (!hasHeader && setHasHeader) {
951
- setHasHeader(true);
952
- }
953
- return () => {
954
- if (hasHeader && setHasHeader) {
955
- setHasHeader(false);
956
- }
957
- };
958
- }, [hasHeader, setHasHeader]);
959
- return React__default.createElement(StyledDrawerModalHeader, _extends$2({}, getTitleProps(other), {
960
- as: tag,
961
- isCloseButtonPresent: isCloseButtonPresent,
962
- ref: ref
963
- }));
964
- });
965
- HeaderComponent.displayName = 'DrawerModal.Header';
966
- HeaderComponent.propTypes = {
967
- tag: PropTypes.any
968
- };
969
- HeaderComponent.defaultProps = {
970
- tag: 'div'
971
- };
972
- const Header = HeaderComponent;
973
-
974
- const BodyComponent = forwardRef((props, ref) => {
975
- const {
976
- getContentProps
977
- } = useModalContext();
978
- return React__default.createElement(StyledDrawerModalBody, _extends$2({}, getContentProps(props), {
979
- ref: ref
980
- }), props.children);
981
- });
982
- BodyComponent.displayName = 'DrawerModal.Body';
983
- const Body = BodyComponent;
984
-
985
- const CloseComponent = forwardRef((props, ref) => {
986
- const {
987
- getCloseProps,
988
- setIsCloseButtonPresent
989
- } = useModalContext();
990
- useEffect(() => {
991
- setIsCloseButtonPresent(true);
992
- return () => setIsCloseButtonPresent(false);
993
- });
994
- const ariaLabel = useText(CloseComponent, props, 'aria-label', 'Close drawer');
995
- return React__default.createElement(StyledDrawerModalClose, _extends$2({}, getCloseProps({
996
- ...props,
997
- 'aria-label': ariaLabel
998
- }), {
999
- ref: ref
1000
- }), React__default.createElement(SvgXStroke, null));
1001
- });
1002
- CloseComponent.displayName = 'DrawerModal.Close';
1003
- const Close = CloseComponent;
1004
-
1005
- const FooterComponent = forwardRef((props, ref) => React__default.createElement(StyledDrawerModalFooter, _extends$2({
1006
- ref: ref
1007
- }, props)));
1008
- FooterComponent.displayName = 'DrawerModal.Footer';
1009
- const Footer = FooterComponent;
1010
-
1011
- const FooterItemComponent = forwardRef((props, ref) => React__default.createElement(StyledDrawerModalFooterItem, _extends$2({
1012
- ref: ref
1013
- }, props)));
1014
- FooterItemComponent.displayName = 'DrawerModal.FooterItem';
1015
- const FooterItem = FooterItemComponent;
1016
-
1017
- const DrawerModalComponent = forwardRef((_ref, ref) => {
1018
- let {
1019
- id,
1020
- isOpen,
1021
- onClose,
1022
- backdropProps,
1023
- appendToNode,
1024
- focusOnMount,
1025
- restoreFocus,
1026
- ...props
1027
- } = _ref;
1028
- const modalRef = useRef(null);
1029
- const transitionRef = useRef(null);
1030
- const triggerRef = useRef(null);
1031
- const theme = useContext(ThemeContext);
1032
- const environment = useDocument(theme);
1033
- const [isCloseButtonPresent, setIsCloseButtonPresent] = useState(false);
1034
- const [hasHeader, setHasHeader] = useState(false);
1035
- useFocusVisible({
1036
- scope: modalRef,
1037
- relativeDocument: modalRef.current
1038
- });
1039
- const {
1040
- getTitleProps,
1041
- getCloseProps,
1042
- getContentProps,
1043
- getBackdropProps,
1044
- getModalProps
1045
- } = useModal({
1046
- idPrefix: id,
1047
- modalRef,
1048
- focusOnMount: false ,
1049
- restoreFocus: false ,
1050
- environment,
1051
- onClose
1052
- });
1053
- useEffect(() => {
1054
- if (environment) {
1055
- if (isOpen && modalRef.current) {
1056
- if (restoreFocus) {
1057
- triggerRef.current = activeElement(environment);
1058
- }
1059
- if (focusOnMount) {
1060
- modalRef.current.focus();
1061
- }
1062
- }
1063
- if (!isOpen && triggerRef.current) {
1064
- triggerRef.current.focus();
1065
- }
1066
- }
1067
- return () => {
1068
- if (!(restoreFocus && isOpen)) {
1069
- triggerRef.current = null;
1070
- }
1071
- };
1072
- }, [environment, restoreFocus, focusOnMount, isOpen]);
1073
- useEffect(() => {
1074
- if (!environment) {
1075
- return undefined;
1076
- }
1077
- const htmlElement = environment.querySelector('html');
1078
- let previousHtmlOverflow;
1079
- if (htmlElement && isOpen) {
1080
- previousHtmlOverflow = htmlElement.style.overflow;
1081
- htmlElement.style.overflow = 'hidden';
1082
- }
1083
- return () => {
1084
- if (htmlElement && isOpen) {
1085
- htmlElement.style.overflow = previousHtmlOverflow;
1086
- }
1087
- };
1088
- }, [environment, isOpen]);
1089
- const rootNode = useMemo(() => {
1090
- if (appendToNode) {
1091
- return appendToNode;
1092
- }
1093
- if (environment) {
1094
- return environment.body;
1095
- }
1096
- return undefined;
1097
- }, [appendToNode, environment]);
1098
- const value = useMemo(() => ({
1099
- isCloseButtonPresent,
1100
- hasHeader,
1101
- setHasHeader,
1102
- getTitleProps,
1103
- getContentProps,
1104
- getCloseProps,
1105
- setIsCloseButtonPresent
1106
- }), [isCloseButtonPresent, hasHeader, getTitleProps, getContentProps, getCloseProps]);
1107
- const modalProps = getModalProps({
1108
- 'aria-describedby': undefined,
1109
- ...(hasHeader ? {} : {
1110
- 'aria-labelledby': undefined
1111
- })
1112
- });
1113
- const attribute = hasHeader ? 'aria-labelledby' : 'aria-label';
1114
- const defaultValue = hasHeader ? modalProps['aria-labelledby'] : 'Modal dialog';
1115
- const labelValue = hasHeader ? modalProps['aria-labelledby'] : props['aria-label'];
1116
- const ariaProps = {
1117
- [attribute]: useText(DrawerModalComponent, {
1118
- [attribute]: labelValue
1119
- }, attribute, defaultValue)
1120
- };
1121
- if (!rootNode) {
1122
- return null;
1123
- }
1124
- return ReactDOM.createPortal( React__default.createElement(ModalsContext.Provider, {
1125
- value: value
1126
- }, React__default.createElement(CSSTransition, {
1127
- in: isOpen,
1128
- timeout: 250,
1129
- unmountOnExit: true,
1130
- classNames: "garden-drawer-transition",
1131
- nodeRef: transitionRef
1132
- }, React__default.createElement(StyledBackdrop, _extends$2({
1133
- isAnimated: true
1134
- }, getBackdropProps(backdropProps)), React__default.createElement(StyledDrawerModal, _extends$2({}, modalProps, ariaProps, props, {
1135
- ref: mergeRefs([ref, modalRef, transitionRef])
1136
- }))))), rootNode);
1137
- });
1138
- DrawerModalComponent.displayName = 'DrawerModal';
1139
- DrawerModalComponent.propTypes = {
1140
- backdropProps: PropTypes.object,
1141
- focusOnMount: PropTypes.bool,
1142
- restoreFocus: PropTypes.bool,
1143
- onClose: PropTypes.func,
1144
- appendToNode: PropTypes.any,
1145
- isOpen: PropTypes.bool
1146
- };
1147
- DrawerModalComponent.defaultProps = {
1148
- focusOnMount: true ,
1149
- restoreFocus: true
1150
- };
1151
- const DrawerModal = DrawerModalComponent;
1152
- DrawerModal.Body = Body;
1153
- DrawerModal.Close = Close;
1154
- DrawerModal.Footer = Footer;
1155
- DrawerModal.FooterItem = FooterItem;
1156
- DrawerModal.Header = Header;
1157
-
1158
- const PLACEMENT = ['auto', 'top', 'top-start', 'top-end', 'bottom', 'bottom-start', 'bottom-end', 'end', 'end-top', 'end-bottom', 'start', 'start-top', 'start-bottom'];
1159
-
1160
- export { Body$2 as Body, Close$2 as Close, DrawerModal, Footer$2 as Footer, FooterItem$2 as FooterItem, Header$1 as Header, Modal, PLACEMENT, TooltipModal };