@flozy/editor 3.3.1 → 3.3.3

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 (44) hide show
  1. package/dist/Editor/CommonEditor.js +6 -2
  2. package/dist/Editor/Elements/AI/AIInput.js +157 -0
  3. package/dist/Editor/Elements/AI/CustomSelect.js +101 -0
  4. package/dist/Editor/Elements/AI/PopoverAIInput.js +235 -0
  5. package/dist/Editor/Elements/AI/Styles.js +149 -0
  6. package/dist/Editor/Elements/AI/helper.js +145 -0
  7. package/dist/Editor/Elements/Form/Form.js +33 -4
  8. package/dist/Editor/Elements/Form/FormElements/FormCheckbox.js +54 -0
  9. package/dist/Editor/Elements/Form/FormElements/FormDate.js +55 -0
  10. package/dist/Editor/Elements/Form/FormElements/FormNumbers.js +54 -0
  11. package/dist/Editor/Elements/Form/FormElements/FormRadioButton.js +54 -0
  12. package/dist/Editor/Elements/Form/FormElements/index.js +9 -1
  13. package/dist/Editor/Elements/Form/FormElements/validations.js +3 -3
  14. package/dist/Editor/Elements/Form/FormField.js +12 -3
  15. package/dist/Editor/Elements/Form/Workflow/FormWorkflow.js +12 -3
  16. package/dist/Editor/Elements/Link/LinkButton.js +8 -6
  17. package/dist/Editor/Styles/EditorStyles.js +4 -0
  18. package/dist/Editor/Toolbar/Basic/index.js +9 -6
  19. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/InfinityAITool.js +24 -0
  20. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/index.js +4 -2
  21. package/dist/Editor/Toolbar/PopupTool/index.js +11 -7
  22. package/dist/Editor/assets/svg/AIIcons.js +438 -0
  23. package/dist/Editor/common/Icon.js +33 -2
  24. package/dist/Editor/common/LinkSettings/index.js +0 -1
  25. package/dist/Editor/common/MentionsPopup/index.js +7 -0
  26. package/dist/Editor/common/Shorthands/elements.js +12 -0
  27. package/dist/Editor/common/StyleBuilder/fieldStyle.js +2 -10
  28. package/dist/Editor/common/StyleBuilder/fieldTypes/card.js +117 -0
  29. package/dist/Editor/common/StyleBuilder/fieldTypes/index.js +7 -1
  30. package/dist/Editor/common/StyleBuilder/fieldTypes/metaDataMapping.js +41 -0
  31. package/dist/Editor/common/StyleBuilder/fieldTypes/selectSwitch.js +101 -0
  32. package/dist/Editor/common/StyleBuilder/fieldTypes/textOptions.js +44 -17
  33. package/dist/Editor/common/StyleBuilder/formStyle.js +25 -0
  34. package/dist/Editor/common/StyleBuilder/textOptionsStyles.js +43 -0
  35. package/dist/Editor/common/SwipeableDrawer/index.js +1 -1
  36. package/dist/Editor/common/WaveLoading/index.js +18 -0
  37. package/dist/Editor/common/WaveLoading/style.css +38 -0
  38. package/dist/Editor/common/iconslist.js +541 -0
  39. package/dist/Editor/hooks/useClickOutside.js +35 -0
  40. package/dist/Editor/hooks/useMouseMove.js +4 -2
  41. package/dist/Editor/utils/form.js +2 -1
  42. package/dist/Editor/utils/helper.js +1 -1
  43. package/dist/Editor/utils/infinityAI.js +23 -0
  44. package/package.json +1 -1
@@ -31,6 +31,7 @@ import decorators from "./utils/Decorators";
31
31
  import { getTRBLBreakPoints } from "./helper/theme";
32
32
  import { handleInsertLastElement, outsideEditorClickLabel } from "./utils/helper";
33
33
  import useWindowResize from "./hooks/useWindowResize";
34
+ import PopoverAIInput from "./Elements/AI/PopoverAIInput";
34
35
  import { jsx as _jsx } from "react/jsx-runtime";
35
36
  import { jsxs as _jsxs } from "react/jsx-runtime";
