@zendeskgarden/react-modals 9.0.0-next.7 → 9.0.0-next.8

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 (49) 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/Drawer/Body.js +43 -0
  4. package/dist/esm/elements/Drawer/Close.js +54 -0
  5. package/dist/esm/elements/Drawer/Drawer.js +182 -0
  6. package/dist/esm/elements/Drawer/Footer.js +37 -0
  7. package/dist/esm/elements/Drawer/FooterItem.js +37 -0
  8. package/dist/esm/elements/Drawer/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 +191 -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 +192 -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 +37 -0
  25. package/dist/esm/styled/StyledDangerIcon.js +19 -0
  26. package/dist/esm/styled/StyledDrawer.js +36 -0
  27. package/dist/esm/styled/StyledDrawerBody.js +23 -0
  28. package/dist/esm/styled/StyledDrawerClose.js +28 -0
  29. package/dist/esm/styled/StyledDrawerFooter.js +22 -0
  30. package/dist/esm/styled/StyledDrawerFooterItem.js +23 -0
  31. package/dist/esm/styled/StyledDrawerHeader.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 +33 -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 +25 -0
  44. package/dist/esm/types/index.js +11 -0
  45. package/dist/esm/utils/useModalContext.js +18 -0
  46. package/dist/esm/utils/useTooltipModalContext.js +18 -0
  47. package/dist/index.cjs.js +49 -63
  48. package/package.json +5 -5
  49. package/dist/index.esm.js +0 -1116
