@flozy/editor 4.2.9 → 4.3.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.
@@ -544,7 +544,8 @@ const CommonEditor = /*#__PURE__*/forwardRef((props, ref) => {
544
544
  customProps: customProps,
545
545
  theme: theme
546
546
  }) : null, /*#__PURE__*/_jsx(PopoverAIInput, {
547
- otherProps: otherProps || {}
547
+ otherProps: otherProps || {},
548
+ editorWrapper: editorWrapper
548
549
  }), footer && (fullScreen || readOnly) && /*#__PURE__*/_jsx(Typography, {
549
550
  sx: {
550
551
  color: "rgb(100, 116, 139)",
@@ -562,7 +563,8 @@ const CommonEditor = /*#__PURE__*/forwardRef((props, ref) => {
562
563
  onDrawerOpen: onDrawerOpen,
563
564
  theme: theme,
564
565
  setIsTextSelected: setIsTextSelected,
565
- customProps: customProps
566
+ customProps: customProps,
567
+ editorWrapper: editorWrapper
566
568
  }) : null, !readOnly && showViewport ? /*#__PURE__*/_jsx(SwitchViewport, {
567
569
  breakpoint: breakpoint,
568
570
  onChange: b => onSwitchBreakpoint(b)
@@ -9,6 +9,7 @@ import { MODES } from "./helper";
9
9
  import { getSelectedText } from "../../utils/helper";
10
10
  import { VoiceToText } from "./VoiceToText";
11
11
  import deserialize from "../../helper/deserialize";
12
+ import useEditorScroll from "../../hooks/useEditorScroll";
12
13
  import { jsx as _jsx } from "react/jsx-runtime";
13
14
  import { jsxs as _jsxs } from "react/jsx-runtime";
14
15
  const getInputWidth = selectedElement => {
@@ -154,7 +155,10 @@ const updateAnchorEl = (setAnchorEl, editor, openAI, selectedElement) => {
154
155
  }
155
156
  };
156
157
  function PopoverAIInput({
157
- otherProps
158
+ otherProps,
159
+ editorWrapper = {
160
+ current: null
161
+ }
158
162
  }) {
159
163
  const {
160
164
  services
@@ -171,6 +175,10 @@ function PopoverAIInput({
171
175
  const [selectedOption, setSelectedOption] = useState();
172
176
  const classes = Styles();
173
177
  const editor = useSlate();
178
+ const updateAnchor = () => {
179
+ updateAnchorEl(setAnchorEl, editor, openAI, selectedElement);
180
+ };
181
+ useEditorScroll(editorWrapper, updateAnchor);
174
182
  const onClickOutside = () => {
175
183
  setAnchorEl(null);
176
184
  setOpenAI("");
@@ -181,9 +189,7 @@ function PopoverAIInput({
181
189
  ReactEditor.focus(editor);
182
190
  Transforms.deselect(editor);
183
191
  };
184
- useEffect(() => {
185
- updateAnchorEl(setAnchorEl, editor, openAI, selectedElement);
186
- }, [openAI, editor.selection]);
192
+ useEffect(updateAnchor, [openAI, editor.selection]);
187
193
  useEffect(() => {
188
194
  if (openAI) {
189
195
  scrollToAIInput(editor);
@@ -1,6 +1,7 @@
1
1
  const Styles = theme => ({
2
2
  aiContainer: {
3
3
  background: "#FCFAFF",
4
+ background: theme?.palette?.editor?.aiInputBackground,
4
5
  border: "1px solid #8360FD",
5
6
  borderRadius: "6px",
6
7
  boxShadow: "0px 4px 10px 0px #00000029"
@@ -12,7 +13,7 @@ const Styles = theme => ({
12
13
  padding: "0px 4px 0px 12px",
13
14
  minHeight: "36px",
14
15
  position: "relative",
15
- background: "#FCFAFF",
16
+ background: theme?.palette?.editor?.aiInputBackground,
16
17
  borderRadius: "5px",
17
18
  "& .icon-container": {
18
19
  display: "flex",
@@ -29,7 +30,7 @@ const Styles = theme => ({
29
30
  background: "transparent",
30
31
  resize: "none",
31
32
  alignSelf: "center",
32
- color: "#000",
33
+ color: theme?.palette?.editor?.textColor,
33
34
  fontSize: "14px !important",
34
35
  fontFamily: '"Inter", sans-serif',
35
36
  "&:focus-visible": {
@@ -81,6 +82,7 @@ const Styles = theme => ({
81
82
  },
82
83
  sendBtnDisabled: {
83
84
  background: "#C0C9D6",
85
+ opacity: "0.5",
84
86
  "&:hover": {
85
87
  background: "#C0C9D6"
86
88
  }
@@ -4,6 +4,7 @@ import STTStyles from "./style";
4
4
  import { Grid, IconButton, Box } from "@mui/material";
5
5
  import { AudioWave } from "./AudioWave";
6
6
  import { CloseGreyCircle, PauseRecordingIcon, TickBlueCircle } from "../../../assets/svg/AIIcons";
7
+ import { useEditorContext } from "../../../hooks/useMouseMove";
7
8
  import { jsx as _jsx } from "react/jsx-runtime";
8
9
  import { jsxs as _jsxs } from "react/jsx-runtime";
9
10
  function STT(props) {
@@ -15,7 +16,10 @@ function STT(props) {
15
16
  const {
16
17
  services
17
18
  } = otherProps;
18
- const classes = STTStyles();
19
+ const {
20
+ theme
21
+ } = useEditorContext();
22
+ const classes = STTStyles(theme);
19
23
  const [mediaRecorder, setMediaRecorder] = useState(null);
20
24
  const [audioChunks, setAudioChunks] = useState([]);
21
25
  const [chunkIndex, setChunkIndex] = useState(0);
@@ -127,6 +131,7 @@ function STT(props) {
127
131
  children: [/*#__PURE__*/_jsx(Box, {
128
132
  children: /*#__PURE__*/_jsx(IconButton, {
129
133
  onClick: closeRecording,
134
+ className: "ai-icon",
130
135
  children: /*#__PURE__*/_jsx(CloseGreyCircle, {})
131
136
  })
132
137
  }), /*#__PURE__*/_jsx(Box, {
@@ -137,6 +142,7 @@ function STT(props) {
137
142
  }), /*#__PURE__*/_jsx(Box, {
138
143
  children: showPause ? /*#__PURE__*/_jsx(IconButton, {
139
144
  onClick: stopRecording,
145
+ className: "ai-icon",
140
146
  children: /*#__PURE__*/_jsx(PauseRecordingIcon, {})
141
147
  }) : /*#__PURE__*/_jsx(IconButton, {
142
148
  onClick: sendToInfiniti,
@@ -1,4 +1,4 @@
1
- const styles = () => ({
1
+ const styles = theme => ({
2
2
  SttContainer: {
3
3
  display: "flex",
4
4
  width: "100%",
@@ -12,17 +12,25 @@ const styles = () => ({
12
12
  borderColor: "#2563EB"
13
13
  },
14
14
  "&& .MuiOutlinedInput-root": {
15
- background: "rgba(252, 250, 255, 1)"
15
+ background: theme?.palette?.editor?.aiInputBackground
16
16
  }
17
17
  },
18
18
  AudioVizualizerContainer: {
19
19
  width: "100%",
20
20
  display: "flex",
21
- background: "rgba(252, 250, 255, 1)",
21
+ background: theme?.palette?.editor?.aiInputBackground,
22
22
  borderRadius: "8px",
23
23
  border: "1px solid #2563EB",
24
24
  alignItems: "center",
25
- flexWrap: "wrap"
25
+ flexWrap: "wrap",
26
+ "& .ai-icon": {
27
+ "& circle": {
28
+ fill: theme?.palette?.editor?.aiInputBackground
29
+ },
30
+ "& rect": {
31
+ fill: theme?.palette?.editor?.aiInputBackground
32
+ }
33
+ }
26
34
  },
27
35
  AudioVizualizerContent: {
28
36
  display: "flex",
@@ -26,7 +26,13 @@ const VariableButton = props => {
26
26
  onChange: updateVariable,
27
27
  IconComponent: () => /*#__PURE__*/_jsx(KeyboardArrowDownIcon, {}),
28
28
  MenuProps: {
29
- sx: classes.variableMenuItem
29
+ sx: classes.variableMenuItem,
30
+ PaperProps: {
31
+ style: {
32
+ maxHeight: 300,
33
+ overflowY: "auto"
34
+ }
35
+ }
30
36
  },
31
37
  children: [/*#__PURE__*/_jsx(MenuItem, {
32
38
  value: "",
@@ -8,12 +8,14 @@ import useWindowResize from "../../hooks/useWindowResize";
8
8
  import MiniTextFormat from "./MiniTextFormat";
9
9
  import { useEditorContext } from "../../hooks/useMouseMove";
10
10
  import usePopupStyles from "../PopupTool/PopupToolStyle";
11
+ import useEditorScroll from "../../hooks/useEditorScroll";
11
12
  import { jsx as _jsx } from "react/jsx-runtime";
12
13
  const PopupTool = props => {
13
14
  const {
14
15
  theme,
15
16
  setIsTextSelected,
16
- customProps
17
+ customProps,
18
+ editorWrapper
17
19
  } = props;
18
20
  const classes = usePopupStyles(theme);
19
21
  const {
@@ -33,6 +35,27 @@ const PopupTool = props => {
33
35
  const {
34
36
  selectedElement
35
37
  } = useEditorContext();
38
+ const updateAnchorEl = () => {
39
+ try {
40
+ const domSelection = window.getSelection();
41
+ const domRange = domSelection?.getRangeAt(0);
42
+ const {
43
+ startOffset,
44
+ endOffset
45
+ } = domRange || {};
46
+ if (startOffset !== endOffset) {
47
+ const rect = domRange.getBoundingClientRect();
48
+ setAnchorEl({
49
+ clientWidth: rect.width,
50
+ clientHeight: rect.height,
51
+ getBoundingClientRect: () => rect
52
+ });
53
+ }
54
+ } catch (err) {
55
+ console.log(err);
56
+ }
57
+ };
58
+ useEditorScroll(editorWrapper, updateAnchorEl);
36
59
  useEffect(() => {
37
60
  const userStoppedSelection = size?.device === "xs" ? true : event === "end"; // for mobile, when user starts the selection, we are gonna show the popup tool
38
61
 
@@ -57,36 +80,16 @@ const PopupTool = props => {
57
80
  updateAnchorEl();
58
81
  }
59
82
  }, [selection]);
60
- useEffect(() => {
61
- if (selectedElement?.enable === 1) {
62
- setAnchorEl(null);
63
- }
64
- }, [selection, selectedElement?.path, selectedElement?.enable]);
65
- const updateAnchorEl = () => {
66
- try {
67
- const domSelection = window.getSelection();
68
- const domRange = domSelection?.getRangeAt(0);
69
- const {
70
- startOffset,
71
- endOffset
72
- } = domRange || {};
73
- if (startOffset !== endOffset) {
74
- const rect = domRange.getBoundingClientRect();
75
- setAnchorEl({
76
- clientWidth: rect.width,
77
- clientHeight: rect.height,
78
- getBoundingClientRect: () => rect
79
- });
80
- }
81
- } catch (err) {
82
- console.log(err);
83
- }
84
- };
85
83
  const handleClose = () => {
86
84
  setAnchorEl(null);
87
85
  setOpen(false);
88
86
  setPopupType("");
89
87
  };
88
+ useEffect(() => {
89
+ if (selectedElement?.enable === 1) {
90
+ setAnchorEl(null);
91
+ }
92
+ }, [selection, selectedElement?.path, selectedElement?.enable]);
90
93
  return open && !openAI ? /*#__PURE__*/_jsx(ClickAwayListener, {
91
94
  onClickAway: e => {
92
95
  // close the mini toolbar, if user clicks outside the editor (in Flozy app.)
@@ -503,6 +503,10 @@ export const CloseGreyCircle = () => /*#__PURE__*/_jsxs("svg", {
503
503
  viewBox: "0 0 30 30",
504
504
  fill: "none",
505
505
  xmlns: "http://www.w3.org/2000/svg",
506
+ style: {
507
+ border: "1.3px solid #2563EB",
508
+ borderRadius: "50%"
509
+ },
506
510
  children: [/*#__PURE__*/_jsx("rect", {
507
511
  width: "30",
508
512
  height: "30",
@@ -0,0 +1,24 @@
1
+ import { useEffect } from "react";
2
+ function useEditorScroll(editorWrapper = {
3
+ current: null
4
+ }, callback) {
5
+ useEffect(() => {
6
+ const handleScroll = () => {
7
+ if (editorWrapper.current) {
8
+ callback();
9
+ }
10
+ };
11
+ const currentEditorWrapper = editorWrapper.current;
12
+ if (currentEditorWrapper) {
13
+ currentEditorWrapper.addEventListener("scroll", handleScroll);
14
+ }
15
+
16
+ // Cleanup the event listener on component unmount
17
+ return () => {
18
+ if (currentEditorWrapper) {
19
+ currentEditorWrapper.removeEventListener("scroll", handleScroll);
20
+ }
21
+ };
22
+ }, [editorWrapper.current]);
23
+ }
24
+ export default useEditorScroll;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flozy/editor",
3
- "version": "4.2.9",
3
+ "version": "4.3.0",
4
4
  "description": "An Editor for flozy app brain",
5
5
  "files": [
6
6
  "dist"