36
37
  const Item = /*#__PURE__*/forwardRef(({
@@ -455,7 +456,9 @@ const CommonEditor = /*#__PURE__*/forwardRef((props, ref) => {
455
456
  customProps: customProps,
456
457
  toolbarOptions: toolbarOptions,
457
458
  theme: theme
458
- }) : null, footer && (fullScreen || readOnly) && /*#__PURE__*/_jsx(Typography, {
459
+ }) : null, /*#__PURE__*/_jsx(PopoverAIInput, {
460
+ otherProps: otherProps
461
+ }), footer && (fullScreen || readOnly) && /*#__PURE__*/_jsx(Typography, {
459
462
  sx: {
460
463
  color: "rgb(100, 116, 139)",
461
464
  fontSize: "13px",
@@ -471,7 +474,8 @@ const CommonEditor = /*#__PURE__*/forwardRef((props, ref) => {
471
474
  }), !readOnly ? /*#__PURE__*/_jsx(PopupTool, {
472
475
  onDrawerOpen: onDrawerOpen,
473
476
  theme: theme,
474
- setIsTextSelected: setIsTextSelected
477
+ setIsTextSelected: setIsTextSelected,
478
+ customProps: customProps
475
479
  }) : null]
476
480
  })
477
481
  }), htmlAction.showInput && /*#__PURE__*/_jsx(CodeToText, {
@@ -0,0 +1,157 @@
1
+ import { Box, IconButton, TextareaAutosize, Typography } from "@mui/material";
2
+ import Styles from "./Styles";
3
+ import Icon from "../../common/Icon";
4
+ // import { TbRotateClockwise } from "react-icons/tb";
5
+ // import { FaRegCircleCheck } from "react-icons/fa6";
6
+ import { IoSend } from "react-icons/io5";
7
+ import React, { forwardRef, useEffect, useRef } from "react";
8
+ import WaveLoading from "../../common/WaveLoading";
9
+ import useWindowResize from "../../hooks/useWindowResize";
10
+ import CustomSelect from "./CustomSelect";
11
+ import { editContentOptions, newContentOptions, generatedContentOptions } from "./helper";
12
+ import useClickOutside from "../../hooks/useClickOutside";
13
+ import { useEditorContext } from "../../hooks/useMouseMove";
14
+ import { jsx as _jsx } from "react/jsx-runtime";
15
+ import { jsxs as _jsxs } from "react/jsx-runtime";
16
+ import { Fragment as _Fragment } from "react/jsx-runtime";
17
+ function getProps(openAI, generatedText) {
18
+ const dropDownProps = {
19
+ fromElements: {
20
+ options: newContentOptions,
21
+ show: window.getSelection().toString().length
22
+ },
23
+ fromToolBar: {
24
+ options: editContentOptions,
25
+ show: true
26
+ },
27
+ generatedContent: {
28
+ options: generatedContentOptions,
29
+ show: true
30
+ }
31
+ };
32
+ if (openAI === "fromToolBar" && generatedText?.length) {
33
+ return dropDownProps.generatedContent;
34
+ }
35
+ return dropDownProps[openAI];
36
+ }
37
+ function AIInput({
38
+ onSend,
39
+ loading,
40
+ generatedText,
41
+ openAI,
42
+ inputValue,
43
+ onInputChange,
44
+ onClickOutside
45
+ }, ref) {
46
+ const {
47
+ theme
48
+ } = useEditorContext();
49
+ const classes = Styles(theme);
50
+ const inputRef = useRef();
51
+ const [size] = useWindowResize();
52
+ const inputWrapperRef = useRef();
53
+ const refs = useClickOutside({
54
+ onClickOutside,
55
+ omitIds: ["infinity-select-popover"],
56
+ omitClass: ["MuiModal-backdrop"],
57
+ refCount: 2
58
+ });
59
+ useEffect(() => {
60
+ let timeoutId;
61
+ if (inputRef.current && openAI !== "fromToolBar") {
62
+ timeoutId = setTimeout(() => {
63
+ inputRef.current.focus();
64
+ }, 200);
65
+ }
66
+ return () => {
67
+ clearTimeout(timeoutId);
68
+ };
69
+ }, [openAI]);
70
+ const isSendBtnDisabled = !inputValue || loading;
71
+ const props = getProps(openAI, generatedText) || {};
72
+ const fromToolBar = openAI === "fromToolBar";
73
+ const handleSendBtnClick = () => {
74
+ if (isSendBtnDisabled) {
75
+ return;
76
+ }
77
+ onSend("", {
78
+ replace: true,
79
+ isSendBtn: true
80
+ });
81
+ };
82
+ return /*#__PURE__*/_jsxs(_Fragment, {
83
+ children: [size.device === "xs" ? /*#__PURE__*/_jsx(Box, {
84
+ component: "div",
85
+ ref: refs[1],
86
+ sx: classes.customSelectWrapper,
87
+ children: /*#__PURE__*/_jsx(CustomSelect, {
88
+ ...props,
89
+ onSend: onSend,
90
+ classes: classes
91
+ })
92
+ }) : null, /*#__PURE__*/_jsxs(Box, {
93
+ component: "div",
94
+ sx: classes.aiContainer,
95
+ children: [generatedText ? /*#__PURE__*/_jsx(Typography, {
96
+ sx: classes.generatedText,
97
+ children: generatedText
98
+ }) : null, /*#__PURE__*/_jsxs(Box, {
99
+ component: "form",
100
+ sx: classes.aiInputWrapper,
101
+ onSubmit: e => {
102
+ e.preventDefault();
103
+ },
104
+ ref: refs[0],
105
+ children: [/*#__PURE__*/_jsx("div", {
106
+ className: "icon-container",
107
+ ref: inputWrapperRef,
108
+ children: /*#__PURE__*/_jsx(Icon, {
109
+ icon: "infinityIcon"
110
+ })
111
+ }), loading ? /*#__PURE__*/_jsxs("div", {
112
+ className: "loading-container",
113
+ children: [/*#__PURE__*/_jsx(Typography, {
114
+ variant: "body1",
115
+ children: "Infinity Writing"
116
+ }), /*#__PURE__*/_jsx("div", {
117
+ children: /*#__PURE__*/_jsx(WaveLoading, {})
118
+ })]
119
+ }) : /*#__PURE__*/_jsx(TextareaAutosize, {
120
+ className: "ai-input",
121
+ placeholder: fromToolBar ? "" : "Ask AI to write anything...",
122
+ ref: inputRef,
123
+ value: inputValue,
124
+ onChange: onInputChange,
125
+ disabled: fromToolBar,
126
+ onKeyDown: event => {
127
+ if (event.key === "Enter" && !event.shiftKey) {
128
+ event.preventDefault();
129
+ handleSendBtnClick();
130
+ }
131
+ }
132
+ }), /*#__PURE__*/_jsx(Box, {
133
+ component: "div",
134
+ style: classes.sendIconContainer,
135
+ children: /*#__PURE__*/_jsx(IconButton, {
136
+ sx: isSendBtnDisabled ? classes.sendBtnDisabled : classes.sendBtn,
137
+ onClick: () => handleSendBtnClick(),
138
+ children: /*#__PURE__*/_jsx(IoSend, {
139
+ color: "#fff",
140
+ size: 13
141
+ })
142
+ })
143
+ })]
144
+ })]
145
+ }), size.device === "xs" ? null : /*#__PURE__*/_jsx(Box, {
146
+ component: "div",
147
+ ref: refs[1],
148
+ sx: classes.customSelectWrapper,
149
+ children: /*#__PURE__*/_jsx(CustomSelect, {
150
+ ...props,
151
+ onSend: onSend,
152
+ classes: classes
153
+ })
154
+ })]
155
+ });
156
+ }
157
+ export default /*#__PURE__*/forwardRef(AIInput);
@@ -0,0 +1,101 @@
1
+ import { Box, Button, IconButton, Popover, Typography } from "@mui/material";
2
+ import React, { useRef, useState } from "react";
3
+ import { FaChevronRight } from "react-icons/fa";
4
+ import { jsx as _jsx } from "react/jsx-runtime";
5
+ import { jsxs as _jsxs } from "react/jsx-runtime";
6
+ import { Fragment as _Fragment } from "react/jsx-runtime";
7
+ function CustomSelect({
8
+ classes,
9
+ options,
10
+ onSend,
11
+ show
12
+ }) {
13
+ if (show) {
14
+ return /*#__PURE__*/_jsx(Box, {
15
+ component: "div",
16
+ sx: classes.customSelectContainer,
17
+ children: options?.map((groupOption, index) => {
18
+ const {
19
+ options,
20
+ groupLabel
21
+ } = groupOption;
22
+ return /*#__PURE__*/_jsxs(React.Fragment, {
23
+ children: [groupLabel && /*#__PURE__*/_jsx(Typography, {
24
+ variant: "body2",
25
+ sx: classes.optionHeading,
26
+ children: groupLabel
27
+ }), options?.map((option, i) => {
28
+ return /*#__PURE__*/_jsx(DisplayOption, {
29
+ option: option,
30
+ classes: classes,
31
+ onSend: onSend
32
+ }, i);
33
+ })]
34
+ }, index);
35
+ })
36
+ });
37
+ } else {
38
+ return /*#__PURE__*/_jsx(_Fragment, {});
39
+ }
40
+ }
41
+ export default CustomSelect;
42
+ function DisplayOption({
43
+ option,
44
+ classes,
45
+ onSend
46
+ }) {
47
+ const {
48
+ Icon
49
+ } = option;
50
+ const [open, setOpen] = useState(false);
51
+ const optionRef = useRef();
52
+ return /*#__PURE__*/_jsxs(Box, {
53
+ sx: classes.optionWrapper,
54
+ ref: optionRef,
55
+ children: [/*#__PURE__*/_jsxs(Button, {
56
+ sx: classes.optionBtn,
57
+ onClick: e => {
58
+ e.stopPropagation();
59
+
60
+ // is having child options
61
+ if (option.options?.length) {
62
+ setOpen(e.currentTarget);
63
+ return;
64
+ }
65
+ setOpen(null);
66
+ onSend(option.value, option);
67
+ },
68
+ id: "infinity-select-popover",
69
+ children: [/*#__PURE__*/_jsxs("div", {
70
+ className: "option-label",
71
+ id: "infinity-select-popover",
72
+ children: [Icon && /*#__PURE__*/_jsx(Icon, {}), option.label]
73
+ }), option.options?.length && /*#__PURE__*/_jsx(IconButton, {
74
+ children: /*#__PURE__*/_jsx(FaChevronRight, {
75
+ color: "#94A3B8",
76
+ size: 12
77
+ })
78
+ })]
79
+ }), /*#__PURE__*/_jsx(Popover, {
80
+ open: open && option.options,
81
+ anchorEl: open,
82
+ sx: {
83
+ zIndex: 9001,
84
+ background: "transparent"
85
+ },
86
+ anchorOrigin: {
87
+ vertical: "top",
88
+ horizontal: "right"
89
+ },
90
+ onClose: () => {
91
+ setOpen(null);
92
+ },
93
+ children: /*#__PURE__*/_jsx(CustomSelect, {
94
+ options: option.options,
95
+ onSend: onSend,
96
+ classes: classes,
97
+ show: open
98
+ })
99
+ })]
100
+ });
101
+ }
@@ -0,0 +1,235 @@
1
+ import { useEffect, useRef, useState } from "react";
2
+ import { useEditorContext } from "../../hooks/useMouseMove";
3
+ import Styles from "./Styles";
4
+ import { Box, Fade, Paper, Popper } from "@mui/material";
5
+ import AIInput from "./AIInput";
6
+ import { ReactEditor, useSlate } from "slate-react";
7
+ import { Node, Path, Transforms } from "slate";
8
+ import useWindowResize from "../../hooks/useWindowResize";
9
+ import { MODES } from "./helper";
10
+ import { jsx as _jsx } from "react/jsx-runtime";
11
+ import { jsxs as _jsxs } from "react/jsx-runtime";
12
+ const scrollToAIInput = () => {
13
+ try {
14
+ setTimeout(() => {
15
+ const slateWrapper = document.getElementById("slate-wrapper-scroll-container");
16
+ const selectionRect = window.getSelection().getRangeAt(0).getBoundingClientRect();
17
+ const halfOfWrapper = slateWrapper.clientHeight / 2;
18
+ const selectionScollTop = selectionRect.y + selectionRect.height;
19
+ if (selectionScollTop > halfOfWrapper) {
20
+ // scroll to half of the slateWrapper
21
+ slateWrapper.scrollTo({
22
+ top: slateWrapper.scrollTop + selectionScollTop - halfOfWrapper,
23
+ behavior: "smooth"
24
+ });
25
+ }
26
+ }, 200);
27
+ } catch (err) {
28
+ console.log(err);
29
+ }
30
+ };
31
+ const updateAnchorEl = (setAnchorEl, editor) => {
32
+ try {
33
+ if (!editor.selection) {
34
+ return;
35
+ }
36
+ const focussedNode = Node.get(editor, editor.selection.anchor.path);
37
+ const focussedDom = ReactEditor.toDOMNode(editor, focussedNode);
38
+ const selection = window.getSelection();
39
+ if (selection.rangeCount) {
40
+ const getBoundingClientRect = () => {
41
+ const editorEle = document.querySelector(".ed-section-inner").getBoundingClientRect();
42
+ const caretPos = focussedDom.getBoundingClientRect();
43
+ return {
44
+ y: caretPos.y,
45
+ height: caretPos.height,
46
+ top: caretPos.top,
47
+ right: caretPos.right,
48
+ bottom: caretPos.bottom,
49
+ x: editorEle.x,
50
+ left: editorEle.left,
51
+ width: editorEle.width
52
+ };
53
+ };
54
+ setAnchorEl({
55
+ getBoundingClientRect
56
+ });
57
+ }
58
+ } catch (err) {
59
+ console.log(err);
60
+ }
61
+ };
62
+ function PopoverAIInput({
63
+ otherProps
64
+ }) {
65
+ const {
66
+ services
67
+ } = otherProps;
68
+ const {
69
+ openAI,
70
+ setOpenAI
71
+ } = useEditorContext();
72
+ const [anchorEl, setAnchorEl] = useState(null);
73
+ const [loading, setLoading] = useState(false);
74
+ const [generatedText, setGeneratedText] = useState("");
75
+ const [inputValue, setInputValue] = useState("");
76
+ const [selectedOption, setSelectedOption] = useState();
77
+ const targetRef = useRef();
78
+ const classes = Styles();
79
+ const editor = useSlate();
80
+ const [size] = useWindowResize();
81
+ const onClickOutside = () => {
82
+ setAnchorEl(null);
83
+ setOpenAI("");
84
+ setGeneratedText("");
85
+ setLoading(false);
86
+ setSelectedOption(null);
87
+ setInputValue("");
88
+ ReactEditor.focus(editor);
89
+ Transforms.deselect(editor);
90
+ };
91
+ const editorElement = document.querySelector(".ed-section-inner");
92
+ useEffect(() => {
93
+ updateAnchorEl(setAnchorEl, editor);
94
+ }, [openAI, editor.selection]);
95
+ useEffect(() => {
96
+ if (openAI === "fromToolBar") {
97
+ scrollToAIInput();
98
+ }
99
+ }, [openAI]);
100
+ const onSend = async (type, option) => {
101
+ if (type === "close") {
102
+ onClickOutside();
103
+ return;
104
+ }
105
+ if (type === "replace_selection") {
106
+ // replace generated text
107
+ Transforms.insertText(editor, generatedText);
108
+ onClickOutside();
109
+ return;
110
+ }
111
+ if (type === "try_again") {
112
+ // resetting the previous option and try again
113
+ option = selectedOption;
114
+ type = selectedOption.value;
115
+ } else {
116
+ setSelectedOption(option);
117
+ }
118
+ setLoading(true);
119
+ const payload = {
120
+ mode: option.mode || 0,
121
+ query: inputValue
122
+ };
123
+ if (option.mode === MODES.translate || option.mode === MODES.rephraseTone) {
124
+ payload.textOptionInput = type;
125
+ }
126
+ if (option.mode) {
127
+ payload.textData = generatedText || window.getSelection().toString();
128
+ }
129
+ const result = await services("infinityAI", payload);
130
+ setLoading(false);
131
+ setInputValue("");
132
+ let {
133
+ data: text
134
+ } = result || {};
135
+ if (!option.replace) {
136
+ if (type === "continue_writing") {
137
+ setGeneratedText(generatedText + text);
138
+ } else {
139
+ setGeneratedText(text);
140
+ }
141
+ return;
142
+ }
143
+ const currentPath = Path.parent(editor.selection.focus.path);
144
+ const nextPath = Path.next(currentPath);
145
+
146
+ // Get the current selection point
147
+ const {
148
+ anchor
149
+ } = editor.selection;
150
+ const {
151
+ path
152
+ } = editor.selection.anchor;
153
+ const {
154
+ text: selectText
155
+ } = Node.get(editor, path);
156
+ const insertInNewLine = option.isSendBtn && selectText?.length || type === "continue_writing";
157
+ if (insertInNewLine) {
158
+ Transforms.insertNodes(editor, {
159
+ type: "paragraph",
160
+ children: [{
161
+ text
162
+ }]
163
+ }, {
164
+ at: nextPath,
165
+ select: true
166
+ });
167
+ } else {
168
+ Transforms.insertText(editor, text);
169
+ }
170
+ const range = {
171
+ ...editor.selection,
172
+ anchor: {
173
+ ...anchor,
174
+ offset: openAI === "fromToolBar" ? anchor.offset : 0
175
+ }
176
+ };
177
+ ReactEditor.focus(editor);
178
+ Transforms.select(editor, range);
179
+ scrollToAIInput();
180
+ };
181
+ const onInputChange = e => {
182
+ setInputValue(e.target.value);
183
+ };
184
+ return /*#__PURE__*/_jsxs("div", {
185
+ children: [size.device === "xs" && openAI ? /*#__PURE__*/_jsx(Box, {
186
+ component: "div",
187
+ sx: classes.mobileAIInputWrapper,
188
+ ref: targetRef,
189
+ children: /*#__PURE__*/_jsx(AIInput, {
190
+ loading: loading,
191
+ onSend: onSend,
192
+ generatedText: generatedText,
193
+ anchorEl: anchorEl,
194
+ openAI: openAI,
195
+ inputValue: inputValue,
196
+ onInputChange: onInputChange,
197
+ onClickOutside: onClickOutside
198
+ })
199
+ }) : /*#__PURE__*/_jsx(Popper, {
200
+ open: Boolean(openAI),
201
+ anchorEl: anchorEl,
202
+ transition: true,
203
+ placement: "bottom-start",
204
+ sx: {
205
+ ...classes.aiPopper,
206
+ width: editorElement?.offsetWidth || 400
207
+ },
208
+ ref: targetRef,
209
+ children: ({
210
+ TransitionProps
211
+ }) => /*#__PURE__*/_jsx(Fade, {
212
+ ...TransitionProps,
213
+ timeout: 350,
214
+ children: /*#__PURE__*/_jsx(Paper, {
215
+ children: /*#__PURE__*/_jsx(AIInput, {
216
+ loading: loading,
217
+ onSend: onSend,
218
+ generatedText: generatedText,
219
+ anchorEl: anchorEl,
220
+ openAI: openAI,
221
+ inputValue: inputValue,
222
+ onInputChange: onInputChange,
223
+ onClickOutside: onClickOutside
224
+ })
225
+ })
226
+ })
227
+ }), openAI ? /*#__PURE__*/_jsx("div", {
228
+ style: {
229
+ height: targetRef?.current?.clientHeight > 250 ? targetRef?.current?.clientHeight : 250,
230
+ background: "transparent"
231
+ }
232
+ }) : null]
233
+ });
234
+ }
235
+ export default PopoverAIInput;
@@ -0,0 +1,149 @@
1
+ const Styles = theme => ({
2
+ aiContainer: {
3
+ background: "#FCFAFF",
4
+ border: "1px solid #8360FD",
5
+ borderRadius: "8px"
6
+ },
7
+ aiInputWrapper: {
8
+ display: "flex",
9
+ alignItems: "baseline",
10
+ justifyContent: "space-between",
11
+ padding: "0px 12px",
12
+ minHeight: "36px",
13
+ position: "relative",
14
+ background: theme?.palette?.editor?.background,
15
+ borderRadius: "7px",
16
+ "& .icon-container": {
17
+ display: "flex",
18
+ alignItems: "center",
19
+ height: "48px"
20
+ },
21
+ "& .ai-input": {
22
+ padding: "14px",
23
+ border: "none",
24
+ outline: "none",
25
+ width: "100%",
26
+ background: "transparent",
27
+ resize: "none",
28
+ alignSelf: "center",
29
+ color: theme?.palette?.editor?.textColor,
30
+ fontSize: "13px !important",
31
+ "&::placeholder": {
32
+ color: "#94A3B8",
33
+ opacity: 1 /* Firefox */
34
+ },
35
+
36
+ "&::-ms-input-placeholder": {
37
+ /* Edge 12-18 */color: "#94A3B8"
38
+ }
39
+ },
40
+ "& .action-btns": {
41
+ display: "flex",
42
+ alignItems: "center",
43
+ gap: "6px",
44
+ "& .MuiTypography-root": {
45
+ color: "#64748B !important",
46
+ fontSize: "14px",
47
+ textTransform: "none"
48
+ },
49
+ "& .btn-wrapper": {
50
+ display: "flex",
51
+ alignItems: "center",
52
+ gap: "6px"
53
+ }
54
+ },
55
+ "& .loading-container": {
56
+ display: "flex",
57
+ alignItems: "center",
58
+ color: "#2563EB !important",
59
+ gap: "12px",
60
+ width: "100%",
61
+ paddingLeft: "14px",
62
+ alignSelf: "center",
63
+ "& .MuiTypography-body1": {
64
+ fontSize: "14px",
65
+ color: "#2563EB !important",
66
+ fontWeight: 500
67
+ }
68
+ }
69
+ },
70
+ sendBtn: {
71
+ background: "linear-gradient(331.11deg, #2563EB 7.11%, #8360FD 88.37%)"
72
+ },
73
+ sendBtnDisabled: {
74
+ background: "#C0C9D6"
75
+ },
76
+ aiPopper: {
77
+ zIndex: 9000,
78
+ "& .MuiPaper-rounded": {
79
+ background: "transparent",
80
+ boxShadow: "none"
81
+ }
82
+ },
83
+ generatedText: {
84
+ margin: "8px",
85
+ maxHeight: "80px",
86
+ overflow: "auto"
87
+ },
88
+ customSelectWrapper: {
89
+ width: "fit-content",
90
+ marginTop: "4px",
91
+ "@media only screen and (max-width: 600px)": {
92
+ marginBottom: "4px"
93
+ }
94
+ },
95
+ customSelectContainer: {
96
+ background: theme?.palette?.editor?.background,
97
+ boxShadow: "0px 4px 10px 0px #00000029",
98
+ borderRadius: "8px",
99
+ maxHeight: "250px",
100
+ overflow: "auto",
101
+ // width: "240px",
102
+ minWidth: "200px",
103
+ border: "1px solid #E0E0E0"
104
+ },
105
+ optionWrapper: {
106
+ position: "relative"
107
+
108
+ // "& .select-option": {
109
+ // position: "absolute",
110
+ // left: 0,
111
+ // top: 0
112
+ // },
113
+ },
114
+
115
+ optionBtn: {
116
+ color: "#373232",
117
+ padding: "8px 12px",
118
+ textTransform: "none",
119
+ justifyContent: "space-between",
120
+ width: "100%",
121
+ fontWeight: "normal !important",
122
+ "& .option-label": {
123
+ display: "flex",
124
+ alignItems: "center",
125
+ gap: "8px"
126
+ }
127
+ },
128
+ optionHeading: {
129
+ color: theme?.palette?.editor?.textColor,
130
+ padding: "14px 0px 8px 4px",
131
+ fontWeight: 600,
132
+ borderBottom: "1px solid #DCE4EC",
133
+ margin: "0px 8px"
134
+ },
135
+ mobileAIInputWrapper: {
136
+ position: "fixed",
137
+ bottom: "env(safe-area-inset-bottom)",
138
+ left: 0,
139
+ width: "100%",
140
+ zIndex: "9000"
141
+ },
142
+ sendIconContainer: {
143
+ alignSelf: "flex-end",
144
+ height: "48px",
145
+ display: "flex",
146
+ alignItems: "center"
147
+ }
148
+ });
149
+ export default Styles;