@flozy/editor 3.9.0 → 3.9.1

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 (111) hide show
  1. package/dist/Editor/CommonEditor.js +177 -109
  2. package/dist/Editor/Editor.css +8 -12
  3. package/dist/Editor/Elements/AI/AIInput.js +17 -18
  4. package/dist/Editor/Elements/AI/CustomSelect.js +19 -12
  5. package/dist/Editor/Elements/AI/PopoverAIInput.js +23 -28
  6. package/dist/Editor/Elements/AI/Styles.js +2 -1
  7. package/dist/Editor/Elements/AI/VoiceToText/AudioWave.js +73 -0
  8. package/dist/Editor/Elements/AI/VoiceToText/index.js +177 -0
  9. package/dist/Editor/Elements/AI/VoiceToText/style.js +40 -0
  10. package/dist/Editor/Elements/Accordion/AccordionSummary.js +4 -15
  11. package/dist/Editor/Elements/AppHeader/AppHeader.js +26 -4
  12. package/dist/Editor/Elements/Button/EditorButton.js +28 -16
  13. package/dist/Editor/Elements/Color Picker/ColorButtons.js +60 -17
  14. package/dist/Editor/Elements/Color Picker/ColorPicker.css +25 -1
  15. package/dist/Editor/Elements/Color Picker/ColorPicker.js +4 -4
  16. package/dist/Editor/Elements/Color Picker/Styles.js +2 -1
  17. package/dist/Editor/Elements/Form/Workflow/FormWorkflow.js +12 -3
  18. package/dist/Editor/Elements/Form/Workflow/UserInputs.js +2 -1
  19. package/dist/Editor/Elements/Grid/Grid.js +27 -3
  20. package/dist/Editor/Elements/Grid/GridItem.js +3 -1
  21. package/dist/Editor/Elements/Link/Link.js +6 -1
  22. package/dist/Editor/Elements/Link/LinkButton.js +4 -2
  23. package/dist/Editor/Elements/Link/LinkPopup.js +10 -3
  24. package/dist/Editor/Elements/Link/LinkPopupStyles.js +28 -0
  25. package/dist/Editor/Elements/PageSettings/PageSettingsButton.js +3 -3
  26. package/dist/Editor/Elements/Redo/RedoButton.js +14 -0
  27. package/dist/Editor/Elements/Signature/SignaturePopup.js +14 -3
  28. package/dist/Editor/Elements/Table/Styles.js +23 -1
  29. package/dist/Editor/Elements/Table/Table.js +2 -1
  30. package/dist/Editor/Elements/Table/TableCell.js +69 -7
  31. package/dist/Editor/Elements/TableContextMenu/TableContextMenu.js +1 -0
  32. package/dist/Editor/Elements/Undo/UndoButton.js +14 -0
  33. package/dist/Editor/MiniEditor.js +3 -1
  34. package/dist/Editor/Styles/EditorStyles.js +1 -1
  35. package/dist/Editor/Toolbar/Basic/index.js +4 -2
  36. package/dist/Editor/Toolbar/FormatTools/Dropdown.js +26 -2
  37. package/dist/Editor/Toolbar/FormatTools/MarkButton.js +2 -2
  38. package/dist/Editor/Toolbar/FormatTools/TextSize.js +29 -18
  39. package/dist/Editor/Toolbar/Mini/MiniToolbar.js +4 -2
  40. package/dist/Editor/Toolbar/Mini/Options/Options.js +10 -0
  41. package/dist/Editor/Toolbar/Mini/Styles.js +7 -0
  42. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectFontSize.js +4 -11
  43. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectTypography.js +213 -86
  44. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/index.js +2 -1
  45. package/dist/Editor/Toolbar/PopupTool/PopupToolStyle.js +22 -16
  46. package/dist/Editor/Toolbar/PopupTool/TextFormat.js +52 -7
  47. package/dist/Editor/Toolbar/PopupTool/ThemeTextFormat.js +438 -0
  48. package/dist/Editor/Toolbar/PopupTool/index.js +7 -17
  49. package/dist/Editor/Toolbar/toolbarGroups.js +48 -6
  50. package/dist/Editor/assets/svg/AIIcons.js +153 -1
  51. package/dist/Editor/assets/svg/AddTemplateIcon.js +13 -10
  52. package/dist/Editor/assets/svg/RedoIcon.js +27 -0
  53. package/dist/Editor/assets/svg/SettingsIcon.js +28 -0
  54. package/dist/Editor/assets/svg/TextIcon.js +8 -5
  55. package/dist/Editor/assets/svg/ThemeIcons.js +291 -0
  56. package/dist/Editor/assets/svg/UndoIcon.js +27 -0
  57. package/dist/Editor/common/ColorPickerButton.js +25 -9
  58. package/dist/Editor/common/CustomColorPicker/index.js +106 -0
  59. package/dist/Editor/common/CustomColorPicker/style.js +53 -0
  60. package/dist/Editor/common/CustomDialog/index.js +94 -0
  61. package/dist/Editor/common/CustomDialog/style.js +67 -0
  62. package/dist/Editor/common/CustomSelect.js +33 -0
  63. package/dist/Editor/common/DnD/DragHandleButton.js +56 -47
  64. package/dist/Editor/common/Icon.js +43 -3
  65. package/dist/Editor/common/LinkSettings/NavComponents.js +5 -2
  66. package/dist/Editor/common/LinkSettings/index.js +4 -2
  67. package/dist/Editor/common/LinkSettings/navOptions.js +7 -2
  68. package/dist/Editor/common/LinkSettings/style.js +11 -8
  69. package/dist/Editor/common/Section/index.js +57 -7
  70. package/dist/Editor/common/Section/styles.js +11 -0
  71. package/dist/Editor/common/Shorthands/elements.js +54 -0
  72. package/dist/Editor/common/StyleBuilder/buttonStyle.js +4 -2
  73. package/dist/Editor/common/StyleBuilder/fieldTypes/bannerSpacing.js +33 -29
  74. package/dist/Editor/common/StyleBuilder/fieldTypes/borderRadius.js +31 -25
  75. package/dist/Editor/common/StyleBuilder/fieldTypes/buttonLink.js +1 -1
  76. package/dist/Editor/common/StyleBuilder/fieldTypes/color.js +31 -7
  77. package/dist/Editor/common/StyleBuilder/fieldTypes/fontSize.js +13 -4
  78. package/dist/Editor/common/StyleBuilder/fieldTypes/textOptions.js +14 -4
  79. package/dist/Editor/common/StyleBuilder/index.js +1 -1
  80. package/dist/Editor/common/iconslist.js +0 -31
  81. package/dist/Editor/helper/theme.js +189 -4
  82. package/dist/Editor/hooks/useEditorTheme.js +139 -0
  83. package/dist/Editor/hooks/useMouseMove.js +4 -1
  84. package/dist/Editor/hooks/useWindowMessage.js +10 -7
  85. package/dist/Editor/plugins/withEmbeds.js +1 -1
  86. package/dist/Editor/plugins/withHTML.js +1 -1
  87. package/dist/Editor/plugins/withTable.js +1 -1
  88. package/dist/Editor/theme/ThemeList.js +50 -173
  89. package/dist/Editor/theme/index.js +144 -0
  90. package/dist/Editor/themeSettings/ActiveTheme.js +72 -0
  91. package/dist/Editor/themeSettings/buttons/index.js +290 -0
  92. package/dist/Editor/themeSettings/buttons/style.js +21 -0
  93. package/dist/Editor/themeSettings/colorTheme/index.js +290 -0
  94. package/dist/Editor/themeSettings/colorTheme/style.js +77 -0
  95. package/dist/Editor/themeSettings/fonts/PreviewElement.js +123 -0
  96. package/dist/Editor/themeSettings/fonts/index.js +213 -0
  97. package/dist/Editor/themeSettings/fonts/style.js +44 -0
  98. package/dist/Editor/themeSettings/icons.js +60 -0
  99. package/dist/Editor/themeSettings/index.js +320 -0
  100. package/dist/Editor/themeSettings/style.js +152 -0
  101. package/dist/Editor/themeSettingsAI/icons.js +96 -0
  102. package/dist/Editor/themeSettingsAI/index.js +356 -0
  103. package/dist/Editor/themeSettingsAI/saveTheme.js +190 -0
  104. package/dist/Editor/themeSettingsAI/style.js +247 -0
  105. package/dist/Editor/utils/SlateUtilityFunctions.js +161 -25
  106. package/dist/Editor/utils/button.js +1 -17
  107. package/dist/Editor/utils/events.js +54 -2
  108. package/dist/Editor/utils/font.js +40 -37
  109. package/dist/Editor/utils/helper.js +31 -2
  110. package/dist/Editor/utils/table.js +51 -43
  111. package/package.json +4 -3
