@zohoim/chat-components 1.0.11 → 1.1.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 (133) hide show
  1. package/README.md +8 -0
  2. package/es/AttachmentHandler/AttachmentHandler.js +84 -0
  3. package/es/AttachmentHandler/css/AttachmentHandler.module.css +27 -0
  4. package/es/AttachmentHandler/index.js +1 -0
  5. package/es/AttachmentHandler/props/defaultProps.js +10 -0
  6. package/es/AttachmentHandler/props/propTypes.js +17 -0
  7. package/es/AttachmentPreview/AttachmentPreview.js +121 -0
  8. package/es/AttachmentPreview/css/AttachmentPreview.module.css +39 -0
  9. package/es/AttachmentPreview/index.js +1 -0
  10. package/es/AttachmentPreview/props/defaultProps.js +9 -0
  11. package/es/AttachmentPreview/props/propTypes.js +33 -0
  12. package/es/AttachmentPreviewBody/AttachmentPreviewBody.js +97 -0
  13. package/es/AttachmentPreviewBody/css/AttachmentPreviewBody.module.css +75 -0
  14. package/es/AttachmentPreviewBody/index.js +1 -0
  15. package/es/AttachmentPreviewBody/props/defaultProps.js +7 -0
  16. package/es/AttachmentPreviewBody/props/propTypes.js +20 -0
  17. package/es/AttachmentPreviewHeader/AttachmentPreviewHeader.js +84 -0
  18. package/es/AttachmentPreviewHeader/css/AttachmentPreviewHeader.module.css +47 -0
  19. package/es/AttachmentPreviewHeader/index.js +1 -0
  20. package/es/AttachmentPreviewHeader/props/defaultProps.js +7 -0
  21. package/es/AttachmentPreviewHeader/props/propTypes.js +16 -0
  22. package/es/Emoji/Emoji.js +72 -0
  23. package/es/Emoji/css/Emoji.module.css +48 -0
  24. package/es/Emoji/css/cssJSLogic.js +18 -0
  25. package/es/Emoji/index.js +1 -0
  26. package/es/Emoji/props/defaultProps.js +8 -0
  27. package/es/Emoji/props/propTypes.js +16 -0
  28. package/es/EmojiPopup/EmojiPopup.js +115 -0
  29. package/es/EmojiPopup/css/EmojiPopup.module.css +55 -0
  30. package/es/EmojiPopup/index.js +1 -0
  31. package/es/EmojiPopup/props/defaultProps.js +11 -0
  32. package/es/EmojiPopup/props/propTypes.js +21 -0
  33. package/es/Emojis/Emojis.js +81 -0
  34. package/es/Emojis/index.js +1 -0
  35. package/es/Emojis/props/defaultProps.js +10 -0
  36. package/es/Emojis/props/propTypes.js +20 -0
  37. package/es/EmojisEmptyState/EmojisEmptyState.js +50 -0
  38. package/es/EmojisEmptyState/css/EmojisEmptyState.module.css +18 -0
  39. package/es/EmojisEmptyState/index.js +1 -0
  40. package/es/EmojisEmptyState/props/defaultProps.js +9 -0
  41. package/es/EmojisEmptyState/props/propTypes.js +8 -0
  42. package/es/EmojisFooter/EmojisFooter.js +71 -0
  43. package/es/EmojisFooter/css/EmojisFooter.module.css +40 -0
  44. package/es/EmojisFooter/index.js +1 -0
  45. package/es/EmojisFooter/props/defaultProps.js +7 -0
  46. package/es/EmojisFooter/props/propTypes.js +12 -0
  47. package/es/EmojisHeader/EmojisHeader.js +65 -0
  48. package/es/EmojisHeader/css/EmojisHeader.module.css +36 -0
  49. package/es/EmojisHeader/index.js +1 -0
  50. package/es/EmojisHeader/props/defaultProps.js +8 -0
  51. package/es/EmojisHeader/props/propTypes.js +13 -0
  52. package/es/EmojisList/EmojisList.js +130 -0
  53. package/es/EmojisList/css/EmojisList.module.css +50 -0
  54. package/es/EmojisList/css/cssJSLogic.js +25 -0
  55. package/es/EmojisList/index.js +1 -0
  56. package/es/EmojisList/props/defaultProps.js +10 -0
  57. package/es/EmojisList/props/propTypes.js +20 -0
  58. package/es/MessageActionsMore/MessageActionsMore.js +2 -2
  59. package/es/MessageActionsMore/props/propTypes.js +5 -2
  60. package/es/MessageActionsWrapper/MessageActionsWrapper.js +1 -1
  61. package/es/Theme/ThemeAssets.js +2 -2
  62. package/es/Theme/ThemeWrapper.js +20 -7
  63. package/es/Theme/TooltipWrapper.js +1 -1
  64. package/es/Theme/props/defaultProps.js +2 -1
  65. package/es/Theme/props/propTypes.js +2 -1
  66. package/es/Theme/themeVariables/dark/blueTheme.js +18 -1
  67. package/es/Theme/themeVariables/dark/commonColorVariable.js +20 -1
  68. package/es/Theme/themeVariables/dark/greenTheme.js +18 -1
  69. package/es/Theme/themeVariables/dark/orangeTheme.js +18 -1
  70. package/es/Theme/themeVariables/dark/redTheme.js +18 -1
  71. package/es/Theme/themeVariables/dark/yellowTheme.js +18 -1
  72. package/es/Theme/themeVariables/light/blueTheme.js +22 -1
  73. package/es/Theme/themeVariables/light/commonColorVariable.js +19 -0
  74. package/es/Theme/themeVariables/light/greenTheme.js +18 -1
  75. package/es/Theme/themeVariables/light/orangeTheme.js +18 -1
  76. package/es/Theme/themeVariables/light/redTheme.js +18 -1
  77. package/es/Theme/themeVariables/light/yellowTheme.js +18 -1
  78. package/es/Theme/themeVariables/pureDark/blueTheme.js +18 -1
  79. package/es/Theme/themeVariables/pureDark/commonColorVariable.js +20 -1
  80. package/es/Theme/themeVariables/pureDark/greenTheme.js +18 -1
  81. package/es/Theme/themeVariables/pureDark/orangeTheme.js +18 -1
  82. package/es/Theme/themeVariables/pureDark/redTheme.js +18 -1
  83. package/es/Theme/themeVariables/pureDark/yellowTheme.js +18 -1
  84. package/es/Theme/utils/getThemeConfigurations.js +1 -1
  85. package/es/constants/index.js +8 -1
  86. package/es/constants/propConstants/editorPropConstants.js +3 -0
  87. package/es/constants/propConstants/popupPropConstants.js +2 -0
  88. package/es/im/IMAttachmentHandler/IMAttachmentHandler.js +50 -0
  89. package/es/im/IMAttachmentHandler/index.js +1 -0
  90. package/es/im/IMAttachmentHandler/props/defaultProps.js +10 -0
  91. package/es/im/IMAttachmentHandler/props/propTypes.js +28 -0
  92. package/es/im/ReplyComposer/ReplyComposer.js +153 -0
  93. package/es/im/ReplyComposer/css/ReplyComposer.module.css +10 -0
  94. package/es/im/ReplyComposer/css/cssJSLogic.js +13 -0
  95. package/es/im/ReplyComposer/index.js +1 -0
  96. package/es/im/ReplyComposer/props/defaultProps.js +7 -0
  97. package/es/im/ReplyComposer/props/propTypes.js +60 -0
  98. package/es/im/ReplyComposerFooter/ReplyComposerFooter.js +41 -0
  99. package/es/im/ReplyComposerFooter/css/ReplyComposerFooter.module.css +10 -0
  100. package/es/im/ReplyComposerFooter/index.js +1 -0
  101. package/es/im/ReplyComposerFooter/props/defaultProps.js +8 -0
  102. package/es/im/ReplyComposerFooter/props/propTypes.js +17 -0
  103. package/es/im/ReplyEditor/ReplyEditor.js +103 -0
  104. package/es/im/ReplyEditor/css/ReplyEditor.module.css +50 -0
  105. package/es/im/ReplyEditor/css/cssJSLogic.js +10 -0
  106. package/es/im/ReplyEditor/index.js +1 -0
  107. package/es/im/ReplyEditor/props/defaultProps.js +8 -0
  108. package/es/im/ReplyEditor/props/propTypes.js +27 -0
  109. package/es/im/ReplyEditorExtensions/ReplyEditorExtensions.js +149 -0
  110. package/es/im/ReplyEditorExtensions/css/ReplyEditorExtensions.module.css +5 -0
  111. package/es/im/ReplyEditorExtensions/index.js +1 -0
  112. package/es/im/ReplyEditorExtensions/props/defaultProps.js +6 -0
  113. package/es/im/ReplyEditorExtensions/props/propTypes.js +16 -0
  114. package/es/im/ReplyEditorSuggestions/ReplyEditorSuggestions.js +95 -0
  115. package/es/im/ReplyEditorSuggestions/css/ReplyEditorSuggestions.module.css +8 -0
  116. package/es/im/ReplyEditorSuggestions/index.js +1 -0
  117. package/es/im/ReplyEditorSuggestions/props/defaultProps.js +6 -0
  118. package/es/im/ReplyEditorSuggestions/props/propTypes.js +21 -0
  119. package/es/im/ReplyEditorSuggestionsPopup/ReplyEditorSuggestionsPopup.js +93 -0
  120. package/es/im/ReplyEditorSuggestionsPopup/css/ReplyEditorSuggestionsPopup.module.css +7 -0
  121. package/es/im/ReplyEditorSuggestionsPopup/index.js +1 -0
  122. package/es/im/ReplyEditorSuggestionsPopup/props/defaultProps.js +10 -0
  123. package/es/im/ReplyEditorSuggestionsPopup/props/propTypes.js +21 -0
  124. package/es/im/index.js +8 -1
  125. package/es/index.js +13 -2
  126. package/es/rte/Editor/Editor.js +80 -0
  127. package/es/rte/Editor/css/Editor.module.css +17 -0
  128. package/es/rte/Editor/index.js +1 -0
  129. package/es/rte/Editor/props/defaultProps.js +21 -0
  130. package/es/rte/Editor/props/propTypes.js +52 -0
  131. package/es/rte/index.js +1 -0
  132. package/package.json +7 -7
  133. package/es/Theme/constants/index.js +0 -41
