@copilotkit/react-textarea 1.8.14-next.0 → 1.8.14-next.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 (67) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/{chunk-MGYT7RNL.mjs → chunk-4ECCCOFV.mjs} +2 -2
  3. package/dist/{chunk-4XXU5BSA.mjs → chunk-B7WYSFPJ.mjs} +18 -23
  4. package/dist/chunk-B7WYSFPJ.mjs.map +1 -0
  5. package/dist/{chunk-4CVSOOJY.mjs → chunk-F6RLSVG3.mjs} +5 -5
  6. package/dist/chunk-F6RLSVG3.mjs.map +1 -0
  7. package/dist/{chunk-PZYM7K4Y.mjs → chunk-FQHMDD6N.mjs} +15 -11
  8. package/dist/chunk-FQHMDD6N.mjs.map +1 -0
  9. package/dist/{chunk-BNBGJBBM.mjs → chunk-KNH7OQAM.mjs} +5 -5
  10. package/dist/{chunk-2VMZ5ZWT.mjs → chunk-YHMWPA3C.mjs} +1 -4
  11. package/dist/chunk-YHMWPA3C.mjs.map +1 -0
  12. package/dist/{chunk-ABYCGF77.mjs → chunk-YNYXWS2H.mjs} +2 -2
  13. package/dist/chunk-YNYXWS2H.mjs.map +1 -0
  14. package/dist/components/base-copilot-textarea/base-copilot-textarea.js +219 -223
  15. package/dist/components/base-copilot-textarea/base-copilot-textarea.js.map +1 -1
  16. package/dist/components/base-copilot-textarea/base-copilot-textarea.mjs +8 -8
  17. package/dist/components/copilot-textarea/copilot-textarea.js +221 -225
  18. package/dist/components/copilot-textarea/copilot-textarea.js.map +1 -1
  19. package/dist/components/copilot-textarea/copilot-textarea.mjs +15 -15
  20. package/dist/components/hovering-toolbar/hovering-toolbar.js +281 -289
  21. package/dist/components/hovering-toolbar/hovering-toolbar.js.map +1 -1
  22. package/dist/components/hovering-toolbar/hovering-toolbar.mjs +4 -4
  23. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.js +0 -3
  24. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.js.map +1 -1
  25. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.mjs +1 -1
  26. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.d.ts +0 -1
  27. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.js +0 -3
  28. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.js.map +1 -1
  29. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.mjs +2 -2
  30. package/dist/components/hovering-toolbar/text-insertion-prompt-box/index.js +0 -3
  31. package/dist/components/hovering-toolbar/text-insertion-prompt-box/index.js.map +1 -1
  32. package/dist/components/hovering-toolbar/text-insertion-prompt-box/index.mjs +2 -2
  33. package/dist/components/index.js +223 -227
  34. package/dist/components/index.js.map +1 -1
  35. package/dist/components/index.mjs +15 -15
  36. package/dist/index.js +223 -227
  37. package/dist/index.js.map +1 -1
  38. package/dist/index.mjs +22 -22
  39. package/dist/types/autosuggestions-config/autosuggestions-config.js +4 -4
  40. package/dist/types/autosuggestions-config/autosuggestions-config.js.map +1 -1
  41. package/dist/types/autosuggestions-config/autosuggestions-config.mjs +2 -2
  42. package/dist/types/autosuggestions-config/index.js +4 -4
  43. package/dist/types/autosuggestions-config/index.js.map +1 -1
  44. package/dist/types/autosuggestions-config/index.mjs +2 -2
  45. package/dist/types/base/base-autosuggestions-config.d.ts +4 -0
  46. package/dist/types/base/base-autosuggestions-config.js +4 -4
  47. package/dist/types/base/base-autosuggestions-config.js.map +1 -1
  48. package/dist/types/base/base-autosuggestions-config.mjs +1 -1
  49. package/dist/types/base/index.js +4 -4
  50. package/dist/types/base/index.js.map +1 -1
  51. package/dist/types/base/index.mjs +1 -1
  52. package/dist/types/index.js +4 -4
  53. package/dist/types/index.js.map +1 -1
  54. package/dist/types/index.mjs +3 -3
  55. package/package.json +4 -4
  56. package/src/components/base-copilot-textarea/base-copilot-textarea.tsx +7 -1
  57. package/src/components/hovering-toolbar/hovering-toolbar.tsx +43 -40
  58. package/src/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.tsx +0 -3
  59. package/src/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.tsx +0 -1
  60. package/src/types/base/base-autosuggestions-config.tsx +9 -4
  61. package/dist/chunk-2VMZ5ZWT.mjs.map +0 -1
  62. package/dist/chunk-4CVSOOJY.mjs.map +0 -1
  63. package/dist/chunk-4XXU5BSA.mjs.map +0 -1
  64. package/dist/chunk-ABYCGF77.mjs.map +0 -1
  65. package/dist/chunk-PZYM7K4Y.mjs.map +0 -1
  66. /package/dist/{chunk-MGYT7RNL.mjs.map → chunk-4ECCCOFV.mjs.map} +0 -0
  67. /package/dist/{chunk-BNBGJBBM.mjs.map → chunk-KNH7OQAM.mjs.map} +0 -0