@@ -1,5 +1,5 @@
1
1
  /* eslint-disable no-unused-vars */
2
- import React, { useRef, useCallback, useEffect, useMemo, useState, forwardRef, useImperativeHandle } from "react";
2
+ import React, { useRef, useCallback, useEffect, useMemo, useState, forwardRef, useImperativeHandle, createContext } from "react";
3
3
  import { createEditor, Transforms } from "slate";
4
4
  import { Slate, Editable, ReactEditor } from "slate-react";
5
5
  import { useDebounce, useDebouncedCallback } from "use-debounce";
@@ -18,7 +18,7 @@ import { getThumbnailImage, invertColor } from "./helper";
18
18
  import PopupTool from "./Toolbar/PopupTool";
19
19
  import "./font.css";
20
20
  import "./Editor.css";
21
- import { Box, Button, Typography } from "@mui/material";
21
+ import { Box, IconButton, Typography } from "@mui/material";
22
22
  import Shorthands from "./common/Shorthands";
23
23
  import MiniToolbar from "./Toolbar/Mini/MiniToolbar";
24
24
  import { EditorProvider } from "./hooks/useMouseMove";
@@ -28,12 +28,19 @@ import DragAndDrop from "./common/DnD";
28
28
  import Section from "./common/Section";
29
29
  import "animate.css";