@@ -0,0 +1,191 @@
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
+ import React__default, { forwardRef, useContext, useRef, useState, useEffect, useMemo } from 'react';
8
+ import { createPortal } from 'react-dom';
9
+ import { ThemeContext } from 'styled-components';
10
+ import PropTypes from 'prop-types';
11
+ import { useDocument, useText } from '@zendeskgarden/react-theming';
12
+ import { useModal } from '@zendeskgarden/container-modal';
13
+ import { mergeRefs } from 'react-merge-refs';
14
+ import isWindow from 'dom-helpers/isWindow';
15
+ import ownerDocument from 'dom-helpers/ownerDocument';
16
+ import ownerWindow from 'dom-helpers/ownerWindow';
17
+ import css from 'dom-helpers/css';
18
+ import getScrollbarSize from 'dom-helpers/scrollbarSize';
19
+ import { StyledBackdrop } from '../styled/StyledBackdrop.js';
20
+ import '../styled/StyledBody.js';
21
+ import '../styled/StyledClose.js';
22
+ import '../styled/StyledFooter.js';
23
+ import '../styled/StyledFooterItem.js';
24
+ import '../styled/StyledHeader.js';
25
+ import '../styled/StyledDangerIcon.js';
26
+ import { StyledModal } from '../styled/StyledModal.js';
27
+ import '../styled/StyledTooltipModalBackdrop.js';
28
+ import '../styled/StyledTooltipWrapper.js';
29
+ import '../styled/StyledTooltipModal.js';
30
+ import '../styled/StyledTooltipModalTitle.js';
31
+ import '../styled/StyledTooltipModalBody.js';
32
+ import '../styled/StyledTooltipModalFooter.js';
33
+ import '../styled/StyledTooltipModalFooterItem.js';
34
+ import '../styled/StyledTooltipModalClose.js';
35
+ import '../styled/StyledDrawer.js';
36
+ import '../styled/StyledDrawerHeader.js';
37
+ import '../styled/StyledDrawerClose.js';
38
+ import '../styled/StyledDrawerBody.js';
39
+ import '../styled/StyledDrawerFooter.js';
40
+ import '../styled/StyledDrawerFooterItem.js';
41
+ import { ModalsContext } from '../utils/useModalContext.js';
42
+ import { Body } from './Body.js';
43
+ import { Close } from './Close.js';
44
+ import { Footer } from './Footer.js';
45
+ import { FooterItem } from './FooterItem.js';
46
+ import { Header } from './Header.js';
47
+
48
+ const isOverflowing = element => {
49
+ const doc = ownerDocument(element);
50
+ const win = ownerWindow(doc);
51
+ const isBody = element && element.tagName.toLowerCase() === 'body';
52
+ if (!isWindow(doc) && !isBody) {
53
+ return element.scrollHeight > element.clientHeight;
54
+ }
55
+ const style = win.getComputedStyle(doc.body);
56
+ const marginLeft = parseInt(style.getPropertyValue('margin-left'), 10);
57
+ const marginRight = parseInt(style.getPropertyValue('margin-right'), 10);
58
+ return marginLeft + doc.body.clientWidth + marginRight < win.innerWidth;
59
+ };
60
+ const ModalComponent = forwardRef((_ref, ref) => {
61
+ let {
62
+ backdropProps,
63
+ children,
64
+ onClose,
65
+ isLarge,
66
+ isCentered,
67
+ isAnimated,
68
+ id,
69
+ appendToNode,
70
+ focusOnMount,
71
+ restoreFocus,
72
+ ...modalProps
73
+ } = _ref;
74
+ const theme = useContext(ThemeContext);
75
+ const modalRef = useRef(null);
76
+ const environment = useDocument(theme);
77
+ const [isCloseButtonPresent, setIsCloseButtonPresent] = useState(false);
78
+ const [hasHeader, setHasHeader] = useState(false);
79
+ const {
80
+ getBackdropProps,
81
+ getModalProps,
82
+ getTitleProps,
83
+ getContentProps,
84
+ getCloseProps
85
+ } = useModal({
86
+ idPrefix: id,
87
+ onClose,
88
+ modalRef,
89
+ focusOnMount,
90
+ restoreFocus
91
+ });
92
+ useEffect(() => {
93
+ if (!environment) {
94
+ return undefined;
95
+ }
96
+ const htmlElement = environment.querySelector('html');
97
+ const bodyElement = environment.querySelector('body');
98
+ let previousHtmlOverflow;
99
+ let previousBodyPaddingRight;
100
+ if (bodyElement) {
101
+ if (isOverflowing(bodyElement)) {
102
+ const scrollbarSize = getScrollbarSize();
103
+ const bodyPaddingRight = parseInt(css(bodyElement, 'paddingRight') || '0', 10);
104
+ previousBodyPaddingRight = bodyElement.style.paddingRight;
105
+ bodyElement.style.paddingRight = `${bodyPaddingRight + scrollbarSize}px`;
106
+ }
107
+ if (htmlElement) {
108
+ previousHtmlOverflow = htmlElement.style.overflow;
109
+ htmlElement.style.overflow = 'hidden';
110
+ }
111
+ return () => {
112
+ if (htmlElement) {
113
+ htmlElement.style.overflow = previousHtmlOverflow;
114
+ }
115
+ bodyElement.style.paddingRight = previousBodyPaddingRight;
116
+ };
117
+ }
118
+ return undefined;
119
+ }, [environment]);
120
+ const rootNode = useMemo(() => {
121
+ if (appendToNode) {
122
+ return appendToNode;
123
+ }
124
+ if (environment) {
125
+ return environment.body;
126
+ }
127
+ return undefined;
128
+ }, [appendToNode, environment]);
129
+ const value = useMemo(() => ({
130
+ isLarge,
131
+ isCloseButtonPresent,
132
+ hasHeader,
133
+ setHasHeader,
134
+ getTitleProps,
135
+ getContentProps,
136
+ getCloseProps,
137
+ setIsCloseButtonPresent
138
+ }), [isLarge, hasHeader, isCloseButtonPresent, getTitleProps, getContentProps, getCloseProps]);
139
+ const modalContainerProps = getModalProps({
140
+ 'aria-describedby': undefined,
141
+ ...(hasHeader ? {} : {
142
+ 'aria-labelledby': undefined
143
+ })
144
+ });
145
+ const attribute = hasHeader ? 'aria-labelledby' : 'aria-label';
146
+ const defaultValue = hasHeader ? modalContainerProps['aria-labelledby'] : 'Modal dialog';
147
+ const labelValue = hasHeader ? modalContainerProps['aria-labelledby'] : modalProps['aria-label'];
148
+ const ariaProps = {
149
+ [attribute]: useText(ModalComponent, {
150
+ [attribute]: labelValue
151
+ }, attribute, defaultValue)
152
+ };
153
+ if (!rootNode) {
154
+ return null;
155
+ }
156
+ return createPortal( React__default.createElement(ModalsContext.Provider, {
157
+ value: value
158
+ }, React__default.createElement(StyledBackdrop, Object.assign({
159
+ isCentered: isCentered,
160
+ isAnimated: isAnimated
161
+ }, getBackdropProps(backdropProps)), React__default.createElement(StyledModal, Object.assign({
162
+ isCentered: isCentered,
163
+ isAnimated: isAnimated,
164
+ isLarge: isLarge
165
+ }, modalContainerProps, ariaProps, modalProps, {
166
+ ref: mergeRefs([ref, modalRef])
167
+ }), children))), rootNode);
168
+ });
169
+ ModalComponent.displayName = 'Modal';
170
+ ModalComponent.propTypes = {
171
+ backdropProps: PropTypes.object,
172
+ isLarge: PropTypes.bool,
173
+ isAnimated: PropTypes.bool,
174
+ isCentered: PropTypes.bool,
175
+ focusOnMount: PropTypes.bool,
176
+ restoreFocus: PropTypes.bool,
177
+ onClose: PropTypes.func,
178
+ appendToNode: PropTypes.any
179
+ };
180
+ ModalComponent.defaultProps = {
181
+ isAnimated: true,
182
+ isCentered: true
183
+ };
184
+ const Modal = ModalComponent;
185
+ Modal.Body = Body;
186
+ Modal.Close = Close;
187
+ Modal.Footer = Footer;
188
+ Modal.FooterItem = FooterItem;
189
+ Modal.Header = Header;
190
+
191
+ export { Modal, ModalComponent };
@@ -0,0 +1,43 @@
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
+ import React__default, { forwardRef } from 'react';
8
+ import '../../styled/StyledBackdrop.js';
9
+ import '../../styled/StyledBody.js';
10
+ import '../../styled/StyledClose.js';
11
+ import '../../styled/StyledFooter.js';
12
+ import '../../styled/StyledFooterItem.js';
13
+ import '../../styled/StyledHeader.js';
14
+ import '../../styled/StyledDangerIcon.js';
15
+ import '../../styled/StyledModal.js';
16
+ import '../../styled/StyledTooltipModalBackdrop.js';
17
+ import '../../styled/StyledTooltipWrapper.js';
18
+ import '../../styled/StyledTooltipModal.js';
19
+ import '../../styled/StyledTooltipModalTitle.js';
20
+ import { StyledTooltipModalBody } from '../../styled/StyledTooltipModalBody.js';
21
+ import '../../styled/StyledTooltipModalFooter.js';
22
+ import '../../styled/StyledTooltipModalFooterItem.js';
23
+ import '../../styled/StyledTooltipModalClose.js';
24
+ import '../../styled/StyledDrawer.js';
25
+ import '../../styled/StyledDrawerHeader.js';
26
+ import '../../styled/StyledDrawerClose.js';
27
+ import '../../styled/StyledDrawerBody.js';
28
+ import '../../styled/StyledDrawerFooter.js';
29
+ import '../../styled/StyledDrawerFooterItem.js';
30
+ import { useTooltipModalContext } from '../../utils/useTooltipModalContext.js';
31
+
32
+ const BodyComponent = forwardRef((props, ref) => {
33
+ const {
34
+ getContentProps
35
+ } = useTooltipModalContext();
36
+ return React__default.createElement(StyledTooltipModalBody, Object.assign({}, getContentProps(props), {
37
+ ref: ref
38
+ }));
39
+ });
40
+ BodyComponent.displayName = 'TooltipModal.Body';
41
+ const Body = BodyComponent;
42
+
43
+ export { Body };
@@ -0,0 +1,49 @@
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
+ import React__default, { forwardRef } from 'react';
8
+ import '../../styled/StyledBackdrop.js';
9
+ import '../../styled/StyledBody.js';
10
+ import '../../styled/StyledClose.js';
11
+ import '../../styled/StyledFooter.js';
12
+ import '../../styled/StyledFooterItem.js';
13
+ import '../../styled/StyledHeader.js';
14
+ import '../../styled/StyledDangerIcon.js';
15
+ import '../../styled/StyledModal.js';
16
+ import '../../styled/StyledTooltipModalBackdrop.js';
17
+ import '../../styled/StyledTooltipWrapper.js';
18
+ import '../../styled/StyledTooltipModal.js';
19
+ import '../../styled/StyledTooltipModalTitle.js';
20
+ import '../../styled/StyledTooltipModalBody.js';
21
+ import '../../styled/StyledTooltipModalFooter.js';
22
+ import '../../styled/StyledTooltipModalFooterItem.js';
23
+ import { StyledTooltipModalClose } from '../../styled/StyledTooltipModalClose.js';
24
+ import '../../styled/StyledDrawer.js';
25
+ import '../../styled/StyledDrawerHeader.js';
26
+ import '../../styled/StyledDrawerClose.js';
27
+ import '../../styled/StyledDrawerBody.js';
28
+ import '../../styled/StyledDrawerFooter.js';
29
+ import '../../styled/StyledDrawerFooterItem.js';
30
+ import { useText } from '@zendeskgarden/react-theming';
31
+ import { useTooltipModalContext } from '../../utils/useTooltipModalContext.js';
32
+ import SvgXStroke from '../../node_modules/@zendeskgarden/svg-icons/src/16/x-stroke.svg.js';
33
+
34
+ const CloseComponent = forwardRef((props, ref) => {
35
+ const {
36
+ getCloseProps
37
+ } = useTooltipModalContext();
38
+ const ariaLabel = useText(CloseComponent, props, 'aria-label', 'Close tooltip');
39
+ return React__default.createElement(StyledTooltipModalClose, Object.assign({}, getCloseProps({
40
+ ...props,
41
+ 'aria-label': ariaLabel
42
+ }), {
43
+ ref: ref
44
+ }), React__default.createElement(SvgXStroke, null));
45
+ });
46
+ CloseComponent.displayName = 'TooltipModal.Close';
47
+ const Close = CloseComponent;
48
+
49
+ export { Close };
@@ -0,0 +1,37 @@
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
+ import React__default, { forwardRef } from 'react';
8
+ import '../../styled/StyledBackdrop.js';
9
+ import '../../styled/StyledBody.js';
10
+ import '../../styled/StyledClose.js';
11
+ import '../../styled/StyledFooter.js';
12
+ import '../../styled/StyledFooterItem.js';
13
+ import '../../styled/StyledHeader.js';
14
+ import '../../styled/StyledDangerIcon.js';
15
+ import '../../styled/StyledModal.js';
16
+ import '../../styled/StyledTooltipModalBackdrop.js';
17
+ import '../../styled/StyledTooltipWrapper.js';
18
+ import '../../styled/StyledTooltipModal.js';
19
+ import '../../styled/StyledTooltipModalTitle.js';
20
+ import '../../styled/StyledTooltipModalBody.js';
21
+ import { StyledTooltipModalFooter } from '../../styled/StyledTooltipModalFooter.js';
22
+ import '../../styled/StyledTooltipModalFooterItem.js';
23
+ import '../../styled/StyledTooltipModalClose.js';
24
+ import '../../styled/StyledDrawer.js';
25
+ import '../../styled/StyledDrawerHeader.js';
26
+ import '../../styled/StyledDrawerClose.js';
27
+ import '../../styled/StyledDrawerBody.js';
28
+ import '../../styled/StyledDrawerFooter.js';
29
+ import '../../styled/StyledDrawerFooterItem.js';
30
+
31
+ const FooterComponent = forwardRef((props, ref) => React__default.createElement(StyledTooltipModalFooter, Object.assign({
32
+ ref: ref
33
+ }, props)));
34
+ FooterComponent.displayName = 'TooltipModal.Footer';
35
+ const Footer = FooterComponent;
36
+
37
+ export { Footer };
@@ -0,0 +1,37 @@
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
+ import React__default, { forwardRef } from 'react';
8
+ import '../../styled/StyledBackdrop.js';
9
+ import '../../styled/StyledBody.js';
10
+ import '../../styled/StyledClose.js';
11
+ import '../../styled/StyledFooter.js';
12
+ import '../../styled/StyledFooterItem.js';
13
+ import '../../styled/StyledHeader.js';
14
+ import '../../styled/StyledDangerIcon.js';
15
+ import '../../styled/StyledModal.js';
16
+ import '../../styled/StyledTooltipModalBackdrop.js';
17
+ import '../../styled/StyledTooltipWrapper.js';
18
+ import '../../styled/StyledTooltipModal.js';
19
+ import '../../styled/StyledTooltipModalTitle.js';
20
+ import '../../styled/StyledTooltipModalBody.js';
21
+ import '../../styled/StyledTooltipModalFooter.js';
22
+ import { StyledTooltipModalFooterItem } from '../../styled/StyledTooltipModalFooterItem.js';
23
+ import '../../styled/StyledTooltipModalClose.js';
24
+ import '../../styled/StyledDrawer.js';
25
+ import '../../styled/StyledDrawerHeader.js';
26
+ import '../../styled/StyledDrawerClose.js';
27
+ import '../../styled/StyledDrawerBody.js';
28
+ import '../../styled/StyledDrawerFooter.js';
29
+ import '../../styled/StyledDrawerFooterItem.js';
30
+
31
+ const FooterItemComponent = forwardRef((props, ref) => React__default.createElement(StyledTooltipModalFooterItem, Object.assign({
32
+ ref: ref
33
+ }, props)));
34
+ FooterItemComponent.displayName = 'TooltipModal.FooterItem';
35
+ const FooterItem = FooterItemComponent;
36
+
37
+ export { FooterItem };
@@ -0,0 +1,68 @@
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
+ import React__default, { forwardRef, useEffect } from 'react';
8
+ import PropTypes from 'prop-types';
9
+ import { useTooltipModalContext } from '../../utils/useTooltipModalContext.js';
10
+ import '../../styled/StyledBackdrop.js';
11
+ import '../../styled/StyledBody.js';
12
+ import '../../styled/StyledClose.js';
13
+ import '../../styled/StyledFooter.js';
14
+ import '../../styled/StyledFooterItem.js';
15
+ import '../../styled/StyledHeader.js';
16
+ import '../../styled/StyledDangerIcon.js';
17
+ import '../../styled/StyledModal.js';
18
+ import '../../styled/StyledTooltipModalBackdrop.js';
19
+ import '../../styled/StyledTooltipWrapper.js';
20
+ import '../../styled/StyledTooltipModal.js';
21
+ import { StyledTooltipModalTitle } from '../../styled/StyledTooltipModalTitle.js';
22
+ import '../../styled/StyledTooltipModalBody.js';
23
+ import '../../styled/StyledTooltipModalFooter.js';
24
+ import '../../styled/StyledTooltipModalFooterItem.js';
25
+ import '../../styled/StyledTooltipModalClose.js';
26
+ import '../../styled/StyledDrawer.js';
27
+ import '../../styled/StyledDrawerHeader.js';
28
+ import '../../styled/StyledDrawerClose.js';
29
+ import '../../styled/StyledDrawerBody.js';
30
+ import '../../styled/StyledDrawerFooter.js';
31
+ import '../../styled/StyledDrawerFooterItem.js';
32
+
33
+ const TitleComponent = forwardRef((_ref, ref) => {
34
+ let {
35
+ children,
36
+ tag,
37
+ ...other
38
+ } = _ref;
39
+ const {
40
+ getTitleProps,
41
+ hasTitle,
42
+ setHasTitle
43
+ } = useTooltipModalContext();
44
+ useEffect(() => {
45
+ if (!hasTitle && setHasTitle) {
46
+ setHasTitle(true);
47
+ }
48
+ return () => {
49
+ if (hasTitle && setHasTitle) {
50
+ setHasTitle(false);
51
+ }
52
+ };
53
+ }, [hasTitle, setHasTitle]);
54
+ return React__default.createElement(StyledTooltipModalTitle, Object.assign({}, getTitleProps(other), {
55
+ as: tag,
56
+ ref: ref
57
+ }), children);
58
+ });
59
+ TitleComponent.displayName = 'TooltipModal.Title';
60
+ TitleComponent.propTypes = {
61
+ tag: PropTypes.any
62
+ };
63
+ TitleComponent.defaultProps = {
64
+ tag: 'div'
65
+ };
66
+ const Title = TitleComponent;
67
+
68
+ export { Title };
@@ -0,0 +1,192 @@
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
+ import React__default, { useContext, useRef, useState, useEffect } from 'react';
8
+ import PropTypes from 'prop-types';
9
+ import { ThemeContext } from 'styled-components';
10
+ import { CSSTransition } from 'react-transition-group';
11
+ import { useFloating, platform, offset, autoPlacement, autoUpdate } from '@floating-ui/react-dom';
12
+ import { useModal } from '@zendeskgarden/container-modal';
13
+ import { mergeRefs } from 'react-merge-refs';
14
+ import { TooltipModalContext } from '../../utils/useTooltipModalContext.js';
15
+ import '../../styled/StyledBackdrop.js';
16
+ import '../../styled/StyledBody.js';
17
+ import '../../styled/StyledClose.js';
18
+ import '../../styled/StyledFooter.js';
19
+ import '../../styled/StyledFooterItem.js';
20
+ import '../../styled/StyledHeader.js';
21
+ import '../../styled/StyledDangerIcon.js';
22
+ import '../../styled/StyledModal.js';
23
+ import { StyledTooltipModalBackdrop } from '../../styled/StyledTooltipModalBackdrop.js';
24
+ import { StyledTooltipWrapper } from '../../styled/StyledTooltipWrapper.js';
25
+ import { StyledTooltipModal } from '../../styled/StyledTooltipModal.js';
26
+ import '../../styled/StyledTooltipModalTitle.js';
27
+ import '../../styled/StyledTooltipModalBody.js';
28
+ import '../../styled/StyledTooltipModalFooter.js';
29
+ import '../../styled/StyledTooltipModalFooterItem.js';
30
+ import '../../styled/StyledTooltipModalClose.js';
31
+ import '../../styled/StyledDrawer.js';
32
+ import '../../styled/StyledDrawerHeader.js';
33
+ import '../../styled/StyledDrawerClose.js';
34
+ import '../../styled/StyledDrawerBody.js';
35
+ import '../../styled/StyledDrawerFooter.js';
36
+ import '../../styled/StyledDrawerFooterItem.js';
37
+ import { Title } from './Title.js';
38
+ import { Body } from './Body.js';
39
+ import { Close } from './Close.js';
40
+ import { Footer } from './Footer.js';
41
+ import { FooterItem } from './FooterItem.js';
42
+ import { DEFAULT_THEME, getFloatingPlacements, useText } from '@zendeskgarden/react-theming';
43
+ import { createPortal } from 'react-dom';
44
+
45
+ const PLACEMENT_DEFAULT = 'top';
46
+ const TooltipModalComponent = React__default.forwardRef((_ref, ref) => {
47
+ let {
48
+ appendToNode,
49
+ referenceElement,
50
+ placement: _placement,
51
+ onClose,
52
+ hasArrow,
53
+ isAnimated,
54
+ zIndex,
55
+ backdropProps,
56
+ focusOnMount,
57
+ restoreFocus,
58
+ id,
59
+ ...props
60
+ } = _ref;
61
+ const theme = useContext(ThemeContext) || DEFAULT_THEME;
62
+ const previousReferenceElementRef = useRef();
63
+ const modalRef = useRef(null);
64
+ const transitionRef = useRef(null);
65
+ const [floatingElement, setFloatingElement] = useState();
66
+ const [hasTitle, setHasTitle] = useState(false);
67
+ const {
68
+ getTitleProps,
69
+ getCloseProps,
70
+ getContentProps,
71
+ getBackdropProps,
72
+ getModalProps
73
+ } = useModal({
74
+ idPrefix: id,
75
+ onClose,
76
+ modalRef,
77
+ focusOnMount,
78
+ restoreFocus: false
79
+ });
80
+ const [floatingPlacement] = getFloatingPlacements(theme, _placement === 'auto' ? PLACEMENT_DEFAULT : _placement);
81
+ const {
82
+ refs,
83
+ placement,
84
+ update,
85
+ floatingStyles: {
86
+ transform
87
+ }
88
+ } = useFloating({
89
+ platform: {
90
+ ...platform,
91
+ isRTL: () => theme.rtl
92
+ },
93
+ elements: {
94
+ reference: referenceElement,
95
+ floating: floatingElement
96
+ },
97
+ placement: floatingPlacement,
98
+ middleware: [offset(theme.space.base * 3), _placement === 'auto' ? autoPlacement() : undefined]
99
+ });
100
+ useEffect(() => {
101
+ let cleanup;
102
+ if (referenceElement && floatingElement && refs.reference.current && refs.floating.current) {
103
+ cleanup = autoUpdate(refs.reference.current, refs.floating.current, update, {
104
+ elementResize: typeof ResizeObserver === 'function'
105
+ });
106
+ }
107
+ return () => cleanup && cleanup();
108
+ }, [referenceElement, floatingElement, refs.reference, refs.floating, update]);
109
+ useEffect(() => {
110
+ if (!referenceElement && previousReferenceElementRef.current && restoreFocus) {
111
+ previousReferenceElementRef.current.focus();
112
+ }
113
+ previousReferenceElementRef.current = referenceElement;
114
+ }, [referenceElement, restoreFocus]);
115
+ const modalProps = getModalProps({
116
+ 'aria-describedby': undefined,
117
+ ...(hasTitle ? {} : {
118
+ 'aria-labelledby': undefined
119
+ })
120
+ });
121
+ const attribute = hasTitle ? 'aria-labelledby' : 'aria-label';
122
+ const defaultValue = hasTitle ? modalProps['aria-labelledby'] : 'Modal dialog';
123
+ const labelValue = hasTitle ? modalProps['aria-labelledby'] : props['aria-label'];
124
+ const ariaProps = {
125
+ [attribute]: useText(TooltipModalComponent, {
126
+ [attribute]: labelValue
127
+ }, attribute, defaultValue)
128
+ };
129
+ const value = {
130
+ hasTitle,
131
+ setHasTitle,
132
+ getTitleProps,
133
+ getContentProps,
134
+ getCloseProps
135
+ };
136
+ const Node = React__default.createElement(CSSTransition, {
137
+ unmountOnExit: true,
138
+ timeout: isAnimated ? 200 : 0,
139
+ in: Boolean(referenceElement),
140
+ classNames: isAnimated ? 'garden-tooltip-modal-transition' : '',
141
+ nodeRef: transitionRef
142
+ }, transitionState => {
143
+ return React__default.createElement(TooltipModalContext.Provider, {
144
+ value: value
145
+ }, React__default.createElement(StyledTooltipModalBackdrop, Object.assign({}, getBackdropProps(), backdropProps, {
146
+ ref: transitionRef
147
+ }), React__default.createElement(StyledTooltipWrapper, {
148
+ ref: setFloatingElement,
149
+ style: {
150
+ transform
151
+ },
152
+ placement: placement,
153
+ zIndex: zIndex,
154
+ isAnimated: isAnimated
155
+ }, React__default.createElement(StyledTooltipModal, Object.assign({
156
+ transitionState: transitionState,
157
+ placement: placement,
158
+ hasArrow: hasArrow,
159
+ isAnimated: isAnimated
160
+ }, modalProps, ariaProps, props, {
161
+ ref: mergeRefs([modalRef, ref])
162
+ })))));
163
+ });
164
+ return appendToNode ? createPortal(Node, appendToNode) : Node;
165
+ });
166
+ TooltipModalComponent.displayName = 'TooltipModal';
167
+ TooltipModalComponent.defaultProps = {
168
+ placement: 'auto',
169
+ hasArrow: true,
170
+ focusOnMount: true,
171
+ restoreFocus: true
172
+ };
173
+ TooltipModalComponent.propTypes = {
174
+ appendToNode: PropTypes.any,
175
+ referenceElement: PropTypes.any,
176
+ placement: PropTypes.any,
177
+ isAnimated: PropTypes.bool,
178
+ hasArrow: PropTypes.bool,
179
+ zIndex: PropTypes.number,
180
+ onClose: PropTypes.func,
181
+ backdropProps: PropTypes.any,
182
+ focusOnMount: PropTypes.bool,
183
+ restoreFocus: PropTypes.bool
184
+ };
185
+ const TooltipModal = TooltipModalComponent;
186
+ TooltipModal.Body = Body;
187
+ TooltipModal.Close = Close;
188
+ TooltipModal.Footer = Footer;
189
+ TooltipModal.FooterItem = FooterItem;
190
+ TooltipModal.Title = Title;
191
+
192
+ export { TooltipModal };
@@ -0,0 +1,15 @@
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
+ export { Modal } from './elements/Modal.js';
8
+ export { Body } from './elements/Body.js';
9
+ export { Close } from './elements/Close.js';
10
+ export { Footer } from './elements/Footer.js';
11
+ export { FooterItem } from './elements/FooterItem.js';
12
+ export { Header } from './elements/Header.js';
13
+ export { TooltipModal } from './elements/TooltipModal/TooltipModal.js';
14
+ export { Drawer } from './elements/Drawer/Drawer.js';
15
+ export { PLACEMENT } from './types/index.js';
@@ -0,0 +1,37 @@
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
+ import * as React from 'react';
8
+
9
+ var _g, _circle;
10
+ 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); }
11
+ var SvgAlertErrorStroke = function SvgAlertErrorStroke(props) {
12
+ return /*#__PURE__*/React.createElement("svg", _extends({
13
+ xmlns: "http://www.w3.org/2000/svg",
14
+ width: 16,
15
+ height: 16,
16
+ focusable: "false",
17
+ viewBox: "0 0 16 16",
18
+ "aria-hidden": "true"
19
+ }, props), _g || (_g = /*#__PURE__*/React.createElement("g", {
20
+ fill: "none",
21
+ stroke: "currentColor"
22
+ }, /*#__PURE__*/React.createElement("circle", {
23
+ cx: 7.5,
24
+ cy: 8.5,
25
+ r: 7
26
+ }), /*#__PURE__*/React.createElement("path", {
27
+ strokeLinecap: "round",
28
+ d: "M7.5 4.5V9"
29
+ }))), _circle || (_circle = /*#__PURE__*/React.createElement("circle", {
30
+ cx: 7.5,
31
+ cy: 12,
32
+ r: 1,
33
+ fill: "currentColor"
34
+ })));
35
+ };
36
+
37
+ export { SvgAlertErrorStroke as default };