@@ -629,11 +629,10 @@ function clearAutocompletionsFromEditor(editor) {
629
629
 
630
630
  // src/types/base/base-autosuggestions-config.tsx
631
631
  var import_react_core = require("@copilotkit/react-core");
632
+ var import_shared = require("@copilotkit/shared");
632
633
  var defaultShouldToggleHoveringEditorOnKeyPress = (event, shortcut) => {
633
- if (event.key === shortcut && event.metaKey) {
634
- return true;
635
- }
636
- return false;
634
+ const isMetaKey = (0, import_shared.isMacOS)() ? event.metaKey : event.ctrlKey;
635
+ return event.key === shortcut && isMetaKey;
637
636
  };
638
637
  var defaultShouldAcceptAutosuggestionOnKeyPress = (event) => {
639
638
  if (event.key === "Tab") {
@@ -648,6 +647,7 @@ var defaultBaseAutosuggestionsConfig = {
648
647
  disableWhenEmpty: true,
649
648
  disabled: false,
650
649
  temporarilyDisableWhenMovingCursorWithoutChangingText: true,
650
+ temporarilyDisableNotTrustedEvents: true,
651
651
  shouldToggleHoveringEditorOnKeyPress: defaultShouldToggleHoveringEditorOnKeyPress,
652
652
  shouldAcceptAutosuggestionOnKeyPress: defaultShouldAcceptAutosuggestionOnKeyPress,
653
653
  shouldAcceptAutosuggestionOnTouch: defaultShouldAcceptAutosuggestionOnTouch
@@ -658,10 +658,123 @@ var import_react9 = require("react");
658
658
  var import_slate7 = require("slate");
659
659
  var import_slate_react3 = require("slate-react");
660
660
 
661
- // src/hooks/misc/use-autosize-textarea.tsx
661
+ // src/components/hovering-toolbar/hovering-editor-provider.tsx
662
662
  var import_react4 = require("react");
663
+ var import_jsx_runtime = require("react/jsx-runtime");
664
+ var HoveringEditorContext = (0, import_react4.createContext)({
665
+ isDisplayed: false,
666
+ setIsDisplayed: () => {
667
+ }
668
+ });
669
+ var HoveringEditorProvider = ({ children }) => {
670
+ const [isDisplayed, setIsDisplayed] = (0, import_react4.useState)(false);
671
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(HoveringEditorContext.Provider, { value: { isDisplayed, setIsDisplayed }, children });
672
+ };
673
+ var useHoveringEditorContext = () => (0, import_react4.useContext)(HoveringEditorContext);
674
+
675
+ // src/components/hovering-toolbar/hovering-toolbar-components.tsx
676
+ var import_css = require("@emotion/css");
677
+ var import_react5 = __toESM(require("react"));
678
+ var import_react_dom = __toESM(require("react-dom"));
679
+ var import_jsx_runtime2 = require("react/jsx-runtime");
680
+ var Button = import_react5.default.forwardRef(
681
+ (_a, ref) => {
682
+ var _b = _a, {
683
+ className,
684
+ active,
685
+ reversed
686
+ } = _b, props = __objRest(_b, [
687
+ "className",
688
+ "active",
689
+ "reversed"
690
+ ]);
691
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
692
+ "span",
693
+ __spreadProps(__spreadValues({}, props), {
694
+ ref,
695
+ className: (0, import_css.cx)(
696
+ className,
697
+ import_css.css`
698
+ cursor: pointer;
699
+ color: ${reversed ? active ? "white" : "#aaa" : active ? "black" : "#ccc"};
700
+ `
701
+ )
702
+ })
703
+ );
704
+ }
705
+ );
706
+ var Icon = import_react5.default.forwardRef(
707
+ (_a, ref) => {
708
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
709
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
710
+ "span",
711
+ __spreadProps(__spreadValues({}, props), {
712
+ ref,
713
+ className: (0, import_css.cx)(
714
+ "material-icons",
715
+ className,
716
+ import_css.css`
717
+ font-size: 18px;
718
+ vertical-align: text-bottom;
719
+ `
720
+ )
721
+ })
722
+ );
723
+ }
724
+ );
725
+ var Menu = import_react5.default.forwardRef(
726
+ (_a, ref) => {
727
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
728
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
729
+ "div",
730
+ __spreadProps(__spreadValues({}, props), {
731
+ "data-testid": "menu",
732
+ ref,
733
+ className: (0, import_css.cx)(
734
+ className,
735
+ import_css.css`
736
+ & > * {
737
+ display: inline-block;
738
+ }
739
+
740
+ & > * + * {
741
+ margin-left: 15px;
742
+ }
743
+ `
744
+ )
745
+ })
746
+ );
747
+ }
748
+ );
749
+ var Portal = ({ children }) => {
750
+ return typeof document === "object" ? import_react_dom.default.createPortal(children, document.body) : null;
751
+ };
752
+ var Toolbar = import_react5.default.forwardRef(
753
+ (_a, ref) => {
754
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
755
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
756
+ Menu,
757
+ __spreadProps(__spreadValues({}, props), {
758
+ ref,
759
+ className: (0, import_css.cx)(
760
+ className,
761
+ import_css.css`
762
+ position: relative;
763
+ padding: 1px 18px 17px;
764
+ margin: 0 -20px;
765
+ border-bottom: 2px solid #eee;
766
+ margin-bottom: 20px;
767
+ `
768
+ )
769
+ })
770
+ );
771
+ }
772
+ );
773
+
774
+ // src/hooks/misc/use-autosize-textarea.tsx
775
+ var import_react6 = require("react");
663
776
  var useAutosizeTextArea = (textAreaRef, value) => {
664
- (0, import_react4.useEffect)(() => {
777
+ (0, import_react6.useEffect)(() => {
665
778
  if (textAreaRef.current !== null) {
666
779
  textAreaRef.current.style.height = "0px";
667
780
  const scrollHeight = textAreaRef.current.scrollHeight;
@@ -672,15 +785,15 @@ var useAutosizeTextArea = (textAreaRef, value) => {
672
785
  var use_autosize_textarea_default = useAutosizeTextArea;
673
786
 
674
787
  // src/components/source-search-box/source-search-box.tsx
675
- var import_react5 = require("react");
788
+ var import_react7 = require("react");
676
789
 
677
790
  // src/components/ui/command.tsx
678
- var React2 = __toESM(require("react"));
791
+ var React3 = __toESM(require("react"));
679
792
  var import_cmdk = require("cmdk");
680
- var import_jsx_runtime = require("react/jsx-runtime");
681
- var Command = React2.forwardRef((_a, ref) => {
793
+ var import_jsx_runtime3 = require("react/jsx-runtime");
794
+ var Command = React3.forwardRef((_a, ref) => {
682
795
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
683
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
796
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
684
797
  import_cmdk.Command,
685
798
  __spreadValues({
686
799
  ref,
@@ -692,9 +805,9 @@ var Command = React2.forwardRef((_a, ref) => {
692
805
  );
693
806
  });
694
807
  Command.displayName = import_cmdk.Command.displayName;
695
- var CommandInput = React2.forwardRef((_a, ref) => {
808
+ var CommandInput = React3.forwardRef((_a, ref) => {
696
809
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
697
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex items-center border-b px-3", "cmdk-input-wrapper": "", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
810
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "flex items-center border-b px-3", "cmdk-input-wrapper": "", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
698
811
  import_cmdk.Command.Input,
699
812
  __spreadValues({
700
813
  ref,
@@ -706,9 +819,9 @@ var CommandInput = React2.forwardRef((_a, ref) => {
706
819
  ) });
707
820
  });
708
821
  CommandInput.displayName = import_cmdk.Command.Input.displayName;
709
- var CommandList = React2.forwardRef((_a, ref) => {
822
+ var CommandList = React3.forwardRef((_a, ref) => {
710
823
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
711
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
824
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
712
825
  import_cmdk.Command.List,
713
826
  __spreadValues({
714
827
  ref,
@@ -717,11 +830,11 @@ var CommandList = React2.forwardRef((_a, ref) => {
717
830
  );
718
831
  });
719
832
  CommandList.displayName = import_cmdk.Command.List.displayName;
720
- var CommandEmpty = React2.forwardRef((props, ref) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_cmdk.Command.Empty, __spreadValues({ ref, className: "py-6 text-center text-sm" }, props)));
833
+ var CommandEmpty = React3.forwardRef((props, ref) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_cmdk.Command.Empty, __spreadValues({ ref, className: "py-6 text-center text-sm" }, props)));
721
834
  CommandEmpty.displayName = import_cmdk.Command.Empty.displayName;
722
- var CommandGroup = React2.forwardRef((_a, ref) => {
835
+ var CommandGroup = React3.forwardRef((_a, ref) => {
723
836
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
724
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
837
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
725
838
  import_cmdk.Command.Group,
726
839
  __spreadValues({
727
840
  ref,
@@ -733,9 +846,9 @@ var CommandGroup = React2.forwardRef((_a, ref) => {
733
846
  );
734
847
  });
735
848
  CommandGroup.displayName = import_cmdk.Command.Group.displayName;
736
- var CommandSeparator = React2.forwardRef((_a, ref) => {
849
+ var CommandSeparator = React3.forwardRef((_a, ref) => {
737
850
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
738
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
851
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
739
852
  import_cmdk.Command.Separator,
740
853
  __spreadValues({
741
854
  ref,
@@ -744,9 +857,9 @@ var CommandSeparator = React2.forwardRef((_a, ref) => {
744
857
  );
745
858
  });
746
859
  CommandSeparator.displayName = import_cmdk.Command.Separator.displayName;
747
- var CommandItem = React2.forwardRef((_a, ref) => {
860
+ var CommandItem = React3.forwardRef((_a, ref) => {
748
861
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
749
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
862
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
750
863
  import_cmdk.Command.Item,
751
864
  __spreadValues({
752
865
  ref,
@@ -760,7 +873,7 @@ var CommandItem = React2.forwardRef((_a, ref) => {
760
873
  CommandItem.displayName = import_cmdk.Command.Item.displayName;
761
874
  var CommandShortcut = (_a) => {
762
875
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
763
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
876
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
764
877
  "span",
765
878
  __spreadValues({
766
879
  className: cn("ml-auto text-xs tracking-widest text-muted-foreground", className)
@@ -770,10 +883,10 @@ var CommandShortcut = (_a) => {
770
883
  CommandShortcut.displayName = "CommandShortcut";
771
884
 
772
885
  // src/components/source-search-box/source-search-box.tsx
773
- var import_jsx_runtime2 = require("react/jsx-runtime");
886
+ var import_jsx_runtime4 = require("react/jsx-runtime");
774
887
  function SourceSearchBox(props) {
775
- const [selectedValue, setSelectedValue] = (0, import_react5.useState)("");
776
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
888
+ const [selectedValue, setSelectedValue] = (0, import_react7.useState)("");
889
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
777
890
  Command,
778
891
  {
779
892
  className: "rounded-lg border shadow-md",
@@ -789,7 +902,7 @@ function SourceSearchBox(props) {
789
902
  return 0;
790
903
  },
791
904
  children: [
792
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
905
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
793
906
  CommandInput,
794
907
  {
795
908
  value: props.searchTerm,
@@ -797,18 +910,18 @@ function SourceSearchBox(props) {
797
910
  placeholder: "Search for a command..."
798
911
  }
799
912
  ),
800
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(CommandList, { children: [
801
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(CommandEmpty, { children: "No results found." }),
802
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(CommandGroup, { heading: "Available resources", children: props.suggestedFiles.map((filePointer) => {
803
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
913
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(CommandList, { children: [
914
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(CommandEmpty, { children: "No results found." }),
915
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(CommandGroup, { heading: "Available resources", children: props.suggestedFiles.map((filePointer) => {
916
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
804
917
  CommandItem,
805
918
  {
806
919
  value: filePointer.name,
807
920
  onSelect: (value) => {
808
921
  props.onSelectedFile(filePointer);
809
922
  },
810
- children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: " px-3 flex flex-row gap-1 items-center", children: [
811
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Logo, { width: "20px", height: "20px", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
923
+ children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: " px-3 flex flex-row gap-1 items-center", children: [
924
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Logo, { width: "20px", height: "20px", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
812
925
  "img",
813
926
  {
814
927
  src: filePointer.iconImageUri,
@@ -822,7 +935,7 @@ function SourceSearchBox(props) {
822
935
  `word-${filePointer.sourceApplication}.${filePointer.name}`
823
936
  );
824
937
  }) }),
825
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(CommandSeparator, {})
938
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(CommandSeparator, {})
826
939
  ] })
827
940
  ]
828
941
  }
@@ -833,17 +946,17 @@ function Logo({
833
946
  width,
834
947
  height
835
948
  }) {
836
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "flex items-center justify-center", style: { width, height }, children });
949
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "flex items-center justify-center", style: { width, height }, children });
837
950
  }
838
951
 
839
952
  // src/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.tsx
840
953
  var import_react_core2 = require("@copilotkit/react-core");
841
954
 
842
955
  // src/components/ui/button.tsx
843
- var React3 = __toESM(require("react"));
956
+ var React4 = __toESM(require("react"));
844
957
  var import_react_slot = require("@radix-ui/react-slot");
845
958
  var import_class_variance_authority = require("class-variance-authority");
846
- var import_jsx_runtime3 = require("react/jsx-runtime");
959
+ var import_jsx_runtime5 = require("react/jsx-runtime");
847
960
  var buttonVariants = (0, import_class_variance_authority.cva)(
848
961
  "inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
849
962
  {
@@ -869,31 +982,31 @@ var buttonVariants = (0, import_class_variance_authority.cva)(
869
982
  }
870
983
  }
871
984
  );
872
- var Button = React3.forwardRef(
985
+ var Button2 = React4.forwardRef(
873
986
  (_a, ref) => {
874
987
  var _b = _a, { className, variant, size, asChild = false } = _b, props = __objRest(_b, ["className", "variant", "size", "asChild"]);
875
988
  const Comp = asChild ? import_react_slot.Slot : "button";
876
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Comp, __spreadValues({ className: cn(buttonVariants({ variant, size, className })), ref }, props));
989
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Comp, __spreadValues({ className: cn(buttonVariants({ variant, size, className })), ref }, props));
877
990
  }
878
991
  );
879
- Button.displayName = "Button";
992
+ Button2.displayName = "Button";
880
993
 
881
994
  // src/components/ui/label.tsx
882
- var React4 = __toESM(require("react"));
995
+ var React5 = __toESM(require("react"));
883
996
  var LabelPrimitive = __toESM(require("@radix-ui/react-label"));
884
997
  var import_class_variance_authority2 = require("class-variance-authority");
885
- var import_jsx_runtime4 = require("react/jsx-runtime");
998
+ var import_jsx_runtime6 = require("react/jsx-runtime");
886
999
  var labelVariants = (0, import_class_variance_authority2.cva)(
887
1000
  "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
888
1001
  );
889
- var Label = React4.forwardRef((_a, ref) => {
1002
+ var Label = React5.forwardRef((_a, ref) => {
890
1003
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
891
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(LabelPrimitive.Root, __spreadValues({ ref, className: cn(labelVariants(), className) }, props));
1004
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(LabelPrimitive.Root, __spreadValues({ ref, className: cn(labelVariants(), className) }, props));
892
1005
  });
893
1006
  Label.displayName = LabelPrimitive.Root.displayName;
894
1007
 
895
1008
  // src/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.tsx
896
- var import_react7 = require("react");
1009
+ var import_react8 = require("react");
897
1010
 
898
1011
  // src/lib/stream-promise-flatten.ts
899
1012
  function streamPromiseFlatten(promise) {
@@ -922,15 +1035,15 @@ function streamPromiseFlatten(promise) {
922
1035
  // src/components/hovering-toolbar/text-insertion-prompt-box/included-files-preview.tsx
923
1036
  var import_Chip = __toESM(require("@mui/material/Chip/Chip.js"));
924
1037
  var import_Avatar = __toESM(require("@mui/material/Avatar/Avatar.js"));
925
- var import_jsx_runtime5 = require("react/jsx-runtime");
1038
+ var import_jsx_runtime7 = require("react/jsx-runtime");
926
1039
  var IncludedFilesPreview = ({
927
1040
  includedFiles,
928
1041
  setIncludedFiles
929
1042
  }) => {
930
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex flex-col gap-2 mt-2", children: [
931
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Label, { className: "", children: "Included context:" }),
932
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "flex flex-wrap gap-2", children: includedFiles.map((filePointer, index) => {
933
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1043
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "flex flex-col gap-2 mt-2", children: [
1044
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Label, { className: "", children: "Included context:" }),
1045
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "flex flex-wrap gap-2", children: includedFiles.map((filePointer, index) => {
1046
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
934
1047
  FileChipPreview,
935
1048
  {
936
1049
  filePointer,
@@ -944,12 +1057,12 @@ var IncludedFilesPreview = ({
944
1057
  ] });
945
1058
  };
946
1059
  var FileChipPreview = ({ filePointer, onDelete }) => {
947
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1060
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
948
1061
  import_Chip.default,
949
1062
  {
950
1063
  label: filePointer.name,
951
1064
  onDelete,
952
- avatar: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1065
+ avatar: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
953
1066
  import_Avatar.default,
954
1067
  {
955
1068
  src: filePointer.iconImageUri,
@@ -961,22 +1074,8 @@ var FileChipPreview = ({ filePointer, onDelete }) => {
961
1074
  );
962
1075
  };
963
1076
 
964
- // src/components/hovering-toolbar/hovering-editor-provider.tsx
965
- var import_react6 = require("react");
966
- var import_jsx_runtime6 = require("react/jsx-runtime");
967
- var HoveringEditorContext = (0, import_react6.createContext)({
968
- isDisplayed: false,
969
- setIsDisplayed: () => {
970
- }
971
- });
972
- var HoveringEditorProvider = ({ children }) => {
973
- const [isDisplayed, setIsDisplayed] = (0, import_react6.useState)(false);
974
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(HoveringEditorContext.Provider, { value: { isDisplayed, setIsDisplayed }, children });
975
- };
976
- var useHoveringEditorContext = () => (0, import_react6.useContext)(HoveringEditorContext);
977
-
978
1077
  // src/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.tsx
979
- var import_jsx_runtime7 = require("react/jsx-runtime");
1078
+ var import_jsx_runtime8 = require("react/jsx-runtime");
980
1079
  var HoveringInsertionPromptBoxCore = ({
981
1080
  performInsertion,
982
1081
  state,
@@ -984,26 +1083,26 @@ var HoveringInsertionPromptBoxCore = ({
984
1083
  contextCategories
985
1084
  }) => {
986
1085
  const { getDocumentsContext } = (0, import_react_core2.useCopilotContext)();
987
- const [editSuggestion, setEditSuggestion] = (0, import_react7.useState)("");
988
- const [suggestionIsLoading, setSuggestionIsLoading] = (0, import_react7.useState)(false);
989
- const [adjustmentPrompt, setAdjustmentPrompt] = (0, import_react7.useState)("");
990
- const [generatingSuggestion, setGeneratingSuggestion] = (0, import_react7.useState)(
1086
+ const [editSuggestion, setEditSuggestion] = (0, import_react8.useState)("");
1087
+ const [suggestionIsLoading, setSuggestionIsLoading] = (0, import_react8.useState)(false);
1088
+ const [adjustmentPrompt, setAdjustmentPrompt] = (0, import_react8.useState)("");
1089
+ const [generatingSuggestion, setGeneratingSuggestion] = (0, import_react8.useState)(
991
1090
  null
992
1091
  );
993
- const adjustmentTextAreaRef = (0, import_react7.useRef)(null);
994
- const suggestionTextAreaRef = (0, import_react7.useRef)(null);
995
- const [filePointers, setFilePointers] = (0, import_react7.useState)([]);
996
- const [suggestedFiles, setSuggestedFiles] = (0, import_react7.useState)([]);
997
- (0, import_react7.useEffect)(() => {
1092
+ const adjustmentTextAreaRef = (0, import_react8.useRef)(null);
1093
+ const suggestionTextAreaRef = (0, import_react8.useRef)(null);
1094
+ const [filePointers, setFilePointers] = (0, import_react8.useState)([]);
1095
+ const [suggestedFiles, setSuggestedFiles] = (0, import_react8.useState)([]);
1096
+ (0, import_react8.useEffect)(() => {
998
1097
  setSuggestedFiles(getDocumentsContext(contextCategories));
999
1098
  }, [contextCategories, getDocumentsContext]);
1000
1099
  use_autosize_textarea_default(suggestionTextAreaRef, editSuggestion || "");
1001
1100
  use_autosize_textarea_default(adjustmentTextAreaRef, adjustmentPrompt || "");
1002
- (0, import_react7.useEffect)(() => {
1101
+ (0, import_react8.useEffect)(() => {
1003
1102
  var _a;
1004
1103
  (_a = adjustmentTextAreaRef.current) == null ? void 0 : _a.focus();
1005
1104
  }, []);
1006
- (0, import_react7.useEffect)(() => {
1105
+ (0, import_react8.useEffect)(() => {
1007
1106
  if (!generatingSuggestion) {
1008
1107
  return;
1009
1108
  }
@@ -1041,7 +1140,7 @@ var HoveringInsertionPromptBoxCore = ({
1041
1140
  releaseLockIfNotClosed();
1042
1141
  };
1043
1142
  }, [generatingSuggestion]);
1044
- const beginGeneratingAdjustment = (0, import_react7.useCallback)(() => __async(void 0, null, function* () {
1143
+ const beginGeneratingAdjustment = (0, import_react8.useCallback)(() => __async(void 0, null, function* () {
1045
1144
  if (!adjustmentPrompt.trim()) {
1046
1145
  return;
1047
1146
  }
@@ -1071,10 +1170,10 @@ var HoveringInsertionPromptBoxCore = ({
1071
1170
  const adjustmentLabel = textToEdit === "" ? "Describe the text you want to insert" : "Describe adjustments to the suggested text";
1072
1171
  const placeholder = textToEdit === "" ? "e.g. 'summarize the client's top 3 pain-points from @CallTranscript'" : "e.g. 'make it more formal', 'be more specific', ...";
1073
1172
  const { setIsDisplayed } = useHoveringEditorContext();
1074
- const AdjustmentPromptComponent = /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_jsx_runtime7.Fragment, { children: [
1075
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Label, { className: "", children: adjustmentLabel }),
1076
- /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "relative w-full flex items-center", children: [
1077
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
1173
+ const AdjustmentPromptComponent = /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_jsx_runtime8.Fragment, { children: [
1174
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Label, { className: "", children: adjustmentLabel }),
1175
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "relative w-full flex items-center", children: [
1176
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1078
1177
  "textarea",
1079
1178
  {
1080
1179
  "data-testid": "adjustment-prompt",
@@ -1089,9 +1188,6 @@ var HoveringInsertionPromptBoxCore = ({
1089
1188
  } else if (e.key === "Enter") {
1090
1189
  e.preventDefault();
1091
1190
  beginGeneratingAdjustment();
1092
- } else if (e.key == "Escape") {
1093
- e.preventDefault();
1094
- setIsDisplayed(false);
1095
1191
  }
1096
1192
  },
1097
1193
  placeholder,
@@ -1100,30 +1196,30 @@ var HoveringInsertionPromptBoxCore = ({
1100
1196
  rows: 1
1101
1197
  }
1102
1198
  ),
1103
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
1199
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1104
1200
  "button",
1105
1201
  {
1106
1202
  onClick: beginGeneratingAdjustment,
1107
1203
  className: "absolute right-2 bg-blue-500 text-white w-8 h-8 rounded-full flex items-center justify-center",
1108
1204
  "data-testid": "generate-button",
1109
- children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("i", { className: "material-icons", children: "arrow_forward" })
1205
+ children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("i", { className: "material-icons", children: "arrow_forward" })
1110
1206
  }
1111
1207
  )
1112
1208
  ] })
1113
1209
  ] });
1114
- const SuggestionComponent = /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_jsx_runtime7.Fragment, { children: [
1115
- /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "flex justify-between items-end w-full", children: [
1116
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Label, { className: "mt-4", children: "Suggested:" }),
1117
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "ml-auto", children: isLoading && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "flex justify-center items-center", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
1210
+ const SuggestionComponent = /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_jsx_runtime8.Fragment, { children: [
1211
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "flex justify-between items-end w-full", children: [
1212
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Label, { className: "mt-4", children: "Suggested:" }),
1213
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "ml-auto", children: isLoading && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "flex justify-center items-center", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1118
1214
  "div",
1119
1215
  {
1120
1216
  className: "inline-block h-4 w-4 animate-spin rounded-full border-4 border-solid border-current border-r-transparent align-[-0.125em] motion-reduce:animate-[spin_1.5s_linear_infinite]",
1121
1217
  role: "status",
1122
- children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "!absolute !-m-px !h-px !w-px !overflow-hidden !whitespace-nowrap !border-0 !p-0 ![clip:rect(0,0,0,0)]", children: "Loading..." })
1218
+ children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "!absolute !-m-px !h-px !w-px !overflow-hidden !whitespace-nowrap !border-0 !p-0 ![clip:rect(0,0,0,0)]", children: "Loading..." })
1123
1219
  }
1124
1220
  ) }) })
1125
1221
  ] }),
1126
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
1222
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1127
1223
  "textarea",
1128
1224
  {
1129
1225
  "data-testid": "suggestion-result",
@@ -1136,8 +1232,8 @@ var HoveringInsertionPromptBoxCore = ({
1136
1232
  }
1137
1233
  )
1138
1234
  ] });
1139
- const SubmitComponent = /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "flex w-full gap-4 justify-start", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
1140
- Button,
1235
+ const SubmitComponent = /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "flex w-full gap-4 justify-start", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
1236
+ Button2,
1141
1237
  {
1142
1238
  "data-testid": "insert-button",
1143
1239
  className: " bg-green-700 text-white",
@@ -1146,16 +1242,16 @@ var HoveringInsertionPromptBoxCore = ({
1146
1242
  },
1147
1243
  children: [
1148
1244
  "Insert ",
1149
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("i", { className: "material-icons", children: "check" })
1245
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("i", { className: "material-icons", children: "check" })
1150
1246
  ]
1151
1247
  }
1152
1248
  ) });
1153
1249
  const sourceSearchCandidate = adjustmentPrompt.split(" ").pop();
1154
1250
  const sourceSearchWord = (sourceSearchCandidate == null ? void 0 : sourceSearchCandidate.startsWith("@")) ? sourceSearchCandidate.slice(1) : void 0;
1155
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "w-full flex flex-col items-start relative gap-2", children: [
1251
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "w-full flex flex-col items-start relative gap-2", children: [
1156
1252
  AdjustmentPromptComponent,
1157
- filePointers.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(IncludedFilesPreview, { includedFiles: filePointers, setIncludedFiles: setFilePointers }),
1158
- sourceSearchWord !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
1253
+ filePointers.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(IncludedFilesPreview, { includedFiles: filePointers, setIncludedFiles: setFilePointers }),
1254
+ sourceSearchWord !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1159
1255
  SourceSearchBox,
1160
1256
  {
1161
1257
  searchTerm: sourceSearchWord,
@@ -1174,14 +1270,14 @@ var HoveringInsertionPromptBoxCore = ({
1174
1270
  };
1175
1271
 
1176
1272
  // src/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.tsx
1177
- var import_jsx_runtime8 = require("react/jsx-runtime");
1273
+ var import_jsx_runtime9 = require("react/jsx-runtime");
1178
1274
  var HoveringInsertionPromptBox = (props) => {
1179
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1275
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1180
1276
  "div",
1181
1277
  {
1182
1278
  className: "flex flex-col justify-center items-center space-y-4 rounded-md border shadow-lg p-4 border-gray- bg-white",
1183
1279
  style: { width: "35rem" },
1184
- children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1280
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1185
1281
  HoveringInsertionPromptBoxCore,
1186
1282
  {
1187
1283
  state: {
@@ -1196,105 +1292,6 @@ var HoveringInsertionPromptBox = (props) => {
1196
1292
  );
1197
1293
  };
1198
1294
 
1199
- // src/components/hovering-toolbar/hovering-toolbar-components.tsx
1200
- var import_css = require("@emotion/css");
1201
- var import_react8 = __toESM(require("react"));
1202
- var import_react_dom = __toESM(require("react-dom"));
1203
- var import_jsx_runtime9 = require("react/jsx-runtime");
1204
- var Button2 = import_react8.default.forwardRef(
1205
- (_a, ref) => {
1206
- var _b = _a, {
1207
- className,
1208
- active,
1209
- reversed
1210
- } = _b, props = __objRest(_b, [
1211
- "className",
1212
- "active",
1213
- "reversed"
1214
- ]);
1215
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1216
- "span",
1217
- __spreadProps(__spreadValues({}, props), {
1218
- ref,
1219
- className: (0, import_css.cx)(
1220
- className,
1221
- import_css.css`
1222
- cursor: pointer;
1223
- color: ${reversed ? active ? "white" : "#aaa" : active ? "black" : "#ccc"};
1224
- `
1225
- )
1226
- })
1227
- );
1228
- }
1229
- );
1230
- var Icon = import_react8.default.forwardRef(
1231
- (_a, ref) => {
1232
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1233
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1234
- "span",
1235
- __spreadProps(__spreadValues({}, props), {
1236
- ref,
1237
- className: (0, import_css.cx)(
1238
- "material-icons",
1239
- className,
1240
- import_css.css`
1241
- font-size: 18px;
1242
- vertical-align: text-bottom;
1243
- `
1244
- )
1245
- })
1246
- );
1247
- }
1248
- );
1249
- var Menu = import_react8.default.forwardRef(
1250
- (_a, ref) => {
1251
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1252
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1253
- "div",
1254
- __spreadProps(__spreadValues({}, props), {
1255
- "data-testid": "menu",
1256
- ref,
1257
- className: (0, import_css.cx)(
1258
- className,
1259
- import_css.css`
1260
- & > * {
1261
- display: inline-block;
1262
- }
1263
-
1264
- & > * + * {
1265
- margin-left: 15px;
1266
- }
1267
- `
1268
- )
1269
- })
1270
- );
1271
- }
1272
- );
1273
- var Portal = ({ children }) => {
1274
- return typeof document === "object" ? import_react_dom.default.createPortal(children, document.body) : null;
1275
- };
1276
- var Toolbar = import_react8.default.forwardRef(
1277
- (_a, ref) => {
1278
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1279
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1280
- Menu,
1281
- __spreadProps(__spreadValues({}, props), {
1282
- ref,
1283
- className: (0, import_css.cx)(
1284
- className,
1285
- import_css.css`
1286
- position: relative;
1287
- padding: 1px 18px 17px;
1288
- margin: 0 -20px;
1289
- border-bottom: 2px solid #eee;
1290
- margin-bottom: 20px;
1291
- `
1292
- )
1293
- })
1294
- );
1295
- }
1296
- );
1297
-
1298
1295
  // src/components/hovering-toolbar/hovering-toolbar.tsx
1299
1296
  var import_jsx_runtime10 = require("react/jsx-runtime");
1300
1297
  var HoveringToolbar = (props) => {
@@ -1306,10 +1303,11 @@ var HoveringToolbar = (props) => {
1306
1303
  (0, import_react9.useEffect)(() => {
1307
1304
  setIsClient(true);
1308
1305
  }, []);
1309
- (0, import_react9.useEffect)(() => {
1306
+ const isShown = isClient && isDisplayed && selection;
1307
+ (0, import_react9.useLayoutEffect)(() => {
1310
1308
  const el = ref.current;
1311
1309
  const { selection: selection2 } = editor;
1312
- if (!el) {
1310
+ if (!el || !isShown) {
1313
1311
  return;
1314
1312
  }
1315
1313
  if (!selection2) {
@@ -1325,26 +1323,23 @@ var HoveringToolbar = (props) => {
1325
1323
  if (rect.top === 0 && rect.left === 0 && rect.width === 0 && rect.height === 0) {
1326
1324
  return;
1327
1325
  }
1328
- const minGapFromEdge = 60;
1329
- const verticalOffsetFromCorner = 35;
1330
- const horizontalOffsetFromCorner = 15;
1331
- let top = rect.top + window.scrollY - el.offsetHeight + verticalOffsetFromCorner;
1332
- if (top < minGapFromEdge) {
1333
- top = rect.bottom + window.scrollY + minGapFromEdge;
1334
- } else if (top + el.offsetHeight > window.innerHeight - minGapFromEdge) {
1335
- top = rect.top + window.scrollY - el.offsetHeight - minGapFromEdge;
1326
+ const verticalOffsetFromCorner = 0;
1327
+ const horizontalOffsetFromCorner = 0;
1328
+ let top = rect.bottom + window.scrollY + verticalOffsetFromCorner;
1329
+ if (rect.bottom + el.offsetHeight > window.innerHeight - verticalOffsetFromCorner) {
1330
+ top = rect.top + window.scrollY - el.offsetHeight - verticalOffsetFromCorner;
1336
1331
  }
1337
1332
  let left = rect.left + window.scrollX - el.offsetWidth / 2 + rect.width / 2 + horizontalOffsetFromCorner;
1338
- if (left < minGapFromEdge) {
1339
- left = minGapFromEdge;
1340
- } else if (left + el.offsetWidth > window.innerWidth - minGapFromEdge) {
1341
- left = window.innerWidth - el.offsetWidth - minGapFromEdge;
1333
+ if (left < horizontalOffsetFromCorner) {
1334
+ left = horizontalOffsetFromCorner;
1335
+ } else if (left + el.offsetWidth > window.innerWidth - horizontalOffsetFromCorner) {
1336
+ left = window.innerWidth - el.offsetWidth - horizontalOffsetFromCorner;
1342
1337
  }
1343
1338
  el.style.opacity = "1";
1344
1339
  el.style.position = "absolute";
1345
1340
  el.style.top = `${top}px`;
1346
1341
  el.style.left = `${left}px`;
1347
- });
1342
+ }, [isShown]);
1348
1343
  (0, import_react9.useEffect)(() => {
1349
1344
  const handleClickOutside = (event) => {
1350
1345
  if (ref.current && !ref.current.contains(event.target)) {
@@ -1356,7 +1351,7 @@ var HoveringToolbar = (props) => {
1356
1351
  document.removeEventListener("mousedown", handleClickOutside);
1357
1352
  };
1358
1353
  }, [ref, setIsDisplayed]);
1359
- if (!isClient) {
1354
+ if (!isShown) {
1360
1355
  return null;
1361
1356
  }
1362
1357
  return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
@@ -1365,14 +1360,11 @@ var HoveringToolbar = (props) => {
1365
1360
  ref,
1366
1361
  className: "copilot-kit-textarea-css-scope " + (props.hoverMenuClassname || "p-2 absolute z-10 top-[-10000px] left-[-10000px] mt-[-6px] opacity-0 transition-opacity duration-700"),
1367
1362
  "data-testid": "hovering-toolbar",
1368
- children: isDisplayed && selection && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1363
+ children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1369
1364
  HoveringInsertionPromptBox,
1370
1365
  {
1371
1366
  editorState: editorState(editor, selection),
1372
1367
  apiConfig: props.apiConfig,
1373
- closeWindow: () => {
1374
- setIsDisplayed(false);
1375
- },
1376
1368
  performInsertion: (insertedText) => {
1377
1369
  import_slate7.Transforms.delete(editor, { at: selection });
1378
1370
  import_slate7.Transforms.insertText(editor, insertedText, {
@@ -1598,6 +1590,7 @@ var BaseCopilotTextareaWithHoveringContext = import_react12.default.forwardRef(
1598
1590
  }, []);
1599
1591
  const [lastKnownFullEditorText, setLastKnownFullEditorText] = (0, import_react12.useState)(valueOnInitialRender);
1600
1592
  const [cursorMovedSinceLastTextChange, setCursorMovedSinceLastTextChange] = (0, import_react12.useState)(false);
1593
+ const [isUserInputActive, setIsUserInputActive] = (0, import_react12.useState)(false);
1601
1594
  const initialValue = (0, import_react12.useMemo)(() => {
1602
1595
  return [
1603
1596
  {
@@ -1620,7 +1613,8 @@ var BaseCopilotTextareaWithHoveringContext = import_react12.default.forwardRef(
1620
1613
  // textarea is manually disabled:
1621
1614
  autosuggestionsConfig.disabled || // hovering editor is displayed:
1622
1615
  hoveringEditorIsDisplayed || // the cursor has moved since the last text change AND we are configured to disable autosuggestions in this case:
1623
- cursorMovedSinceLastTextChange && autosuggestionsConfig.temporarilyDisableWhenMovingCursorWithoutChangingText
1616
+ cursorMovedSinceLastTextChange && autosuggestionsConfig.temporarilyDisableWhenMovingCursorWithoutChangingText || // not user input and we want to disable non-trusted events (like text insertion from autocomplete plugins):
1617
+ !isUserInputActive && autosuggestionsConfig.temporarilyDisableNotTrustedEvents
1624
1618
  );
1625
1619
  const {
1626
1620
  currentAutocompleteSuggestion,
@@ -1755,6 +1749,7 @@ var BaseCopilotTextareaWithHoveringContext = import_react12.default.forwardRef(
1755
1749
  renderPlaceholder: renderPlaceholderMemoized,
1756
1750
  onKeyDown: (event) => {
1757
1751
  var _a2;
1752
+ setIsUserInputActive(true);
1758
1753
  onKeyDownHandlerForHoveringEditor(event);
1759
1754
  onKeyDownHandlerForAutocomplete(event);
1760
1755
  (_a2 = props.onKeyDown) == null ? void 0 : _a2.call(props, event);
@@ -1768,6 +1763,7 @@ var BaseCopilotTextareaWithHoveringContext = import_react12.default.forwardRef(
1768
1763
  var _a2;
1769
1764
  (_a2 = props.onBlur) == null ? void 0 : _a2.call(props, ev);
1770
1765
  clearAutocompletionsFromEditor(editor);
1766
+ setIsUserInputActive(false);
1771
1767
  }
1772
1768
  }, propsToForward)
1773
1769
  )