30
30
  import decorators from "./utils/Decorators";
31
- import { getTRBLBreakPoints } from "./helper/theme";
31
+ import { getTRBLBreakPoints, getVariableValue } from "./helper/theme";
32
32
  import { handleInsertLastElement, onDeleteKey, outsideEditorClickLabel } from "./utils/helper";
33
33
  import useWindowResize from "./hooks/useWindowResize";
34
+ import { getTheme } from "./theme";
35
+ import { useTheme } from "@emotion/react";
36
+ import ThemeSettings from "./themeSettings";
37
+ import ThemeSettingsAI from "./themeSettingsAI";
38
+ import { Experimental_CssVarsProvider as CssVarsProvider, experimental_extendTheme as extendTheme } from "@mui/material/styles";
34
39
  import PopoverAIInput from "./Elements/AI/PopoverAIInput";
40
+ import { ThemeAIIcon, ThemePaintIcon } from "./assets/svg/ThemeIcons";
35
41
  import { jsx as _jsx } from "react/jsx-runtime";
36
42
  import { jsxs as _jsxs } from "react/jsx-runtime";
43
+ export const ThemeContext = /*#__PURE__*/createContext(null);
37
44
  const Item = /*#__PURE__*/forwardRef(({
38
45
  children,
39
46
  ...props
@@ -60,7 +67,8 @@ const Leaf = ({
60
67
  children,
61
68
  leaf
62
69
  }) => {
63
- children = getMarked(leaf, children);
70
+ const theme = useTheme();
71
+ children = getMarked(leaf, children, theme);
64
72
  return /*#__PURE__*/_jsx("span", {
65
73
  ...attributes,
66
74
  children: children
@@ -79,7 +87,8 @@ const CommonEditor = /*#__PURE__*/forwardRef((props, ref) => {
79
87
  toolbarOptions,
80
88
  otherProps,
81
89
  isIframe,
82
- theme
90
+ theme,
91
+ showThemeButtons
83
92
  } = props;
84
93
  const editorWrapper = useRef();
85
94
  const mentionsRef = useRef();
@@ -123,10 +132,11 @@ const CommonEditor = /*#__PURE__*/forwardRef((props, ref) => {
123
132
  const {
124
133
  bannerSpacing,
125
134
  pageBgImage,
126
- pageColor,
135
+ pageColor = "",
127
136
  color: pageTextColor,
128
137
  pageWidth,
129
- maxWidth: pageMaxWidth
138
+ maxWidth: pageMaxWidth,
139
+ theme: selectedTheme
130
140
  } = pageSt?.pageProps || {
131
141
  bannerSpacing: {
132
142
  left: 0,
@@ -137,9 +147,11 @@ const CommonEditor = /*#__PURE__*/forwardRef((props, ref) => {
137
147
  };
138
148
  const classes = editorStyles({
139
149
  padHeight: !fullScreen ? otherProps?.padHeight : 20,
140
- placeHolderColor: invertColor(pageColor || "#FFF"),
150
+ placeHolderColor: invertColor(pageColor.startsWith("var") ? getVariableValue(pageColor) : pageColor || "#FFF"),
141
151
  theme
142
152
  });
153
+ const [openTheme, setOpenTheme] = useState(false);
154
+ const [openAITheme, setOpenAITheme] = useState(false);
143
155
  useEffect(() => {
144
156
  setValue(draftToSlate({
145
157
  data: content
@@ -239,6 +251,12 @@ const CommonEditor = /*#__PURE__*/forwardRef((props, ref) => {
239
251
  redo() {
240
252
  editor?.redo();
241
253
  },
254
+ toggleTheme() {
255
+ setOpenTheme(!openTheme);
256
+ },
257
+ toggleAITheme() {
258
+ setOpenAITheme(!openAITheme);
259
+ },
242
260
  getPageSettings: {
243
261
  background: pageBgImage && pageBgImage !== "none" ? `url(${pageBgImage})` : pageColor || ""
244
262
  }
@@ -386,113 +404,163 @@ const CommonEditor = /*#__PURE__*/forwardRef((props, ref) => {
386
404
  }
387
405
  return style;
388
406
  }, [pageBgImage, pageColor]);
389
- return /*#__PURE__*/_jsx(EditorProvider, {
390
- theme: theme,
391
- editor: editor,
392
- children: /*#__PURE__*/_jsx(DialogWrapper, {
393
- classes: classes,
394
- ...props,
395
- fullScreen: fullScreen,
396
- footer: footer || "",
397
- children: /*#__PURE__*/_jsx(Box, {
398
- component: "div",
399
- className: `${editorClass || ""} ${isIframe ? "iframe-editor" : ""}`,
400
- sx: classes.root,
401
- style: {
402
- ...dotBg
403
- },
404
- children: /*#__PURE__*/_jsxs(Slate, {
405
- editor: editor,
406
- initialValue: value,
407
- onChange: handleEditorChange,
408
- children: [/*#__PURE__*/_jsx(DragAndDrop, {
409
- children: /*#__PURE__*/_jsxs(Overlay, {
410
- children: [/*#__PURE__*/_jsx(Box, {
411
- className: `${hasTopBanner() ? "has-topbanner" : ""} ${!pageColor ? "no-color" : ""} ${isScrolling ? "" : "hideScroll"} scrollable-content scrollSmooth`,
412
- sx: classes.slateWrapper,
413
- id: "slate-wrapper-scroll-container"
414
- // style={editorWrapperStyle}
415
- ,
416
- ref: editorWrapper,
417
- onClick: e => {
418
- handleInsertLastElement(e, editor);
419
- },
420
- onScroll: handleScroll,
421
- style: editorWrapperStyle,
422
- children: /*#__PURE__*/_jsxs(Box, {
423
- component: "div",
424
- className: "max-content",
425
- "data-info": outsideEditorClickLabel,
426
- children: [renderTopBanner(), /*#__PURE__*/_jsx("div", {
427
- className: "scroll-area",
428
- "data-info": outsideEditorClickLabel,
407
+ const themeProps = getTheme(selectedTheme);
408
+ const handleCursorScroll = container => {
409
+ const cursorPosition = window.getSelection()?.getRangeAt(0).getBoundingClientRect();
410
+ const containerBottom = container.getBoundingClientRect().bottom;
411
+ if (cursorPosition?.bottom > containerBottom - 250) {
412
+ container.scrollBy({
413
+ top: 200,
414
+ behavior: 'smooth'
415
+ });
416
+ }
417
+ };
418
+ return /*#__PURE__*/_jsx(ThemeContext.Provider, {
419
+ value: {
420
+ openTheme,
421
+ setOpenTheme
422
+ },
423
+ children: /*#__PURE__*/_jsx(CssVarsProvider, {
424
+ theme: extendTheme(selectedTheme?.theme?.cssVars || {}),
425
+ children: /*#__PURE__*/_jsxs(EditorProvider, {
426
+ theme: theme,
427
+ editor: editor,
428
+ children: [showThemeButtons ? /*#__PURE__*/_jsxs("div", {
429
+ style: {
430
+ display: "flex",
431
+ justifyContent: "end",
432
+ alignItems: "center",
433
+ gap: "8px",
434
+ width: "70vw",
435
+ margin: "auto"
436
+ },
437
+ children: [/*#__PURE__*/_jsx(IconButton, {
438
+ onClick: () => setOpenTheme(true),
439
+ children: /*#__PURE__*/_jsx(ThemePaintIcon, {})
440
+ }), /*#__PURE__*/_jsx(IconButton, {
441
+ onClick: () => setOpenAITheme(true),
442
+ style: {
443
+ marginTop: "4px"
444
+ },
445
+ children: /*#__PURE__*/_jsx(ThemeAIIcon, {})
446
+ })]
447
+ }) : null, /*#__PURE__*/_jsx(DialogWrapper, {
448
+ classes: classes,
449
+ ...props,
450
+ fullScreen: fullScreen,
451
+ footer: footer || "",
452
+ children: /*#__PURE__*/_jsx(Box, {
453
+ component: "div",
454
+ className: `${editorClass || ""} ${isIframe ? "iframe-editor" : ""}`,
455
+ sx: classes.root,
456
+ style: {
457
+ ...dotBg
458
+ },
459
+ children: /*#__PURE__*/_jsxs(Slate, {
460
+ editor: editor,
461
+ initialValue: value,
462
+ onChange: handleEditorChange,
463
+ children: [/*#__PURE__*/_jsx(DragAndDrop, {
464
+ children: /*#__PURE__*/_jsxs(Overlay, {
465
+ children: [/*#__PURE__*/_jsx(Box, {
466
+ className: `${hasTopBanner() ? "has-topbanner" : ""} ${!pageColor ? "no-color" : ""} ${isScrolling ? "" : "hideScroll"} scrollable-content scrollSmooth`,
467
+ sx: classes.slateWrapper,
468
+ id: "slate-wrapper-scroll-container"
469
+ // style={editorWrapperStyle}
470
+ ,
471
+ ref: editorWrapper,
472
+ onClick: e => {
473
+ handleInsertLastElement(e, editor);
474
+ },
475
+ onScroll: handleScroll,
476
+ style: editorWrapperStyle,
429
477
  children: /*#__PURE__*/_jsxs(Box, {
430
478
  component: "div",
431
- className: `editor-wrapper ${pageWidth === "fixed" ? "fixed" : "full"}`,
432
- sx: {
433
- backgroundColor: "transparent",
434
- padding: {
435
- ...getTRBLBreakPoints(bannerSpacing)
436
- },
437
- width: !pageWidth || pageWidth === "fixed" ? fixedWidth : fullWidth,
438
- height: viewport.h ? `${viewport.h}px` : `100%`,
439
- alignSelf: "center",
440
- transformOrigin: "left top",
441
- transition: "all 0.3s",
442
- minHeight: "87%",
443
- maxWidth: pageMaxWidth ? `${parseInt(pageMaxWidth)}px !important` : "auto"
444
- },
479
+ className: "max-content",
480
+ sx: themeProps?.sxProps || {},
445
481
  "data-info": outsideEditorClickLabel,
446
- children: [/*#__PURE__*/_jsx(Editable, {
447
- className: "innert-editor-textbox",
448
- readOnly: isReadOnly,
449
- renderElement: renderElement,
450
- renderLeaf: renderLeaf,
451
- decorate: decorators,
452
- onKeyDown: onKeyDown
453
- }), !readOnly ? /*#__PURE__*/_jsx(MentionsPopup, {
454
- ref: mentionsRef,
455
- mentions: mentions,
456
- setMentions: setMentions,
457
- editor: editor,
458
- target: target,
459
- index: index,
460
- chars: chars,
461
- type: type,
482
+ children: [renderTopBanner(), /*#__PURE__*/_jsx("div", {
483
+ className: "scroll-area",
484
+ "data-info": outsideEditorClickLabel,
485
+ children: /*#__PURE__*/_jsxs(Box, {
486
+ component: "div",
487
+ className: `editor-wrapper ${pageWidth === "fixed" ? "fixed" : "full"}`,
488
+ sx: {
489
+ backgroundColor: "transparent",
490
+ padding: {
491
+ ...getTRBLBreakPoints(bannerSpacing)
492
+ },
493
+ width: !pageWidth || pageWidth === "fixed" ? fixedWidth : fullWidth,
494
+ height: viewport.h ? `${viewport.h}px` : `100%`,
495
+ alignSelf: "center",
496
+ transformOrigin: "left top",
497
+ transition: "all 0.3s",
498
+ minHeight: "87%",
499
+ maxWidth: pageMaxWidth ? `${parseInt(pageMaxWidth)}px !important` : "auto"
500
+ },
501
+ "data-info": outsideEditorClickLabel,
502
+ children: [/*#__PURE__*/_jsx(Editable, {
503
+ className: "innert-editor-textbox",
504
+ readOnly: isReadOnly,
505
+ renderElement: renderElement,
506
+ renderLeaf: renderLeaf,
507
+ decorate: decorators,
508
+ onKeyDown: onKeyDown,
509
+ onSelect: () => handleCursorScroll(editorWrapper.current)
510
+ }), !readOnly ? /*#__PURE__*/_jsx(MentionsPopup, {
511
+ ref: mentionsRef,
512
+ mentions: mentions,
513
+ setMentions: setMentions,
514
+ editor: editor,
515
+ target: target,
516
+ index: index,
517
+ chars: chars,
518
+ type: type,
519
+ theme: theme
520
+ }) : null]
521
+ })
522
+ }), !hideMiniToolBar ? /*#__PURE__*/_jsx(MiniToolbar, {
523
+ customProps: customProps,
524
+ toolbarOptions: toolbarOptions,
462
525
  theme: theme
463
- }) : null]
526
+ }) : null, /*#__PURE__*/_jsx(PopoverAIInput, {
527
+ otherProps: otherProps || {}
528
+ }), footer && (fullScreen || readOnly) && /*#__PURE__*/_jsx(Typography, {
529
+ sx: {
530
+ color: "rgb(100, 116, 139)",
531
+ fontSize: "13px",
532
+ paddingBottom: hideMiniToolBar ? "0px" : "12px",
533
+ cursor: "pointer"
534
+ },
535
+ align: "center",
536
+ "data-info": outsideEditorClickLabel,
537
+ onClick: handleFooterClick,
538
+ children: footer
539
+ }), openTheme ? /*#__PURE__*/_jsx(ThemeSettings, {
540
+ open: openTheme,
541
+ setOpen: setOpenTheme,
542
+ editor: editor,
543
+ services: otherProps?.services
544
+ }) : null, /*#__PURE__*/_jsx(ThemeSettingsAI, {
545
+ openAITheme: openAITheme,
546
+ setOpenAITheme: setOpenAITheme,
547
+ onSaveTheme: otherProps?.onSaveTheme
548
+ })]
464
549
  })
465
- }), !hideMiniToolBar ? /*#__PURE__*/_jsx(MiniToolbar, {
466
- customProps: customProps,
467
- toolbarOptions: toolbarOptions,
468
- theme: theme
469
- }) : null, /*#__PURE__*/_jsx(PopoverAIInput, {
470
- otherProps: otherProps || {}
471
- }), footer && (fullScreen || readOnly) && /*#__PURE__*/_jsx(Typography, {
472
- sx: {
473
- color: "rgb(100, 116, 139)",
474
- fontSize: "13px",
475
- paddingBottom: hideMiniToolBar ? "0px" : "12px",
476
- cursor: "pointer"
477
- },
478
- align: "center",
479
- "data-info": outsideEditorClickLabel,
480
- onClick: handleFooterClick,
481
- children: footer
482
- })]
550
+ }), !readOnly ? /*#__PURE__*/_jsx(PopupTool, {
551
+ onDrawerOpen: onDrawerOpen,
552
+ theme: theme,
553
+ setIsTextSelected: setIsTextSelected,
554
+ customProps: customProps
555
+ }) : null]
483
556
  })
484
- }), !readOnly ? /*#__PURE__*/_jsx(PopupTool, {
485
- onDrawerOpen: onDrawerOpen,
486
- theme: theme,
487
- setIsTextSelected: setIsTextSelected,
488
- customProps: customProps
489
- }) : null]
490
- })
491
- }), htmlAction.showInput && /*#__PURE__*/_jsx(CodeToText, {
492
- ...htmlAction,
493
- handleCodeToText: handleCodeToText
494
- })]
495
- }, id)
557
+ }), htmlAction.showInput && /*#__PURE__*/_jsx(CodeToText, {
558
+ ...htmlAction,
559
+ handleCodeToText: handleCodeToText
560
+ })]
561
+ }, id)
562
+ })
563
+ })]
496
564
  })
497
565
  })
498
566
  });
@@ -245,6 +245,13 @@ blockquote {
245
245
  width: 17px !important;
246
246
  }
247
247
 
248
+ .react-datepicker__input-container input {
249
+ height: 40px !important;
250
+ border: 1px solid #ccc;
251
+ border-radius: 5px;
252
+ width: 100%;
253
+ }
254
+
248
255
  .close-popupbtn {
249
256
  border-radius: 4px !important;
250
257
  width: 24px;
@@ -830,17 +837,6 @@ blockquote {
830
837
  text-align: center;
831
838
  }
832
839
 
833
- .removeScroll::-webkit-outer-spin-button,
834
- .removeScroll::-webkit-inner-spin-button {
835
- -webkit-appearance: none;
836
- margin: 0;
837
- }
838
-
839
- /* For Firefox */
840
- .removeScroll {
841
- -moz-appearance: textfield;
842
- }
843
-
844
840
  .borderInput:focus-visible {
845
841
  outline: none !important;
846
842
  }
@@ -890,7 +886,7 @@ blockquote {
890
886
  }
891
887
 
892
888
  .sliderInput {
893
- width: 30px;
889
+ width: 66px;
894
890
  padding: 2px 10px;
895
891
  margin-left: 18px;
896
892
  box-shadow: 0px 4px 16px 0px #0000000d;
@@ -6,11 +6,11 @@ import Icon from "../../common/Icon";
6
6
  import { IoSend } from "react-icons/io5";
7
7
  import React, { forwardRef, useEffect, useRef } from "react";
8
8
  import WaveLoading from "../../common/WaveLoading";
9
- import useWindowResize from "../../hooks/useWindowResize";
10
9
  import CustomSelect from "./CustomSelect";
11
10
  import { editContentOptions, newContentOptions, generatedContentOptions } from "./helper";
12
11
  import useClickOutside from "../../hooks/useClickOutside";
13
12
  import { useEditorContext } from "../../hooks/useMouseMove";
13
+ import { ChatMicIcon } from "../../assets/svg/AIIcons";
14
14
  import { jsx as _jsx } from "react/jsx-runtime";
15
15
  import { jsxs as _jsxs } from "react/jsx-runtime";
16
16
  import { Fragment as _Fragment } from "react/jsx-runtime";
@@ -36,19 +36,19 @@ function getProps(openAI, generatedText) {
36
36
  }
37
37
  function AIInput({
38
38
  onSend,
39
- loading,
40
39
  generatedText,
41
40
  openAI,
42
41
  inputValue,
43
42
  onInputChange,
44
- onClickOutside
43
+ onClickOutside,
44
+ startRecording,
45
+ ...rest
45
46
  }, ref) {
46
47
  const {
47
48
  theme
48
49
  } = useEditorContext();
49
50
  const classes = Styles(theme);
50
51
  const inputRef = useRef();
51
- const [size] = useWindowResize();
52
52
  const inputWrapperRef = useRef();
53
53
  const refs = useClickOutside({
54
54
  onClickOutside,
@@ -67,6 +67,7 @@ function AIInput({
67
67
  clearTimeout(timeoutId);
68
68
  };
69
69
  }, [openAI]);
70
+ const loading = rest?.loading || rest?.isAILoading;
70
71
  const isSendBtnDisabled = !inputValue || loading;
71
72
  const props = getProps(openAI, generatedText) || {};
72
73
  const fromToolBar = openAI === "fromToolBar";
@@ -80,16 +81,7 @@ function AIInput({
80
81
  });
81
82
  };
82
83
  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, {
84
+ children: [/*#__PURE__*/_jsxs(Box, {
93
85
  component: "div",
94
86
  sx: classes.aiContainer,
95
87
  children: [generatedText ? /*#__PURE__*/_jsx(Typography, {
@@ -132,21 +124,28 @@ function AIInput({
132
124
  handleSendBtnClick();
133
125
  }
134
126
  }
135
- }), fromToolBar ? null : /*#__PURE__*/_jsx(Box, {
127
+ }), fromToolBar ? null : /*#__PURE__*/_jsxs(Box, {
136
128
  component: "div",
137
129
  style: classes.sendIconContainer,
138
130
  className: "icons-elements",
139
- children: /*#__PURE__*/_jsx(IconButton, {
131
+ children: [/*#__PURE__*/_jsx(IconButton
132
+ // sx={
133
+ // isSendBtnDisabled ? classes.sendBtnDisabled : classes.sendBtn
134
+ // }
135
+ , {
136
+ onClick: () => startRecording(),
137
+ children: /*#__PURE__*/_jsx(ChatMicIcon, {})
138
+ }), /*#__PURE__*/_jsx(IconButton, {
140
139
  sx: isSendBtnDisabled ? classes.sendBtnDisabled : classes.sendBtn,
141
140
  onClick: () => handleSendBtnClick(),
142
141
  children: /*#__PURE__*/_jsx(IoSend, {
143
142
  color: "#fff",
144
143
  size: 14
145
144
  })
146
- })
145
+ })]
147
146
  })]
148
147
  })]
149
- }), size.device === "xs" ? null : /*#__PURE__*/_jsx(Box, {
148
+ }), /*#__PURE__*/_jsx(Box, {
150
149
  component: "div",
151
150
  ref: refs[1],
152
151
  sx: classes.customSelectWrapper,
@@ -1,4 +1,4 @@
1
- import { Box, Button, IconButton, Popover, Typography } from "@mui/material";
1
+ import { Box, Button, IconButton, Popper, Typography } from "@mui/material";
2
2
  import React, { useRef, useState } from "react";
3
3
  import { FaChevronRight } from "react-icons/fa";
4
4
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -49,9 +49,17 @@ function DisplayOption({
49
49
  } = option;
50
50
  const [open, setOpen] = useState(false);
51
51
  const optionRef = useRef();
52
+ const openOptions = e => {
53
+ if (option.options?.length && !open) {
54
+ setOpen(e.currentTarget);
55
+ return;
56
+ }
57
+ };
52
58
  return /*#__PURE__*/_jsxs(Box, {
53
59
  sx: classes.optionWrapper,
54
60
  ref: optionRef,
61
+ onMouseEnter: openOptions,
62
+ onMouseLeave: () => setOpen(null),
55
63
  children: [/*#__PURE__*/_jsxs(Button, {
56
64
  sx: classes.optionBtn,
57
65
  onClick: e => {
@@ -59,7 +67,7 @@ function DisplayOption({
59
67
 
60
68
  // is having child options
61
69
  if (option.options?.length) {
62
- setOpen(e.currentTarget);
70
+ openOptions(e);
63
71
  return;
64
72
  }
65
73
  setOpen(null);
@@ -77,25 +85,24 @@ function DisplayOption({
77
85
  size: 12
78
86
  })
79
87
  })]
80
- }), /*#__PURE__*/_jsx(Popover, {
88
+ }), /*#__PURE__*/_jsx(Popper, {
81
89
  open: open && option.options,
82
90
  anchorEl: open,
83
91
  sx: {
84
92
  zIndex: 9001,
85
93
  background: "transparent"
86
94
  },
87
- anchorOrigin: {
88
- vertical: "top",
89
- horizontal: "right"
90
- },
91
95
  onClose: () => {
92
96
  setOpen(null);
93
97
  },
94
- children: /*#__PURE__*/_jsx(CustomSelect, {
95
- options: option.options,
96
- onSend: onSend,
97
- classes: classes,
98
- show: open
98
+ placement: "right-start",
99
+ children: /*#__PURE__*/_jsx(Box, {
100
+ children: /*#__PURE__*/_jsx(CustomSelect, {
101
+ options: option.options,
102
+ onSend: onSend,
103
+ classes: classes,
104
+ show: open
105
+ })
99
106
  })
100
107
  })]
101
108
  });
@@ -1,13 +1,13 @@
1
1
  import { useEffect, useRef, useState } from "react";
2
2
  import { useEditorContext } from "../../hooks/useMouseMove";
3
3
  import Styles from "./Styles";
4
- import { Box, Fade, Paper, Popper } from "@mui/material";
4
+ import { Fade, Paper, Popper } from "@mui/material";
5
5
  import AIInput from "./AIInput";
6
6
  import { ReactEditor, useSlate } from "slate-react";
7
7
  import { Editor, Node, Path, Transforms } from "slate";
8
- import useWindowResize from "../../hooks/useWindowResize";
9
8
  import { MODES } from "./helper";
10
9
  import { getSelectedText } from "../../utils/helper";
10
+ import { VoiceToText } from "./VoiceToText";
11
11
  import { jsx as _jsx } from "react/jsx-runtime";
12
12
  import { jsxs as _jsxs } from "react/jsx-runtime";
13
13
  const scrollToAIInput = () => {
@@ -101,7 +101,8 @@ const updateAnchorEl = (setAnchorEl, editor) => {
101
101
  // selected text as caret
102
102
  caret = selection.getRangeAt(0);
103
103
  } else {
104
- caret = ReactEditor.toDOMRange(editor, getNextLine(editor).at);
104
+ const domElement = ReactEditor.toDOMRange(editor, getNextLine(editor).at);
105
+ caret = domElement?.commonAncestorContainer?.parentElement;
105
106
  }
106
107
  const getBoundingClientRect = () => {
107
108
  const editorContainer = document.querySelector("#slate-wrapper-scroll-container")?.getBoundingClientRect();
@@ -147,7 +148,6 @@ function PopoverAIInput({
147
148
  const targetRef = useRef();
148
149
  const classes = Styles();
149
150
  const editor = useSlate();
150
- const [size] = useWindowResize();
151
151
  const onClickOutside = () => {
152
152
  setAnchorEl(null);
153
153
  setOpenAI("");
@@ -178,6 +178,11 @@ function PopoverAIInput({
178
178
  onClickOutside();
179
179
  return;
180
180
  }
181
+ if (type === "speech_to_text") {
182
+ Transforms.insertText(editor, option.text);
183
+ onClickOutside();
184
+ return;
185
+ }
181
186
  if (type === "try_again") {
182
187
  // resetting the previous option and try again
183
188
  option = selectedOption;
@@ -188,7 +193,7 @@ function PopoverAIInput({
188
193
  setLoading(true);
189
194
  const payload = {
190
195
  mode: option.mode || 0,
191
- query: inputValue
196
+ query: option?.inputValue || inputValue
192
197
  };
193
198
  if (option.mode === MODES.translate || option.mode === MODES.rephraseTone) {
194
199
  payload.textOptionInput = type;
@@ -263,21 +268,7 @@ function PopoverAIInput({
263
268
  setInputValue(e.target.value);
264
269
  };
265
270
  return /*#__PURE__*/_jsxs("div", {
266
- children: [size.device === "xs" && openAI ? /*#__PURE__*/_jsx(Box, {
267
- component: "div",
268
- sx: classes.mobileAIInputWrapper,
269
- ref: targetRef,
270
- children: /*#__PURE__*/_jsx(AIInput, {
271
- loading: loading,
272
- onSend: onSend,
273
- generatedText: generatedText,
274
- anchorEl: anchorEl,
275
- openAI: openAI,
276
- inputValue: inputValue,
277
- onInputChange: onInputChange,
278
- onClickOutside: onClickOutside
279
- })
280
- }) : /*#__PURE__*/_jsx(Popper, {
271
+ children: [/*#__PURE__*/_jsx(Popper, {
281
272
  open: Boolean(openAI),
282
273
  anchorEl: anchorEl,
283
274
  transition: true,
@@ -296,15 +287,19 @@ function PopoverAIInput({
296
287
  sx: getSelectedText(editor) ? {
297
288
  marginTop: "6px"
298
289
  } : {},
299
- children: /*#__PURE__*/_jsx(AIInput, {
300
- loading: loading,
290
+ children: /*#__PURE__*/_jsx(VoiceToText, {
291
+ otherProps: otherProps,
301
292
  onSend: onSend,
302
- generatedText: generatedText,
303
- anchorEl: anchorEl,
304
- openAI: openAI,
305
- inputValue: inputValue,
306
- onInputChange: onInputChange,
307
- onClickOutside: onClickOutside
293
+ children: /*#__PURE__*/_jsx(AIInput, {
294
+ loading: loading,
295
+ onSend: onSend,
296
+ generatedText: generatedText,
297
+ anchorEl: anchorEl,
298
+ openAI: openAI,
299
+ inputValue: inputValue,
300
+ onInputChange: onInputChange,
301
+ onClickOutside: onClickOutside
302
+ })
308
303
  })
309
304
  })
310
305
  })