package/README.md CHANGED
@@ -10,6 +10,14 @@ In this Library, We Provide Some Basic Message Components to Build Your Chat App
10
10
 
11
11
  > import MessageBubble from '@zohoim/chat-components/es/MessageBubble/MessageBubble’;
12
12
 
13
+ # 1.1.0
14
+
15
+ - **Editor** new component added
16
+ - **ReplyEditor** new component added
17
+ - **ReplyComposer** new component added
18
+ - **EmojiPopup** new component added
19
+ - **AttachmentPreview** new component added
20
+
13
21
  # 1.0.11
14
22
 
15
23
  - changes for retaining hover actions
@@ -0,0 +1,84 @@
1
+ /** ** Libraries *** */
2
+ import React, { useMemo } from 'react';
3
+ /** ** Component *** */
4
+
5
+ import IconButton from '@zohodesk/dot/es/IconButton/IconButton';
6
+ import { Container } from '@zohodesk/components/es/Layout';
7
+ /** ** Hooks *** */
8
+
9
+ import useMergeStyle from '@zohodesk/hooks/es/utils/useMergeStyle';
10
+ import useAttachmentHandler from '@zohoim/chat-components-hooks/es/AttachmentHandler/useAttachmentHandler';
11
+ /** ** Constants *** */
12
+
13
+ import { dummyObject } from '@zohoim/chat-components-utils/es/constants/emptyConstants';
14
+ import attachmentHandlerDefaultProps from "./props/defaultProps";
15
+ import attachmentHandlerPropTypes from "./props/propTypes";
16
+ /** ** Methods *** */
17
+
18
+ import renderHandler from '@zohoim/chat-components-utils/es/common/renderHandler';
19
+ /** ** Styles *** */
20
+
21
+ import style from "./css/AttachmentHandler.module.css";
22
+ export default function AttachmentHandler(props) {
23
+ const {
24
+ customStyle,
25
+ iconName,
26
+ iconSize,
27
+ iconTitle,
28
+ renderCustomIcon,
29
+ getRef: propGetRef,
30
+ supportedFileTypes,
31
+ isMultiAttachment,
32
+ onAttach: propOnAttach,
33
+ customProps = dummyObject
34
+ } = props;
35
+ const {
36
+ inputProps = dummyObject
37
+ } = customProps;
38
+ const {
39
+ onAttach,
40
+ onAttachmentClick,
41
+ getRef
42
+ } = useAttachmentHandler({
43
+ onAttach: propOnAttach,
44
+ getRef: propGetRef
45
+ });
46
+ /* External customization */
47
+
48
+ const newStyle = useMergeStyle(style, customStyle);
49
+ const inputEl = useMemo(() => /*#__PURE__*/React.createElement("input", {
50
+ ref: getRef,
51
+ accept: supportedFileTypes,
52
+ hidden: true,
53
+ multiple: isMultiAttachment,
54
+ onChange: onAttach,
55
+ size: "1",
56
+ type: "file",
57
+ ...inputProps
58
+ }), [supportedFileTypes, getRef, onAttach, isMultiAttachment, inputProps]);
59
+ const customIcon = useMemo(() => {
60
+ /* Render Custom Icon */
61
+ const icon = renderHandler(renderCustomIcon)({
62
+ onClick: onAttachmentClick
63
+ });
64
+
65
+ if (icon) {
66
+ return /*#__PURE__*/React.createElement(React.Fragment, null, icon, inputEl);
67
+ }
68
+
69
+ return null;
70
+ }, [renderCustomIcon, onAttachmentClick, inputEl]);
71
+ return /*#__PURE__*/React.createElement(Container, {
72
+ alignBox: "column"
73
+ }, customIcon || /*#__PURE__*/React.createElement(IconButton, {
74
+ className: newStyle.iconButton,
75
+ iconClass: newStyle.icon,
76
+ iconName: iconName,
77
+ iconSize: iconSize,
78
+ onClick: onAttachmentClick,
79
+ title: iconTitle
80
+ }, inputEl));
81
+ }
82
+ AttachmentHandler.propTypes = attachmentHandlerPropTypes;
83
+ AttachmentHandler.defaultProps = attachmentHandlerDefaultProps;
84
+ AttachmentHandler.displayName = 'AttachmentHandler';
@@ -0,0 +1,27 @@
1
+ /** ** Styles *** */
2
+
3
+ .attachmentHandler {
4
+ /** ** Use this class for css customisation *** */
5
+ }
6
+
7
+ [dir=ltr] .iconButton {
8
+ margin-right: var(--zd_size5) ;
9
+ }
10
+
11
+ [dir=rtl] .iconButton {
12
+ margin-left: var(--zd_size5) ;
13
+ }
14
+
15
+ .icon {
16
+ color: initial;
17
+ }
18
+
19
+
20
+ .icon :global .path1:before {
21
+ color: var(--imlib_chat_components_emojiPopup_ttIcon_path1_color) !important;
22
+ opacity: 1;
23
+ }
24
+
25
+ .icon :global .path2:before {
26
+ color: var(--imlib_chat_components_emojiPopup_ttIcon_path2_color) !important;
27
+ }
@@ -0,0 +1 @@
1
+ export { default as AttachmentHandler } from "./AttachmentHandler";
@@ -0,0 +1,10 @@
1
+ /** ** Constants *** */
2
+ import { dummyObject } from '@zohoim/chat-components-utils/es/constants/emptyConstants';
3
+ const attachmentHandlerDefaultProps = {
4
+ customStyle: dummyObject,
5
+ iconName: 'ZD-TT-image',
6
+ iconSize: '14',
7
+ iconTitle: 'Upload',
8
+ isMultiAttachment: false
9
+ };
10
+ export default attachmentHandlerDefaultProps;
@@ -0,0 +1,17 @@
1
+ /** ** Libraries *** */
2
+ import PropTypes from 'prop-types';
3
+ const attachmentHandlerPropTypes = {
4
+ customStyle: PropTypes.object,
5
+ iconName: PropTypes.string.isRequired,
6
+ iconSize: PropTypes.number,
7
+ iconTitle: PropTypes.string,
8
+ renderCustomIcon: PropTypes.func,
9
+ getRef: PropTypes.func,
10
+ supportedFileTypes: PropTypes.string,
11
+ isMultiAttachment: PropTypes.bool,
12
+ onAttach: PropTypes.func.isRequired,
13
+ customProps: PropTypes.shape({
14
+ inputProps: PropTypes.object
15
+ })
16
+ };
17
+ export default attachmentHandlerPropTypes;
@@ -0,0 +1,121 @@
1
+ /* eslint-disable max-len */
2
+
3
+ /** ** Libraries *** */
4
+ import React, { useMemo } from 'react';
5
+ /** ** Components *** */
6
+
7
+ import { Container, Box } from '@zohodesk/components/es/Layout';
8
+ import AttachmentPreviewHeader from "../AttachmentPreviewHeader/AttachmentPreviewHeader";
9
+ import AttachmentPreviewBody from "../AttachmentPreviewBody/AttachmentPreviewBody";
10
+ /** ** Hooks *** */
11
+
12
+ import { useZIndex } from '@zohodesk/components/es/Provider/ZindexProvider';
13
+ import useMergeStyle from '@zohodesk/hooks/es/utils/useMergeStyle';
14
+ import useAttachmentPreview from '@zohoim/chat-components-hooks/es/AttachmentPreview/useAttachmentPreview';
15
+ import useAttachmentPreviewEditor from '@zohoim/chat-components-hooks/es/AttachmentPreview/useAttachmentPreviewEditor';
16
+ /** ** Constants *** */
17
+
18
+ import attachmentPreviewDefaultProps from "./props/defaultProps";
19
+ import attachmentPreviewPropTypes from "./props/propTypes";
20
+ import { dummyObject } from '@zohoim/chat-components-utils/es/constants/emptyConstants';
21
+ import { mediaTypes } from '@zohoim/chat-components-utils/es/constants/messageConstants';
22
+ /** ** Styles *** */
23
+
24
+ import style from "./css/AttachmentPreview.module.css";
25
+ const {
26
+ IMAGE
27
+ } = mediaTypes;
28
+ export default function AttachmentPreview(props) {
29
+ const {
30
+ customStyle,
31
+ isDescriptionNeeded,
32
+ files,
33
+ customProps,
34
+ onSubmit,
35
+ onCancel,
36
+ texts,
37
+ descriptionDetails,
38
+ onDescriptionChange: propOnDescriptionChange,
39
+ needCloseOnEscape,
40
+ needUploadOnEnter,
41
+ needAutoZindex
42
+ } = props;
43
+ const {
44
+ editorProps = dummyObject,
45
+ attachmentPreviewHeaderProps = dummyObject,
46
+ attachmentPreviewBodyProps = dummyObject
47
+ } = customProps || dummyObject;
48
+ const {
49
+ submitText = 'Submit',
50
+ cancelText = 'Cancel',
51
+ placeHolder = 'Add a description for the image'
52
+ } = texts || dummyObject;
53
+ /* External customization */
54
+
55
+ const newStyle = useMergeStyle(style, customStyle);
56
+ const getNextIndex = useZIndex();
57
+ const {
58
+ selectedFile,
59
+ isShow,
60
+ description,
61
+ onDescriptionChange,
62
+ onEscape
63
+ } = useAttachmentPreview({
64
+ files,
65
+ onDescriptionChange: propOnDescriptionChange,
66
+ descriptionDetails,
67
+ needCloseOnEscape,
68
+ onCancel
69
+ });
70
+ const {
71
+ onEditorKeyDown
72
+ } = useAttachmentPreviewEditor({
73
+ editorProps,
74
+ onPreviewPopupKeyDown: onEscape,
75
+ needUploadOnEnter,
76
+ onSubmit
77
+ });
78
+ const {
79
+ fileName,
80
+ formattedFileSize: fileSize,
81
+ attachmentURL,
82
+ fileFormat,
83
+ mediaType,
84
+ attachmentId
85
+ } = selectedFile;
86
+ const isImageFile = useMemo(() => mediaType === IMAGE, [mediaType]);
87
+ return isShow ? /*#__PURE__*/React.createElement(Container, {
88
+ align: "both",
89
+ alignBox: "column",
90
+ className: newStyle.attachmentPreview,
91
+ style: needAutoZindex ? {
92
+ zIndex: `${getNextIndex()}`
93
+ } : {}
94
+ }, /*#__PURE__*/React.createElement("div", {
95
+ className: newStyle.uploadPrev
96
+ }, /*#__PURE__*/React.createElement(Box, null, /*#__PURE__*/React.createElement(AttachmentPreviewHeader, {
97
+ cancelText: cancelText,
98
+ fileName: fileName,
99
+ fileSize: fileSize,
100
+ onCancel: onCancel,
101
+ onSubmit: onSubmit,
102
+ submitText: submitText,
103
+ ...attachmentPreviewHeaderProps
104
+ })), /*#__PURE__*/React.createElement(Box, null, /*#__PURE__*/React.createElement(AttachmentPreviewBody, {
105
+ attachmentId: attachmentId,
106
+ attachmentURL: attachmentURL,
107
+ description: description,
108
+ editorProps: editorProps,
109
+ fileFormat: fileFormat,
110
+ isDescriptionNeeded: isDescriptionNeeded,
111
+ isImageFile: isImageFile,
112
+ mediaType: mediaType,
113
+ onDescriptionChange: onDescriptionChange,
114
+ onEditorKeyDown: onEditorKeyDown,
115
+ placeHolder: placeHolder,
116
+ ...attachmentPreviewBodyProps
117
+ })))) : null;
118
+ }
119
+ AttachmentPreview.propTypes = attachmentPreviewPropTypes;
120
+ AttachmentPreview.defaultProps = attachmentPreviewDefaultProps;
121
+ AttachmentPreview.displayName = 'AttachmentPreview';
@@ -0,0 +1,39 @@
1
+ /** ** Styles *** */
2
+ .attachmentPreview {
3
+ position: fixed;
4
+ top: 0 ;
5
+ bottom: 0 ;
6
+ z-index: 2;
7
+ overflow: hidden;
8
+ background-color: rgba(42, 45, 54, 0.94);
9
+ }
10
+ [dir=ltr] .attachmentPreview {
11
+ animation: scaleIn 0.3s ease;
12
+ right: 0 ;
13
+ left: 0 ;
14
+ }
15
+ [dir=rtl] .attachmentPreview {
16
+ animation: scaleIn 0.3s ease;
17
+ left: 0 ;
18
+ right: 0 ;
19
+ }
20
+
21
+ @keyframes scaleIn {
22
+ 0% {
23
+ -webkit-transform: scale(0.9);
24
+ transform: scale(0.9);
25
+ opacity: .7
26
+ }
27
+
28
+ 100% {
29
+ -webkit-transform: scale(1);
30
+ transform: scale(1);
31
+ opacity: 1
32
+ }
33
+ }
34
+
35
+ .uploadPrev {
36
+ width: 100% ;
37
+ max-width: 43.75rem;
38
+ border-radius: 5px;
39
+ }
@@ -0,0 +1 @@
1
+ export { default as AttachmentPreview } from "./AttachmentPreview";
@@ -0,0 +1,9 @@
1
+ /** ** Constants *** */
2
+ import { dummyObject } from '@zohoim/chat-components-utils/es/constants/emptyConstants';
3
+ const attachmentPreviewDefaultProps = {
4
+ customStyle: dummyObject,
5
+ needCloseOnEscape: true,
6
+ needUploadOnEnter: true,
7
+ needAutoZindex: true
8
+ };
9
+ export default attachmentPreviewDefaultProps;
@@ -0,0 +1,33 @@
1
+ /** ** Libraries *** */
2
+ import PropTypes from 'prop-types';
3
+ const attachmentPreviewPropTypes = {
4
+ customStyle: PropTypes.object,
5
+ isDescriptionNeeded: PropTypes.bool,
6
+ files: PropTypes.arrayOf(PropTypes.shape({
7
+ id: PropTypes.string,
8
+ name: PropTypes.string,
9
+ size: PropTypes.string,
10
+ type: PropTypes.string,
11
+ url: PropTypes.string
12
+ })).isRequired,
13
+ customProps: PropTypes.shape({
14
+ attachmentIconProps: PropTypes.object,
15
+ cancelButtonProps: PropTypes.object,
16
+ editorProps: PropTypes.object,
17
+ submitButtonProps: PropTypes.object
18
+ }),
19
+ onSubmit: PropTypes.func,
20
+ onCancel: PropTypes.func,
21
+ texts: PropTypes.shape({
22
+ cancelText: PropTypes.string,
23
+ editText: PropTypes.string,
24
+ placeHolder: PropTypes.string,
25
+ submitText: PropTypes.string
26
+ }).isRequired,
27
+ descriptionDetails: PropTypes.object,
28
+ onDescriptionChange: PropTypes.func,
29
+ needCloseOnEscape: PropTypes.bool,
30
+ needUploadOnEnter: PropTypes.bool,
31
+ needAutoZindex: PropTypes.bool
32
+ };
33
+ export default attachmentPreviewPropTypes;
@@ -0,0 +1,97 @@
1
+ /** ** Libraries *** */
2
+ import React, { useMemo } from 'react';
3
+ /** ** Components *** */
4
+
5
+ import { Container } from '@zohodesk/components/es/Layout';
6
+ import ReplyComposer from "../im/ReplyComposer/ReplyComposer";
7
+ import AttachmentIcon from "../AttachmentIcon/AttachmentIcon";
8
+ /** ** Hooks *** */
9
+
10
+ import useMergeStyle from '@zohodesk/hooks/es/utils/useMergeStyle';
11
+ /** ** Constants *** */
12
+
13
+ import { dummyObject } from '@zohoim/chat-components-utils/es/constants/emptyConstants';
14
+ import attachmentPreviewBodyDefaultProps from "./props/defaultProps";
15
+ import attachmentPreviewBodyPropTypes from "./props/propTypes";
16
+ /** ** Styles *** */
17
+
18
+ import style from "./css/AttachmentPreviewBody.module.css";
19
+ export default function AttachmentPreviewBody(props) {
20
+ const {
21
+ customStyle,
22
+ customProps,
23
+ isImageFile,
24
+ attachmentURL,
25
+ fileFormat,
26
+ mediaType,
27
+ isDescriptionNeeded,
28
+ description,
29
+ attachmentId,
30
+ onDescriptionChange,
31
+ onEditorKeyDown,
32
+ placeHolder,
33
+ editorProps
34
+ } = props;
35
+ const {
36
+ attachmentIconProps = dummyObject
37
+ } = customProps || {};
38
+ /* External customization */
39
+
40
+ const newStyle = useMergeStyle(style, customStyle);
41
+ const iconCustomStyle = useMemo(() => ({
42
+ icon: newStyle.attachmentIcon
43
+ }), [newStyle.attachmentIcon]);
44
+ const modifiedEditorProps = useMemo(() => {
45
+ const {
46
+ customProps,
47
+ customStyle: replyComposerCustomStyle
48
+ } = editorProps || dummyObject;
49
+ const {
50
+ replyEditorProps
51
+ } = customProps || dummyObject;
52
+ const {
53
+ customStyle = dummyObject
54
+ } = replyEditorProps || dummyObject;
55
+ return { ...editorProps,
56
+ customStyle: {
57
+ replyComposer: newStyle.replyComposer,
58
+ ...replyComposerCustomStyle
59
+ },
60
+ customProps: { ...customProps,
61
+ replyEditorProps: { ...replyEditorProps,
62
+ customStyle: {
63
+ editorWrapper: newStyle.editorWrapper,
64
+ editableDiv: newStyle.editableDiv,
65
+ ...customStyle
66
+ }
67
+ }
68
+ }
69
+ };
70
+ }, [editorProps, newStyle.replyComposer, newStyle.editorWrapper, newStyle.editableDiv]);
71
+ return /*#__PURE__*/React.createElement(Container, {
72
+ align: "both",
73
+ alignBox: "column",
74
+ className: `${newStyle.zoomContent} ${newStyle.imgContent}`
75
+ }, /*#__PURE__*/React.createElement("div", {
76
+ className: newStyle.fileContainer
77
+ }, isImageFile ? /*#__PURE__*/React.createElement("img", {
78
+ alt: "",
79
+ className: newStyle.imgZoomOut,
80
+ src: attachmentURL
81
+ }) : /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(AttachmentIcon, {
82
+ customStyle: iconCustomStyle,
83
+ fileFormat: fileFormat,
84
+ mediaType: mediaType,
85
+ ...attachmentIconProps
86
+ }))), isDescriptionNeeded ? /*#__PURE__*/React.createElement(ReplyComposer, {
87
+ content: description,
88
+ id: `${attachmentId}_Attach_Editor`,
89
+ onChange: onDescriptionChange,
90
+ onKeyDown: onEditorKeyDown,
91
+ placeHolder: placeHolder,
92
+ ...modifiedEditorProps
93
+ }) : null);
94
+ }
95
+ AttachmentPreviewBody.propTypes = attachmentPreviewBodyPropTypes;
96
+ AttachmentPreviewBody.defaultProps = attachmentPreviewBodyDefaultProps;
97
+ AttachmentPreviewBody.displayName = 'AttachmentPreviewBody';
@@ -0,0 +1,75 @@
1
+ /** ** Styles *** */
2
+ .attachmentIcon {
3
+ width: var(--zd_size60) !important;
4
+ height: var(--zd_size60) !important;
5
+ }
6
+
7
+ .replyComposer {
8
+ width: 100% ;
9
+ }
10
+
11
+ .editorWrapper {
12
+ display: flex;
13
+ flex-direction: column;
14
+ height: 100% ;
15
+ width: 100% ;
16
+ padding: 0 ;
17
+ margin-top: var(--zd_size40) ;
18
+ }
19
+
20
+ .editableDiv {
21
+ min-height: var(--zd_size48) !important;
22
+ max-height: var(--zd_size48) !important;
23
+ background-color: transparent !important;
24
+ border: 0 !important;
25
+ border-bottom: 1px solid
26
+ var(--imlib_chat_components_attachmentPreviewBody_editor_border_color) !important;
27
+ padding: 0 !important;
28
+ }
29
+
30
+ .editableDiv:hover {
31
+ border-color: var(
32
+ --imlib_chat_components_attachmentPreviewBody_editor_border_hover_color
33
+ ) !important;
34
+ }
35
+
36
+ .editableDiv:focus {
37
+ border-color: var(
38
+ --imlib_chat_components_attachmentPreviewBody_editor_border_active_color
39
+ ) !important;
40
+ }
41
+
42
+ .imgContent,
43
+ .zoomContent {
44
+ overflow: auto;
45
+ position: relative;
46
+ box-sizing: border-box;
47
+ }
48
+
49
+ .imgContent, .zoomContent {
50
+ background-color: var(--imlib_chat_components_attachmentPreviewBody_bg_color);
51
+ padding: var(--zd_size40);
52
+ }
53
+
54
+ [dir=ltr] .imgContent, [dir=ltr] .zoomContent {
55
+ border-bottom-left-radius: var(--zd_size5);
56
+ border-bottom-right-radius: var(--zd_size5);
57
+ }
58
+
59
+ [dir=rtl] .imgContent, [dir=rtl] .zoomContent {
60
+ border-bottom-right-radius: var(--zd_size5);
61
+ border-bottom-left-radius: var(--zd_size5);
62
+ }
63
+
64
+ .fileContainer {
65
+ height: var(--zd_size225);
66
+ composes: dflex from '~@zohodesk/components/es/common/common.module.css';
67
+ composes: alignVertical from '~@zohodesk/components/es/common/common.module.css';
68
+ composes: alignHorizontal from '~@zohodesk/components/es/common/common.module.css';
69
+ }
70
+
71
+ .imgZoomOut {
72
+ width: auto ;
73
+ max-width: 100% ;
74
+ max-height: 100% ;
75
+ }
@@ -0,0 +1 @@
1
+ export { default as AttachmentPreviewBody } from "./AttachmentPreviewBody";
@@ -0,0 +1,7 @@
1
+ /** ** Constants *** */
2
+ import { dummyObject } from '@zohoim/chat-components-utils/es/constants';
3
+ const attachmentPreviewBodyDefaultProps = {
4
+ customStyle: dummyObject,
5
+ customProps: dummyObject
6
+ };
7
+ export default attachmentPreviewBodyDefaultProps;
@@ -0,0 +1,20 @@
1
+ /** ** Libraries *** */
2
+ import PropTypes from 'prop-types';
3
+ const attachmentPreviewBodyPropTypes = {
4
+ customStyle: PropTypes.object,
5
+ customProps: PropTypes.shape({
6
+ attachmentIconProps: PropTypes.object
7
+ }),
8
+ isImageFile: PropTypes.bool,
9
+ attachmentURL: PropTypes.string,
10
+ fileFormat: PropTypes.string,
11
+ mediaType: PropTypes.string,
12
+ isDescriptionNeeded: PropTypes.bool,
13
+ description: PropTypes.string,
14
+ attachmentId: PropTypes.string,
15
+ onDescriptionChange: PropTypes.func,
16
+ onEditorKeyDown: PropTypes.func,
17
+ placeHolder: PropTypes.string,
18
+ editorProps: PropTypes.object
19
+ };
20
+ export default attachmentPreviewBodyPropTypes;
@@ -0,0 +1,84 @@
1
+ /** ** Libraries *** */
2
+ import React from 'react';
3
+ /** ** Components *** */
4
+
5
+ import { Container, Box } from '@zohodesk/components/es/Layout';
6
+ import Button from '@zohodesk/components/es/Button/Button';
7
+ /** ** Hooks *** */
8
+
9
+ import useMergeStyle from '@zohodesk/hooks/es/utils/useMergeStyle';
10
+ /** ** Constants *** */
11
+
12
+ import { dummyObject } from '@zohoim/chat-components-utils/es/constants/emptyConstants';
13
+ import attachmentPreviewHeaderDefaultProps from "./props/defaultProps";
14
+ import attachmentPreviewHeaderPropTypes from "./props/propTypes";
15
+ /** ** Styles *** */
16
+
17
+ import style from "./css/AttachmentPreviewHeader.module.css";
18
+ export default function AttachmentPreviewHeader(props) {
19
+ const {
20
+ customStyle,
21
+ fileName,
22
+ fileSize,
23
+ submitText,
24
+ cancelText,
25
+ onSubmit,
26
+ onCancel,
27
+ customProps
28
+ } = props;
29
+ const {
30
+ submitButtonProps = dummyObject,
31
+ cancelButtonProps = dummyObject
32
+ } = customProps || {};
33
+ /* External customization */
34
+
35
+ const newStyle = useMergeStyle(style, customStyle);
36
+ return /*#__PURE__*/React.createElement(Container, {
37
+ align: "vertical",
38
+ alignBox: "row",
39
+ className: newStyle.imgPreviewerheader,
40
+ isCover: false
41
+ }, /*#__PURE__*/React.createElement(Box, {
42
+ flexible: true
43
+ }, /*#__PURE__*/React.createElement(Container, {
44
+ align: "vertical",
45
+ alignBox: "row"
46
+ }, /*#__PURE__*/React.createElement(Box, {
47
+ flexible: true
48
+ }, /*#__PURE__*/React.createElement("div", {
49
+ className: newStyle.imgName,
50
+ title: fileName
51
+ }, fileName), /*#__PURE__*/React.createElement("div", {
52
+ className: newStyle.imgSize
53
+ }, fileSize)))), /*#__PURE__*/React.createElement(Box, null, /*#__PURE__*/React.createElement(Container, {
54
+ align: "vertical",
55
+ alignBox: "row",
56
+ className: newStyle.navIcon,
57
+ isCover: false
58
+ }, /*#__PURE__*/React.createElement("span", {
59
+ className: newStyle.attachBtn
60
+ }, /*#__PURE__*/React.createElement(Button, {
61
+ disabled: false,
62
+ isBold: true,
63
+ onClick: onSubmit,
64
+ palette: "primaryFilled",
65
+ rounded: false,
66
+ size: "medium",
67
+ status: "none",
68
+ text: submitText,
69
+ ...submitButtonProps
70
+ })), /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(Button, {
71
+ disabled: false,
72
+ isBold: true,
73
+ onClick: onCancel,
74
+ palette: "secondary",
75
+ rounded: false,
76
+ size: "medium",
77
+ status: "none",
78
+ text: cancelText,
79
+ ...cancelButtonProps
80
+ })))));
81
+ }
82
+ AttachmentPreviewHeader.propTypes = attachmentPreviewHeaderPropTypes;
83
+ AttachmentPreviewHeader.defaultProps = attachmentPreviewHeaderDefaultProps;
84
+ AttachmentPreviewHeader.displayName = 'AttachmentPreviewHeader';