@agentiffai/design 0.1.4 → 0.1.6

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 (64) hide show
  1. package/dist/{Window-CukhSS8T.d.cts → StreamStatusIndicator-DM5n4MI1.d.cts} +141 -4
  2. package/dist/{Window-CukhSS8T.d.ts → StreamStatusIndicator-DM5n4MI1.d.ts} +141 -4
  3. package/dist/copilotkit/index.cjs +937 -206
  4. package/dist/copilotkit/index.cjs.map +1 -1
  5. package/dist/copilotkit/index.d.cts +1 -1
  6. package/dist/copilotkit/index.d.ts +1 -1
  7. package/dist/copilotkit/index.js +935 -207
  8. package/dist/copilotkit/index.js.map +1 -1
  9. package/dist/index.cjs +1819 -164
  10. package/dist/index.cjs.map +1 -1
  11. package/dist/index.d.cts +17 -3
  12. package/dist/index.d.ts +17 -3
  13. package/dist/index.js +1812 -165
  14. package/dist/index.js.map +1 -1
  15. package/dist/layout/index.cjs +85 -50
  16. package/dist/layout/index.cjs.map +1 -1
  17. package/dist/layout/index.d.cts +10 -3
  18. package/dist/layout/index.d.ts +10 -3
  19. package/dist/layout/index.js +85 -50
  20. package/dist/layout/index.js.map +1 -1
  21. package/dist/theme/index.cjs +6 -1
  22. package/dist/theme/index.cjs.map +1 -1
  23. package/dist/theme/index.d.cts +8 -0
  24. package/dist/theme/index.d.ts +8 -0
  25. package/dist/theme/index.js +6 -1
  26. package/dist/theme/index.js.map +1 -1
  27. package/dist/workflow/index.cjs +995 -0
  28. package/dist/workflow/index.cjs.map +1 -0
  29. package/dist/workflow/index.d.cts +168 -0
  30. package/dist/workflow/index.d.ts +168 -0
  31. package/dist/workflow/index.js +986 -0
  32. package/dist/workflow/index.js.map +1 -0
  33. package/package.json +16 -3
  34. package/public/assets/bg-set/brand-logos/Google.svg +1 -0
  35. package/public/assets/bg-set/brand-logos/Google2.svg +1 -0
  36. package/public/assets/bg-set/brand-logos/Microsoft.svg +1 -0
  37. package/public/assets/bg-set/brand-logos/Microsoft2.svg +1 -0
  38. package/public/assets/bg-set/brand-logos/Slack.svg +1 -0
  39. package/public/assets/bg-set/brand-logos/Slack2.svg +1 -0
  40. package/public/assets/bg-set/brand-logos/YouTube.svg +1 -0
  41. package/public/assets/bg-set/brand-logos/YouTube2.svg +1 -0
  42. package/public/assets/bg-set/pattern/Size=lg, Type=Waves Rays2.svg +1 -0
  43. package/public/assets/bg-set/pattern/Size=md, Type=Waves Rays2.svg +1 -0
  44. package/public/assets/bg-set/pattern/Size=sm, Type=Waves Rays2.svg +1 -0
  45. package/public/assets/bg-set/pattern/Size=xl, Type=Waves Rays2.svg +1 -0
  46. package/public/assets/bg-set/pattern/Size=xs, Type=Waves Rays2.svg +1 -0
  47. package/public/assets/icon-set/Icon-add-circle-fill.svg +1 -0
  48. package/public/assets/icon-set/Icon-arrow-left-fill.svg +1 -0
  49. package/public/assets/icon-set/Icon-calendar-fill.svg +1 -0
  50. package/public/assets/icon-set/Icon-chat-1-fill.svg +1 -0
  51. package/public/assets/icon-set/Icon-check-fill.svg +3 -0
  52. package/public/assets/icon-set/Icon-close-fill.svg +3 -0
  53. package/public/assets/icon-set/Icon-download-2-fill.svg +1 -0
  54. package/public/assets/icon-set/Icon-home-fill.svg +1 -0
  55. package/public/assets/icon-set/Icon-hourglass-line.svg +3 -0
  56. package/public/assets/icon-set/Icon-loader-2-line.svg +3 -0
  57. package/public/assets/icon-set/Icon-mic-fill.svg +1 -0
  58. package/public/assets/icon-set/Icon-radio-button-line.svg +3 -0
  59. package/public/assets/icon-set/Icon-settings-3-fill.svg +1 -0
  60. package/public/assets/icon-set/Icon-settings-fill.svg +1 -0
  61. package/public/assets/icon-set/Icon-settings-line.svg +1 -0
  62. package/public/assets/icon-set/Icon-shield-check-fill.svg +3 -0
  63. package/public/assets/icon-set/Icon-shield-cross-fill.svg +3 -0
  64. package/public/assets/icon-set/logout-box-fill.svg +1 -0
@@ -458,6 +458,20 @@ var MessageContainer = styled4.div`
458
458
  align-items: flex-start;
459
459
  padding: 8px 0;
460
460
  max-width: 100%;
461
+
462
+ /* Fade in and slide up animation */
463
+ animation: fadeInSlideUp 0.4s ease-out;
464
+
465
+ @keyframes fadeInSlideUp {
466
+ from {
467
+ opacity: 0;
468
+ transform: translateY(10px);
469
+ }
470
+ to {
471
+ opacity: 1;
472
+ transform: translateY(0);
473
+ }
474
+ }
461
475
  `;
462
476
  var AvatarContainer = styled4.div`
463
477
  flex-shrink: 0;
@@ -473,7 +487,7 @@ var AvatarInitials = styled4.div`
473
487
  width: 32px;
474
488
  height: 32px;
475
489
  border-radius: 50%;
476
- background: linear-gradient(135deg, #8B5CF6 0%, #EC4899 100%);
490
+ background: linear-gradient(135deg, #2CB0AB 0%, #459FB9 100%);
477
491
  color: white;
478
492
  display: flex;
479
493
  align-items: center;
@@ -493,11 +507,13 @@ var ContentContainer = styled4.div`
493
507
  min-width: 0;
494
508
  `;
495
509
  var MessageContent = styled4.div`
496
- background-color: #2c2c2e;
510
+ background-color: rgba(45, 45, 61, 0.7); /* Semi-transparent dark gray with 70% opacity */
511
+ backdrop-filter: blur(10px);
512
+ -webkit-backdrop-filter: blur(10px);
497
513
  padding: 12px 16px;
498
- border-radius: 16px;
514
+ border-radius: 12px; /* Match design tokens */
499
515
  border-top-left-radius: 4px;
500
- color: #e5e5e7;
516
+ color: #FFFFFF; /* White text from design tokens */
501
517
  font-size: 14px;
502
518
  line-height: 1.5;
503
519
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
@@ -509,8 +525,10 @@ var LoadingDots2 = styled4.div`
509
525
  display: flex;
510
526
  gap: 6px;
511
527
  padding: 12px 16px;
512
- background-color: #2c2c2e;
513
- border-radius: 16px;
528
+ background-color: rgba(45, 45, 61, 0.7); /* Match MessageContent with transparency */
529
+ backdrop-filter: blur(10px);
530
+ -webkit-backdrop-filter: blur(10px);
531
+ border-radius: 12px; /* Match design tokens */
514
532
  border-top-left-radius: 4px;
515
533
  width: fit-content;
516
534
  `;
@@ -661,20 +679,136 @@ var FileAttachment = ({
661
679
  }
662
680
  );
663
681
  };
682
+ var Container = styled4.div`
683
+ font-family: ${(props) => props.variant === "code" ? '"SF Mono", Monaco, "Cascadia Code", "Roboto Mono", Consolas, "Courier New", monospace' : '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif'};
684
+ white-space: pre-wrap;
685
+ word-break: break-word;
686
+ line-height: 1.5;
687
+ `;
688
+ var Cursor = styled4.span`
689
+ display: inline-block;
690
+ width: 2px;
691
+ height: 1em;
692
+ background-color: currentColor;
693
+ margin-left: 2px;
694
+ vertical-align: text-bottom;
695
+ animation: blink 1s infinite;
696
+
697
+ @keyframes blink {
698
+ 0%,
699
+ 49% {
700
+ opacity: 1;
701
+ }
702
+ 50%,
703
+ 100% {
704
+ opacity: 0;
705
+ }
706
+ }
707
+ `;
708
+ var StreamingText2 = ({
709
+ content,
710
+ isStreaming = false,
711
+ typingSpeed: _typingSpeed = 50,
712
+ // Not used - streaming shows chunks as they arrive
713
+ cursor = true,
714
+ variant = "default",
715
+ onStreamComplete,
716
+ className
717
+ }) => {
718
+ const [displayedText, setDisplayedText] = useState("");
719
+ useEffect(() => {
720
+ if (isStreaming) {
721
+ setDisplayedText(content);
722
+ return;
723
+ }
724
+ if (!isStreaming && displayedText !== content) {
725
+ setDisplayedText(content);
726
+ if (onStreamComplete) {
727
+ onStreamComplete();
728
+ }
729
+ }
730
+ }, [content, isStreaming, onStreamComplete, displayedText]);
731
+ const showCursor = isStreaming && cursor;
732
+ return /* @__PURE__ */ jsxs(Container, { variant, className, children: [
733
+ displayedText,
734
+ showCursor && /* @__PURE__ */ jsx(Cursor, {})
735
+ ] });
736
+ };
737
+ StreamingText2.displayName = "StreamingText";
664
738
  var AttachmentsContainer = styled4.div`
665
739
  display: flex;
666
740
  flex-direction: column;
667
741
  gap: 8px;
668
742
  margin-top: 12px;
669
743
  `;
744
+ var ActionButton = styled4.button`
745
+ display: inline-flex;
746
+ align-items: center;
747
+ gap: 4px;
748
+ padding: 4px 8px;
749
+ font-size: 12px;
750
+ font-weight: 500;
751
+ color: #9CA3AF;
752
+ background: rgba(255, 255, 255, 0.05);
753
+ border: 1px solid rgba(255, 255, 255, 0.1);
754
+ border-radius: 6px;
755
+ cursor: pointer;
756
+ transition: all 0.15s ease-in-out;
757
+
758
+ &:hover {
759
+ background: rgba(255, 255, 255, 0.1);
760
+ border-color: rgba(255, 255, 255, 0.2);
761
+ color: #FFFFFF;
762
+ }
763
+
764
+ &:active {
765
+ transform: scale(0.98);
766
+ }
767
+ `;
768
+ var ActionsContainer2 = styled4.div`
769
+ display: flex;
770
+ gap: 6px;
771
+ flex-wrap: wrap;
772
+ margin-top: 8px;
773
+ `;
774
+ var MessageTime = styled4.time`
775
+ font-size: 11px;
776
+ color: #6B7280;
777
+ margin-top: 4px;
778
+ display: block;
779
+ `;
780
+ var StreamingIndicator = styled4.span`
781
+ display: inline-block;
782
+ width: 4px;
783
+ height: 4px;
784
+ margin-left: 4px;
785
+ background-color: #459FB9;
786
+ border-radius: 50%;
787
+ animation: pulse 1.5s ease-in-out infinite;
788
+
789
+ @keyframes pulse {
790
+ 0%,
791
+ 100% {
792
+ opacity: 0.3;
793
+ transform: scale(0.8);
794
+ }
795
+ 50% {
796
+ opacity: 1;
797
+ transform: scale(1.2);
798
+ }
799
+ }
800
+ `;
670
801
  var AssistantMessage = ({
671
802
  content = "",
672
803
  avatarUrl,
673
804
  avatarInitials: _avatarInitials = "AI",
674
805
  isLoading = false,
806
+ isStreaming = false,
675
807
  className,
676
808
  attachments = [],
677
- enableMarkdown: _enableMarkdown = false
809
+ enableMarkdown = false,
810
+ timestamp,
811
+ actions = []
678
812
  }) => {
679
813
  const renderContent = () => {
680
814
  if (isLoading) {
@@ -685,8 +819,25 @@ var AssistantMessage = ({
685
819
  ] });
686
820
  }
687
821
  return /* @__PURE__ */ jsxs(Fragment, { children: [
688
- content && /* @__PURE__ */ jsx(MessageContent, { children: content }),
689
- attachments.length > 0 && /* @__PURE__ */ jsx(AttachmentsContainer, { children: attachments.map((attachment, index) => /* @__PURE__ */ jsx(FileAttachment, { ...attachment }, `${attachment.title}-${index}`)) })
822
+ content && /* @__PURE__ */ jsxs(MessageContent, { children: [
823
+ /* @__PURE__ */ jsx(
824
+ StreamingText2,
825
+ {
826
+ content,
827
+ isStreaming,
828
+ typingSpeed: 30,
829
+ cursor: false,
830
+ variant: enableMarkdown ? "markdown" : "default"
831
+ }
832
+ ),
833
+ isStreaming && /* @__PURE__ */ jsx(StreamingIndicator, {})
834
+ ] }),
835
+ attachments.length > 0 && /* @__PURE__ */ jsx(AttachmentsContainer, { children: attachments.map((attachment, index) => /* @__PURE__ */ jsx(FileAttachment, { ...attachment }, `${attachment.title}-${index}`)) }),
836
+ timestamp && /* @__PURE__ */ jsx(MessageTime, { children: timestamp }),
837
+ actions.length > 0 && /* @__PURE__ */ jsx(ActionsContainer2, { children: actions.map((action, index) => /* @__PURE__ */ jsxs(ActionButton, { onClick: action.onClick, children: [
838
+ action.icon,
839
+ action.label
840
+ ] }, index)) })
690
841
  ] });
691
842
  };
692
843
  return /* @__PURE__ */ jsxs(MessageContainer, { className, children: [
@@ -704,11 +855,40 @@ var dotPulse3 = keyframes`
704
855
  transform: scale(1);
705
856
  }
706
857
  `;
707
- var Container = styled4.div`
858
+ var pulse = keyframes`
859
+ 0%, 100% {
860
+ opacity: 0.5;
861
+ transform: scale(1);
862
+ }
863
+ 50% {
864
+ opacity: 1;
865
+ transform: scale(1.2);
866
+ }
867
+ `;
868
+ var wave = keyframes`
869
+ 0%, 40%, 100% {
870
+ transform: translateY(0);
871
+ }
872
+ 20% {
873
+ transform: translateY(-8px);
874
+ }
875
+ `;
876
+ var getSizeValue = (size = "md") => {
877
+ switch (size) {
878
+ case "sm":
879
+ return { padding: "8px 12px", avatar: "32px", icon: "16px", fontSize: "12px", dotSize: "4px" };
880
+ case "lg":
881
+ return { padding: "16px 20px", avatar: "48px", icon: "24px", fontSize: "16px", dotSize: "8px" };
882
+ case "md":
883
+ default:
884
+ return { padding: "12px 16px", avatar: "40px", icon: "20px", fontSize: "14px", dotSize: "6px" };
885
+ }
886
+ };
887
+ var Container2 = styled4.div`
708
888
  display: inline-flex;
709
889
  align-items: center;
710
890
  gap: 12px;
711
- padding: 12px 16px;
891
+ padding: ${(props) => getSizeValue(props.size).padding};
712
892
  background-color: #2c2c2e;
713
893
  border-radius: 16px;
714
894
  box-shadow: none;
@@ -718,19 +898,19 @@ var Container = styled4.div`
718
898
  margin: 0 auto;
719
899
  `;
720
900
  var Avatar2 = styled4.div`
721
- width: 40px;
722
- height: 40px;
901
+ width: ${(props) => getSizeValue(props.size).avatar};
902
+ height: ${(props) => getSizeValue(props.size).avatar};
723
903
  border-radius: 50%;
724
- background: linear-gradient(135deg, #8B5CF6 0%, #EC4899 100%);
904
+ background: linear-gradient(135deg, #1e5a6b 0%, #2a7a8f 100%); /* Darker teal gradient */
725
905
  display: flex;
726
906
  align-items: center;
727
907
  justify-content: center;
728
908
  flex-shrink: 0;
729
- box-shadow: 0 2px 8px rgba(139, 92, 246, 0.3);
909
+ box-shadow: 0 2px 8px rgba(44, 176, 171, 0.3); /* Teal shadow */
730
910
  `;
731
911
  var HeadphonesIcon = styled4.svg`
732
- width: 20px;
733
- height: 20px;
912
+ width: ${(props) => getSizeValue(props.size).icon};
913
+ height: ${(props) => getSizeValue(props.size).icon};
734
914
  color: #FFFFFF;
735
915
  `;
736
916
  var Content = styled4.div`
@@ -741,18 +921,29 @@ var Content = styled4.div`
741
921
  var LoadingDots3 = styled4.div`
742
922
  display: flex;
743
923
  align-items: center;
744
- gap: 4px;
924
+ gap: ${(props) => props.variant === "wave" ? "2px" : "4px"};
745
925
  padding: 0 4px;
746
926
  `;
747
927
  var Dot2 = styled4.span`
748
- width: 6px;
749
- height: 6px;
928
+ width: ${(props) => getSizeValue(props.size).dotSize};
929
+ height: ${(props) => getSizeValue(props.size).dotSize};
750
930
  border-radius: 50%;
751
931
  background-color: #8e8e93;
752
- animation: ${dotPulse3} 1.4s ease-in-out infinite;
932
+ animation: ${(props) => {
933
+ switch (props.variant) {
934
+ case "pulse":
935
+ return pulse;
936
+ case "wave":
937
+ return wave;
938
+ case "dots":
939
+ default:
940
+ return dotPulse3;
941
+ }
942
+ }}
943
+ 1.4s ease-in-out infinite;
753
944
  `;
754
945
  var Message2 = styled4.span`
755
- font-size: 14px;
946
+ font-size: ${(props) => getSizeValue(props.size).fontSize};
756
947
  color: #e5e5e7;
757
948
  font-weight: 400;
758
949
  line-height: 1.5;
@@ -761,26 +952,50 @@ var Message2 = styled4.span`
761
952
  function AssistantThinking({
762
953
  message = "Analyzing data, please wait...",
763
954
  className,
764
- ariaLabel = "Assistant is thinking"
955
+ ariaLabel = "Assistant is thinking",
956
+ variant = "dots",
957
+ size = "md"
765
958
  }) {
766
959
  const containerRef = useRef(null);
960
+ const renderLoadingIndicator = () => {
961
+ switch (variant) {
962
+ case "dots":
963
+ return /* @__PURE__ */ jsxs(LoadingDots3, { "aria-hidden": "true", size, children: [
964
+ /* @__PURE__ */ jsx(Dot2, { style: { animationDelay: "0ms" }, size }),
965
+ /* @__PURE__ */ jsx(Dot2, { style: { animationDelay: "150ms" }, size }),
966
+ /* @__PURE__ */ jsx(Dot2, { style: { animationDelay: "300ms" }, size })
967
+ ] });
968
+ case "pulse":
969
+ return /* @__PURE__ */ jsx(LoadingDots3, { "aria-hidden": "true", size, variant: "pulse", children: /* @__PURE__ */ jsx(Dot2, { style: { animationDelay: "0ms" }, size, variant: "pulse" }) });
970
+ case "wave":
971
+ return /* @__PURE__ */ jsxs(LoadingDots3, { "aria-hidden": "true", size, variant: "wave", children: [
972
+ /* @__PURE__ */ jsx(Dot2, { style: { animationDelay: "0ms" }, size, variant: "wave" }),
973
+ /* @__PURE__ */ jsx(Dot2, { style: { animationDelay: "100ms" }, size, variant: "wave" }),
974
+ /* @__PURE__ */ jsx(Dot2, { style: { animationDelay: "200ms" }, size, variant: "wave" }),
975
+ /* @__PURE__ */ jsx(Dot2, { style: { animationDelay: "300ms" }, size, variant: "wave" }),
976
+ /* @__PURE__ */ jsx(Dot2, { style: { animationDelay: "400ms" }, size, variant: "wave" })
977
+ ] });
978
+ case "text":
979
+ return null;
980
+ // Just show the message with no indicator
981
+ default:
982
+ return null;
983
+ }
984
+ };
767
985
  return /* @__PURE__ */ jsxs(
768
- Container,
986
+ Container2,
769
987
  {
770
988
  ref: containerRef,
771
989
  className,
772
990
  role: "status",
773
991
  "aria-live": "polite",
774
992
  "aria-label": ariaLabel,
993
+ size,
775
994
  children: [
776
- /* @__PURE__ */ jsx(Avatar2, { "aria-hidden": "true", children: /* @__PURE__ */ jsx(HeadphonesIcon, { viewBox: "0 0 24 24", fill: "currentColor", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsx("path", { d: "M17 13a4 4 0 0 1 0 8c-2.142 0-4-1.79-4-4h-2a4 4 0 1 1-.535-2h3.07A4 4 0 0 1 17 13M2 12v-2h2V7a4 4 0 0 1 4-4h8a4 4 0 0 1 4 4v3h2v2z" }) }) }),
995
+ /* @__PURE__ */ jsx(Avatar2, { "aria-hidden": "true", size, children: /* @__PURE__ */ jsx(HeadphonesIcon, { viewBox: "0 0 24 24", fill: "currentColor", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsx("path", { d: "M17 13a4 4 0 0 1 0 8c-2.142 0-4-1.79-4-4h-2a4 4 0 1 1-.535-2h3.07A4 4 0 0 1 17 13M2 12v-2h2V7a4 4 0 0 1 4-4h8a4 4 0 0 1 4 4v3h2v2z" }) }) }),
777
996
  /* @__PURE__ */ jsxs(Content, { children: [
778
- /* @__PURE__ */ jsxs(LoadingDots3, { "aria-hidden": "true", children: [
779
- /* @__PURE__ */ jsx(Dot2, { style: { animationDelay: "0ms" } }),
780
- /* @__PURE__ */ jsx(Dot2, { style: { animationDelay: "150ms" } }),
781
- /* @__PURE__ */ jsx(Dot2, { style: { animationDelay: "300ms" } })
782
- ] }),
783
- /* @__PURE__ */ jsx(Message2, { children: message })
997
+ renderLoadingIndicator(),
998
+ /* @__PURE__ */ jsx(Message2, { size, children: message })
784
999
  ] })
785
1000
  ]
786
1001
  }
@@ -800,12 +1015,9 @@ var AssistantMessageAdapter = ({
800
1015
  // markdownTagRenderers,
801
1016
  // ImageRenderer,
802
1017
  }) => {
803
- if (isLoading) {
1018
+ if (isLoading || isGenerating && !message?.content) {
804
1019
  return /* @__PURE__ */ jsx(AssistantThinking, { message: "Thinking..." });
805
1020
  }
806
- if (isGenerating && !message?.content) {
807
- return /* @__PURE__ */ jsx(AssistantThinking, { message: "Generating response..." });
808
- }
809
1021
  const content = message?.content || "";
810
1022
  const attachments = [];
811
1023
  return /* @__PURE__ */ jsx(
@@ -813,7 +1025,8 @@ var AssistantMessageAdapter = ({
813
1025
  {
814
1026
  content,
815
1027
  avatarInitials: "AI",
816
- isLoading: isGenerating,
1028
+ isLoading: false,
1029
+ isStreaming: isGenerating,
817
1030
  attachments,
818
1031
  enableMarkdown: true
819
1032
  }
@@ -831,7 +1044,6 @@ var StyledUserMessage = styled4.button`
831
1044
  font-size: 14px;
832
1045
  font-weight: 400;
833
1046
  line-height: 1.4;
834
- color: #ffffff;
835
1047
  border: none;
836
1048
  cursor: default;
837
1049
  user-select: none;
@@ -840,34 +1052,37 @@ var StyledUserMessage = styled4.button`
840
1052
  position: relative;
841
1053
  text-align: left;
842
1054
 
843
- /* Pill shape - fully rounded ends */
844
- border-radius: 999px;
845
-
846
- /* Purple to blue gradient (left to right) */
847
- background: linear-gradient(90deg, #8B5CF6 0%, #5B8DEF 100%);
1055
+ /* Force override CopilotKit's default user message styles */
1056
+ && {
1057
+ background: #1C3A4E !important; /* Darker brand blue - darker than secondary */
1058
+ color: #FFFFFF !important; /* White text on dark blue background */
1059
+ border-radius: 999px !important; /* Pill shape - fully rounded ends */
1060
+ }
848
1061
 
849
- /* Subtle shadow and glow effect */
1062
+ /* Subtle shadow and glow effect - darker blue */
850
1063
  box-shadow:
851
- 0 2px 8px rgba(91, 141, 239, 0.25),
852
- 0 1px 3px rgba(139, 92, 246, 0.15);
1064
+ 0 2px 8px rgba(28, 58, 78, 0.25),
1065
+ 0 1px 3px rgba(28, 58, 78, 0.15);
853
1066
 
854
1067
  /* Smooth transitions */
855
1068
  transition: all 0.2s ease-in-out;
856
1069
 
857
- /* Speech bubble tail */
1070
+ /* Speech bubble tail - darker blue to match bubble */
858
1071
  &::after {
859
1072
  content: '';
860
1073
  position: absolute;
861
- bottom: -4px;
862
- right: -6px;
863
- width: 18px;
864
- height: 18px;
865
- background: #5B8DEF;
1074
+ bottom: -6px;
1075
+ right: 12px;
1076
+ width: 14px;
1077
+ height: 14px;
1078
+ background: #1C3A4E !important; /* Force override - darker blue */
866
1079
  transform: rotate(45deg);
867
- border-radius: 0 0 16px 0;
1080
+ border-radius: 0 0 4px 0;
1081
+ clip-path: polygon(0 0, 100% 100%, 0 100%);
868
1082
  box-shadow:
869
- 2px 2px 4px rgba(91, 141, 239, 0.15);
1083
+ 2px 2px 4px rgba(28, 58, 78, 0.15);
870
1084
  transition: all 0.2s ease-in-out;
1085
+ z-index: -1;
871
1086
  }
872
1087
 
873
1088
  /* Hover state - only for button elements */
@@ -875,12 +1090,12 @@ var StyledUserMessage = styled4.button`
875
1090
  transform: translateY(-1px);
876
1091
  cursor: pointer;
877
1092
  box-shadow:
878
- 0 4px 12px rgba(91, 141, 239, 0.35),
879
- 0 2px 6px rgba(139, 92, 246, 0.25);
1093
+ 0 4px 12px rgba(28, 58, 78, 0.35),
1094
+ 0 2px 6px rgba(28, 58, 78, 0.25);
880
1095
 
881
1096
  &::after {
882
1097
  box-shadow:
883
- 3px 3px 6px rgba(91, 141, 239, 0.2);
1098
+ 3px 3px 6px rgba(28, 58, 78, 0.2);
884
1099
  }
885
1100
  }
886
1101
 
@@ -888,24 +1103,24 @@ var StyledUserMessage = styled4.button`
888
1103
  &[role="button"]:active:not(:disabled) {
889
1104
  transform: translateY(0);
890
1105
  box-shadow:
891
- 0 1px 4px rgba(91, 141, 239, 0.2),
892
- 0 1px 2px rgba(139, 92, 246, 0.1);
1106
+ 0 1px 4px rgba(28, 58, 78, 0.2),
1107
+ 0 1px 2px rgba(28, 58, 78, 0.1);
893
1108
 
894
1109
  &::after {
895
1110
  box-shadow:
896
- 1px 1px 2px rgba(91, 141, 239, 0.1);
1111
+ 1px 1px 2px rgba(28, 58, 78, 0.1);
897
1112
  }
898
1113
  }
899
1114
 
900
1115
  ${({ $isPressed }) => $isPressed && css`
901
1116
  transform: translateY(0) scale(0.98);
902
1117
  box-shadow:
903
- 0 1px 4px rgba(91, 141, 239, 0.2),
904
- 0 1px 2px rgba(139, 92, 246, 0.1);
1118
+ 0 1px 4px rgba(28, 58, 78, 0.2),
1119
+ 0 1px 2px rgba(28, 58, 78, 0.1);
905
1120
 
906
1121
  &::after {
907
1122
  box-shadow:
908
- 1px 1px 2px rgba(91, 141, 239, 0.1);
1123
+ 1px 1px 2px rgba(28, 58, 78, 0.1);
909
1124
  }
910
1125
  `}
911
1126
 
@@ -915,12 +1130,12 @@ var StyledUserMessage = styled4.button`
915
1130
  }
916
1131
 
917
1132
  &:focus-visible {
918
- outline: 2px solid #5B8DEF;
1133
+ outline: 2px solid #1C3A4E;
919
1134
  outline-offset: 3px;
920
1135
  box-shadow:
921
- 0 4px 12px rgba(91, 141, 239, 0.35),
922
- 0 2px 6px rgba(139, 92, 246, 0.25),
923
- 0 0 0 3px rgba(91, 141, 239, 0.1);
1136
+ 0 4px 12px rgba(28, 58, 78, 0.35),
1137
+ 0 2px 6px rgba(28, 58, 78, 0.25),
1138
+ 0 0 0 3px rgba(28, 58, 78, 0.1);
924
1139
  }
925
1140
 
926
1141
  /* Disabled state */
@@ -982,6 +1197,20 @@ var UserMessageWrapper = styled4.div`
982
1197
  justify-content: flex-end;
983
1198
  width: 100%;
984
1199
  padding: 8px 0;
1200
+
1201
+ /* Fade in and slide up animation */
1202
+ animation: fadeInSlideUp 0.3s ease-out;
1203
+
1204
+ @keyframes fadeInSlideUp {
1205
+ from {
1206
+ opacity: 0;
1207
+ transform: translateY(10px);
1208
+ }
1209
+ to {
1210
+ opacity: 1;
1211
+ transform: translateY(0);
1212
+ }
1213
+ }
985
1214
  `;
986
1215
  var UserMessageAdapter = ({
987
1216
  message,
@@ -1005,7 +1234,9 @@ var ChatInputContainer = styled4.div`
1005
1234
  flex-direction: column;
1006
1235
  width: 100%;
1007
1236
  padding: 8px;
1008
- background: transparent;
1237
+ background-color: rgba(25, 25, 25, 0.6);
1238
+ backdrop-filter: blur(10px);
1239
+ -webkit-backdrop-filter: blur(10px);
1009
1240
  border-radius: 0;
1010
1241
  box-shadow: none;
1011
1242
  box-sizing: border-box;
@@ -1068,16 +1299,16 @@ var InputWrapper = styled4.div`
1068
1299
  align-items: center;
1069
1300
  gap: 10px;
1070
1301
  padding: 10px 14px;
1071
- background-color: #2c2c2e;
1072
- border: 1px solid #3a3a3c;
1302
+ background-color: rgba(25, 25, 25, 0.4);
1303
+ border: 1px solid rgba(58, 58, 60, 0.3);
1073
1304
  border-radius: 12px;
1074
1305
  transition: all 0.2s ease;
1075
1306
  width: 100%;
1076
1307
  box-sizing: border-box;
1077
1308
 
1078
1309
  &:focus-within {
1079
- border-color: #5B9FFF;
1080
- background-color: #323234;
1310
+ border-color: #2CB0AB; /* Teal brand color */
1311
+ background-color: rgba(50, 50, 52, 0.6);
1081
1312
  }
1082
1313
  `;
1083
1314
  var InputField = styled4.input`
@@ -1164,6 +1395,9 @@ var ChatInput = ({
1164
1395
  },
1165
1396
  inputRef
1166
1397
  );
1398
+ const handleDirectChange = (e) => {
1399
+ setValue(e.target.value);
1400
+ };
1167
1401
  const handleKeyDown = (e) => {
1168
1402
  if (e.key === "Enter") {
1169
1403
  e.preventDefault();
@@ -1180,8 +1414,6 @@ var ChatInput = ({
1180
1414
  const handleSuggestionClick = (suggestionText) => {
1181
1415
  if (onSuggestionSelect && !isDisabled && !isReadOnly) {
1182
1416
  onSuggestionSelect(suggestionText);
1183
- setValue(suggestionText);
1184
- inputRef.current?.focus();
1185
1417
  }
1186
1418
  };
1187
1419
  const canSubmit = currentValue.trim().length > 0 && !isDisabled && !isReadOnly;
@@ -1204,9 +1436,11 @@ var ChatInput = ({
1204
1436
  type: "text",
1205
1437
  placeholder,
1206
1438
  onKeyDown: handleKeyDown,
1439
+ onChange: handleDirectChange,
1207
1440
  autoFocus,
1208
1441
  disabled: isDisabled,
1209
- readOnly: isReadOnly
1442
+ readOnly: isReadOnly,
1443
+ value: currentValue
1210
1444
  }
1211
1445
  ),
1212
1446
  /* @__PURE__ */ jsx(
@@ -1283,11 +1517,39 @@ var InputAdapter = ({
1283
1517
  isVisible = true
1284
1518
  }) => {
1285
1519
  const [value, setValue] = useState("");
1520
+ const [isSubmitting, setIsSubmitting] = useState(false);
1286
1521
  const handleSubmit = async (message) => {
1287
- if (!message.trim() || inProgress) return;
1288
- await onSend(message);
1289
- setValue("");
1522
+ if (!message.trim()) {
1523
+ console.log("[InputAdapter] handleSubmit: empty message, ignoring");
1524
+ return;
1525
+ }
1526
+ setIsSubmitting(true);
1527
+ try {
1528
+ await onSend(message);
1529
+ setValue("");
1530
+ } catch (error) {
1531
+ console.error("[InputAdapter] Error sending message:", error);
1532
+ } finally {
1533
+ setIsSubmitting(false);
1534
+ }
1290
1535
  };
1536
+ const handleSuggestionSelect = async (suggestion) => {
1537
+ if (!suggestion.trim()) {
1538
+ return;
1539
+ }
1540
+ if (inProgress || isSubmitting) {
1541
+ return;
1542
+ }
1543
+ setIsSubmitting(true);
1544
+ try {
1545
+ await onSend(suggestion);
1546
+ } catch (error) {
1547
+ console.error("[InputAdapter] Error sending suggestion:", error);
1548
+ } finally {
1549
+ setIsSubmitting(false);
1550
+ }
1551
+ };
1552
+ const shouldDisableInput = isSubmitting;
1291
1553
  return /* @__PURE__ */ jsx(
1292
1554
  ChatInput,
1293
1555
  {
@@ -1295,7 +1557,7 @@ var InputAdapter = ({
1295
1557
  onChange: setValue,
1296
1558
  onSubmit: handleSubmit,
1297
1559
  placeholder: "Ask, write or search for anything...",
1298
- isDisabled: inProgress,
1560
+ isDisabled: shouldDisableInput,
1299
1561
  autoFocus: isVisible,
1300
1562
  "aria-label": "Chat message input",
1301
1563
  suggestions: [
@@ -1303,10 +1565,7 @@ var InputAdapter = ({
1303
1565
  { text: "Identify actionable tasks" },
1304
1566
  { text: "Summarize key points" }
1305
1567
  ],
1306
- onSuggestionSelect: (suggestion) => {
1307
- setValue(suggestion);
1308
- handleSubmit(suggestion);
1309
- }
1568
+ onSuggestionSelect: handleSuggestionSelect
1310
1569
  }
1311
1570
  );
1312
1571
  };
@@ -1315,14 +1574,16 @@ var HeaderContainer = styled4.header`
1315
1574
  display: flex;
1316
1575
  align-items: center;
1317
1576
  justify-content: space-between;
1318
- padding: 8px;
1319
- background-color: #2c2c2e;
1320
- border-bottom: 1px solid #3a3a3c;
1321
- min-height: 60px;
1577
+ padding: 6px 8px;
1578
+ background-color: rgba(25, 25, 25, 0.6);
1579
+ backdrop-filter: blur(10px);
1580
+ -webkit-backdrop-filter: blur(10px);
1581
+ border-bottom: 1px solid rgba(58, 58, 60, 0.3);
1582
+ min-height: 44px;
1322
1583
  box-sizing: border-box;
1323
1584
 
1324
1585
  @media (min-width: 640px) {
1325
- padding: 12px;
1586
+ padding: 8px 12px;
1326
1587
  }
1327
1588
  `;
1328
1589
  var HeaderContent = styled4.div`
@@ -1361,7 +1622,7 @@ var HeaderActions = styled4.div`
1361
1622
  gap: ${({ theme }) => theme?.spacing?.xs ?? "4px"};
1362
1623
  margin-left: ${({ theme }) => theme?.spacing?.md ?? "16px"};
1363
1624
  `;
1364
- var ActionButton = styled4.button`
1625
+ var ActionButton2 = styled4.button`
1365
1626
  display: inline-flex;
1366
1627
  align-items: center;
1367
1628
  justify-content: center;
@@ -1431,7 +1692,7 @@ var Header = ({
1431
1692
  subtitle && /* @__PURE__ */ jsx(HeaderSubtitle, { children: subtitle })
1432
1693
  ] }),
1433
1694
  /* @__PURE__ */ jsxs(HeaderActions, { children: [
1434
- onMinimize && /* @__PURE__ */ jsx(ActionButton, { ref: minimizeRef, ...minimizeProps, "data-action": "minimize", children: /* @__PURE__ */ jsxs(
1695
+ onMinimize && /* @__PURE__ */ jsx(ActionButton2, { ref: minimizeRef, ...minimizeProps, "data-action": "minimize", children: /* @__PURE__ */ jsxs(
1435
1696
  "svg",
1436
1697
  {
1437
1698
  width: "16",
@@ -1446,7 +1707,7 @@ var Header = ({
1446
1707
  ]
1447
1708
  }
1448
1709
  ) }),
1449
- onClose && /* @__PURE__ */ jsx(ActionButton, { ref: closeRef, ...closeProps, "data-action": "close", children: /* @__PURE__ */ jsxs(
1710
+ onClose && /* @__PURE__ */ jsx(ActionButton2, { ref: closeRef, ...closeProps, "data-action": "close", children: /* @__PURE__ */ jsxs(
1450
1711
  "svg",
1451
1712
  {
1452
1713
  width: "16",
@@ -1466,41 +1727,18 @@ var Header = ({
1466
1727
  ] });
1467
1728
  };
1468
1729
  Header.displayName = "Header";
1469
- var MessagesContainer = styled4.div`
1470
- display: flex;
1471
- flex-direction: column;
1472
- flex: 1;
1473
- overflow: hidden;
1474
- background-color: #1c1c1e;
1475
- padding: 8px;
1476
- gap: 12px;
1477
- box-sizing: border-box;
1478
-
1479
- /* Ensure proper scrolling behavior for child components */
1480
- position: relative;
1481
- min-height: 0;
1482
-
1483
- /* Desktop padding */
1484
- @media (min-width: 640px) {
1485
- padding: 12px;
1486
- }
1487
- `;
1488
- var Messages = ({
1489
- children,
1490
- className,
1491
- ariaLabel = "Messages"
1492
- }) => {
1493
- return /* @__PURE__ */ jsx(MessagesContainer, { className, role: "region", "aria-label": ariaLabel, children });
1494
- };
1495
- Messages.displayName = "Messages";
1496
1730
  var WindowContainer = styled4.div`
1497
1731
  display: flex;
1498
1732
  flex-direction: column;
1499
- background-color: #1c1c1e;
1500
- border-radius: 0;
1501
- box-shadow: none;
1733
+ /* Glassmorphism effect */
1734
+ background: transparent;
1735
+ backdrop-filter: blur(3.8px);
1736
+ -webkit-backdrop-filter: blur(3.8px);
1737
+ border: 1px solid rgba(255, 255, 255, 0.25);
1738
+ border-radius: 16px;
1739
+ box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1);
1502
1740
  overflow: hidden;
1503
- transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1);
1741
+ transition: all 200ms cubic-bezier(0.4, 0, 0.2, 1);
1504
1742
  position: relative;
1505
1743
 
1506
1744
  /* Default dimensions */
@@ -1583,67 +1821,84 @@ var Window = ({
1583
1821
  };
1584
1822
  Window.displayName = "Window";
1585
1823
  var GlobalSidebarStyles = createGlobalStyle`
1586
- /* Override CopilotKit's default positioning - start off-screen */
1824
+ /* Override CopilotKit's default positioning - keep sidebar container in place */
1587
1825
  .copilotKitSidebar {
1588
1826
  position: fixed !important;
1589
- right: -100vw !important;
1827
+ top: 0 !important;
1828
+ right: 0 !important;
1590
1829
  bottom: 0 !important;
1591
- transition: right 0.3s ease !important;
1830
+ left: 0 !important;
1831
+ width: 100vw !important;
1832
+ height: 100vh !important;
1833
+ pointer-events: none !important;
1834
+ z-index: 1001 !important;
1592
1835
  }
1593
1836
 
1594
- /* Move sidebar container into view when expanded */
1837
+ /* Keep sidebar container always visible (the window inside will animate) */
1595
1838
  .copilotKitSidebarContentWrapper.sidebarExpanded .copilotKitSidebar {
1596
- right: 0 !important;
1839
+ pointer-events: auto !important;
1597
1840
  }
1598
1841
 
1599
- /* Mobile-first: Full viewport sidebar */
1600
- .copilotKitSidebar .copilotKitWindow {
1842
+ /* Mobile-first: Glassmorphism sidebar with rounded corners */
1843
+ /* Target the actual dialog element that gets rendered */
1844
+ .copilotKitSidebar [role="dialog"] {
1601
1845
  /* Override CopilotKit defaults for mobile */
1602
1846
  position: fixed !important;
1603
- top: 0 !important;
1604
- right: 0 !important;
1605
- bottom: 0 !important;
1606
- left: auto !important;
1607
- width: 100vw !important;
1608
- height: 100vh !important;
1609
- max-width: 100vw !important;
1610
- max-height: 100vh !important;
1847
+ top: 10px !important;
1848
+ right: 10px !important;
1849
+ /* Reserve space for Android nav buttons - matches NavHorizontal approach */
1850
+ bottom: max(90px, env(safe-area-inset-bottom, 90px)) !important;
1851
+ left: 10px !important;
1852
+ width: calc(100vw - 20px) !important;
1853
+ /* Adjust height to account for bottom safe area */
1854
+ height: calc(100vh - 20px - max(80px, env(safe-area-inset-bottom, 80px))) !important;
1855
+ max-width: calc(100vw - 20px) !important;
1856
+ max-height: calc(100vh - 20px - max(80px, env(safe-area-inset-bottom, 80px))) !important;
1611
1857
  margin: 0 !important;
1612
- border-radius: 0 !important;
1858
+ border-radius: 16px !important;
1613
1859
  z-index: 1001 !important;
1614
1860
 
1615
- /* Hidden by default - translateX(100%) moves it off-screen to the right */
1861
+ /* Glassmorphism effect */
1862
+ background: rgba(255, 255, 255, 0.26) !important;
1863
+ box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1) !important;
1864
+ backdrop-filter: blur(11.1px) !important;
1865
+ -webkit-backdrop-filter: blur(11.1px) !important;
1866
+ border: 1px solid rgba(255, 255, 255, 0.3) !important;
1867
+
1868
+ /* Smooth slide transition */
1869
+ transition: transform 0.3s ease, visibility 0.3s ease, opacity 0.3s ease !important;
1870
+ }
1871
+
1872
+ /* Hidden by default */
1873
+ .copilotKitSidebarContentWrapper:not(.sidebarExpanded) .copilotKitSidebar [role="dialog"] {
1616
1874
  transform: translateX(100%) !important;
1617
1875
  visibility: hidden !important;
1618
1876
  pointer-events: none !important;
1619
1877
  opacity: 0 !important;
1620
- display: none !important;
1621
-
1622
- /* Smooth slide transition */
1623
- transition: transform 0.3s ease, visibility 0.3s ease, opacity 0.3s ease !important;
1624
1878
  }
1625
1879
 
1626
- /* When window has .open class (CopilotKit's native class), show it */
1627
- .copilotKitSidebar .copilotKitWindow.open {
1628
- display: flex !important;
1880
+ /* Visible when expanded */
1881
+ .copilotKitSidebarContentWrapper.sidebarExpanded .copilotKitSidebar [role="dialog"] {
1629
1882
  transform: translateX(0) !important;
1630
1883
  visibility: visible !important;
1631
1884
  pointer-events: auto !important;
1632
1885
  opacity: 1 !important;
1633
1886
  }
1634
1887
 
1635
- /* Desktop: Sidebar panel on the right (640px = CopilotKit's breakpoint) */
1888
+ /* Desktop: Sidebar panel on the right with glassmorphism (640px = CopilotKit's breakpoint) */
1636
1889
  @media (min-width: 640px) {
1637
- .copilotKitSidebar .copilotKitWindow {
1890
+ .copilotKitSidebar [role="dialog"] {
1638
1891
  inset: auto !important;
1639
- top: 0 !important;
1640
- right: 0 !important;
1641
- bottom: 0 !important;
1892
+ top: 10px !important;
1893
+ right: 10px !important;
1894
+ /* Reserve space for Android nav buttons on desktop too */
1895
+ bottom: max(90px, env(safe-area-inset-bottom, 90px)) !important;
1642
1896
  left: auto !important;
1643
1897
  width: 28rem !important;
1644
- height: 100vh !important;
1898
+ /* Adjust height to account for bottom safe area */
1899
+ height: calc(100vh - 20px - max(80px, env(safe-area-inset-bottom, 80px))) !important;
1645
1900
  max-width: 28rem !important;
1646
- max-height: 100vh !important;
1901
+ max-height: calc(100vh - 20px - max(80px, env(safe-area-inset-bottom, 80px))) !important;
1647
1902
  }
1648
1903
  }
1649
1904
 
@@ -1662,17 +1917,74 @@ var GlobalSidebarStyles = createGlobalStyle`
1662
1917
  display: flex !important;
1663
1918
  }
1664
1919
  }
1920
+
1921
+ /* Fix messages container background */
1922
+ .copilotKitMessages {
1923
+ background-color: transparent !important;
1924
+ }
1925
+
1926
+ /* Fade-in animation for new messages */
1927
+ @keyframes messagesFadeIn {
1928
+ from {
1929
+ opacity: 0;
1930
+ transform: translateY(8px);
1931
+ }
1932
+ to {
1933
+ opacity: 1;
1934
+ transform: translateY(0);
1935
+ }
1936
+ }
1937
+
1938
+ .copilotKitMessage {
1939
+ animation: messagesFadeIn 0.3s ease-out;
1940
+ }
1941
+
1942
+ /* Override CopilotKit suggestions to be single-row with horizontal scroll */
1943
+ div[role="list"][aria-label*="Suggested"] {
1944
+ display: flex !important;
1945
+ flex-wrap: nowrap !important; /* Force single row */
1946
+ gap: 8px !important;
1947
+ padding: 4px 0 !important;
1948
+
1949
+ /* Horizontal scrolling */
1950
+ overflow-x: auto !important;
1951
+ overflow-y: hidden !important;
1952
+
1953
+ /* Smooth scrolling */
1954
+ -webkit-overflow-scrolling: touch;
1955
+ scroll-behavior: smooth;
1956
+
1957
+ /* Fixed height for one suggestion */
1958
+ max-height: 40px !important;
1959
+ min-height: 40px !important;
1960
+ align-items: center !important;
1961
+
1962
+ /* Hide scrollbar */
1963
+ scrollbar-width: none !important;
1964
+ -ms-overflow-style: none !important;
1965
+
1966
+ &::-webkit-scrollbar {
1967
+ display: none !important;
1968
+ }
1969
+ }
1970
+
1971
+ /* Ensure suggestion buttons don't wrap or shrink */
1972
+ div[role="list"][aria-label*="Suggested"] button {
1973
+ flex-shrink: 0 !important;
1974
+ white-space: nowrap !important;
1975
+ }
1665
1976
  `;
1666
1977
  var StyledChatButton = styled4.button`
1667
1978
  position: fixed;
1668
- bottom: 8px;
1979
+ /* Position above the bottom nav bar - matches NavHorizontal safe area */
1980
+ bottom: max(88px, calc(env(safe-area-inset-bottom, 80px) + 8px));
1669
1981
  right: 8px;
1670
1982
  width: 36px;
1671
1983
  height: 36px;
1672
1984
  border-radius: 18px;
1673
1985
  border: none;
1674
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
1675
- box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);
1986
+ background: linear-gradient(135deg, #2CB0AB 0%, #459FB9 100%);
1987
+ box-shadow: 0 4px 12px rgba(44, 176, 171, 0.4);
1676
1988
  display: flex;
1677
1989
  align-items: center;
1678
1990
  justify-content: center;
@@ -1682,7 +1994,7 @@ var StyledChatButton = styled4.button`
1682
1994
 
1683
1995
  &:hover {
1684
1996
  transform: scale(1.05);
1685
- box-shadow: 0 6px 16px rgba(102, 126, 234, 0.5);
1997
+ box-shadow: 0 6px 16px rgba(44, 176, 171, 0.5);
1686
1998
  }
1687
1999
 
1688
2000
  &:active {
@@ -1708,23 +2020,11 @@ function CustomCopilotSidebar({
1708
2020
  setOpen(false);
1709
2021
  onSetOpen?.(false);
1710
2022
  };
1711
- return /* @__PURE__ */ jsx(Header, { title: "AI Assistant", subtitle: "How can I help you today?", onClose: handleClose });
2023
+ return /* @__PURE__ */ jsx(Header, { title: "AI Assistant", onClose: handleClose });
1712
2024
  };
1713
2025
  const WindowAdapterLocal = (props) => {
1714
2026
  return /* @__PURE__ */ jsx(Window, { children: props.children });
1715
2027
  };
1716
- const MessagesAdapter = (props) => {
1717
- return /* @__PURE__ */ jsx(Messages, { children: props.messages.map((message, index) => /* @__PURE__ */ jsx(
1718
- props.RenderMessage,
1719
- {
1720
- message,
1721
- inProgress: props.inProgress,
1722
- index,
1723
- isCurrentMessage: index === props.messages.length - 1
1724
- },
1725
- message.id || `message-${index}`
1726
- )) });
1727
- };
1728
2028
  const CustomButton = (_props) => {
1729
2029
  const { open, setOpen } = useChatContext();
1730
2030
  const handleClick = () => {
@@ -1767,7 +2067,6 @@ function CustomCopilotSidebar({
1767
2067
  Input: InputAdapter,
1768
2068
  Header: HeaderAdapterWithClose,
1769
2069
  Window: WindowAdapterLocal,
1770
- Messages: MessagesAdapter,
1771
2070
  Button: CustomButton,
1772
2071
  instructions,
1773
2072
  labels: {
@@ -1882,18 +2181,20 @@ var InputWrapper2 = styled4.div`
1882
2181
  align-items: flex-end;
1883
2182
  gap: 8px;
1884
2183
  padding: 12px;
1885
- background-color: #ffffff;
1886
- border: 1px solid #e5e7eb;
2184
+ background-color: rgba(25, 25, 25, 0.6);
2185
+ backdrop-filter: blur(10px);
2186
+ -webkit-backdrop-filter: blur(10px);
2187
+ border: 1px solid rgba(58, 58, 60, 0.3);
1887
2188
  border-radius: 12px;
1888
2189
  transition: all 0.2s ease;
1889
2190
 
1890
2191
  &:focus-within {
1891
- border-color: #3b82f6;
1892
- box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
2192
+ border-color: #2CB0AB;
2193
+ box-shadow: 0 0 0 3px rgba(44, 176, 171, 0.1);
1893
2194
  }
1894
2195
 
1895
2196
  &:hover:not(:focus-within) {
1896
- border-color: #d1d5db;
2197
+ border-color: rgba(58, 58, 60, 0.5);
1897
2198
  }
1898
2199
  `;
1899
2200
  var TextArea = styled4.textarea`
@@ -1908,12 +2209,12 @@ var TextArea = styled4.textarea`
1908
2209
  'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
1909
2210
  font-size: 14px;
1910
2211
  line-height: 24px;
1911
- color: #111827;
2212
+ color: #FFFFFF;
1912
2213
  background: transparent;
1913
2214
  overflow-y: auto;
1914
2215
 
1915
2216
  &::placeholder {
1916
- color: #9ca3af;
2217
+ color: #8e8e93;
1917
2218
  }
1918
2219
 
1919
2220
  &:disabled {
@@ -1952,14 +2253,14 @@ var SendButton = styled4.button`
1952
2253
  padding: 0;
1953
2254
  border: none;
1954
2255
  border-radius: 8px;
1955
- background-color: ${(props) => props.disabled ? "#e5e7eb" : "#3b82f6"};
1956
- color: ${(props) => props.disabled ? "#9ca3af" : "#ffffff"};
2256
+ background-color: ${(props) => props.disabled ? "rgba(229, 231, 235, 0.3)" : "#2CB0AB"};
2257
+ color: ${(props) => props.disabled ? "#6B7280" : "#ffffff"};
1957
2258
  cursor: ${(props) => props.disabled ? "not-allowed" : "pointer"};
1958
2259
  transition: all 0.2s ease;
1959
2260
  flex-shrink: 0;
1960
2261
 
1961
2262
  &:hover:not(:disabled) {
1962
- background-color: #2563eb;
2263
+ background-color: #459FB9;
1963
2264
  transform: translateY(-1px);
1964
2265
  }
1965
2266
 
@@ -1968,7 +2269,7 @@ var SendButton = styled4.button`
1968
2269
  }
1969
2270
 
1970
2271
  &:focus-visible {
1971
- outline: 2px solid #3b82f6;
2272
+ outline: 2px solid #2CB0AB;
1972
2273
  outline-offset: 2px;
1973
2274
  }
1974
2275
 
@@ -2073,6 +2374,34 @@ var Input = ({
2073
2374
  )
2074
2375
  ] }) });
2075
2376
  };
2377
+ var MessagesContainer = styled4.div`
2378
+ display: flex;
2379
+ flex-direction: column;
2380
+ flex: 1;
2381
+ overflow: hidden;
2382
+ /* Gradient background with subtle purple accent */
2383
+ background-image: linear-gradient(to right bottom, #302c4c, #26273d, #1e202d, #191a1e, #171a21, #141a24, #0f1b27, #081b2a, #081b2a, #081b2a);
2384
+ padding: 8px;
2385
+ gap: 12px;
2386
+ box-sizing: border-box;
2387
+
2388
+ /* Ensure proper scrolling behavior for child components */
2389
+ position: relative;
2390
+ min-height: 0;
2391
+
2392
+ /* Desktop padding */
2393
+ @media (min-width: 640px) {
2394
+ padding: 12px;
2395
+ }
2396
+ `;
2397
+ var Messages = ({
2398
+ children,
2399
+ className,
2400
+ ariaLabel = "Messages"
2401
+ }) => {
2402
+ return /* @__PURE__ */ jsx(MessagesContainer, { className, role: "region", "aria-label": ariaLabel, children });
2403
+ };
2404
+ Messages.displayName = "Messages";
2076
2405
  var MessagesListContainer = styled4.div`
2077
2406
  display: flex;
2078
2407
  flex-direction: column;
@@ -2242,22 +2571,15 @@ var MessageBubble = styled4.div`
2242
2571
  flex-direction: column;
2243
2572
  max-width: 70%;
2244
2573
  padding: 12px 16px;
2245
- border-radius: 18px 18px 4px 18px;
2574
+ border-radius: 12px; /* Consistent rounded corners, no tail */
2246
2575
 
2247
- /* User message colors - distinct from assistant messages */
2248
- background-color: #007AFF;
2249
- color: #FFFFFF;
2250
-
2251
- /* Box shadow for depth */
2252
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
2576
+ /* User message colors - dark blue from brand */
2577
+ background: #264E68; /* Deep Blue from brand tokens */
2578
+ color: #FFFFFF; /* White text for better contrast on dark background */
2253
2579
 
2254
2580
  /* Smooth transitions */
2255
2581
  transition: all 0.2s ease-in-out;
2256
2582
 
2257
- &:hover {
2258
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
2259
- }
2260
-
2261
2583
  /* Username styling */
2262
2584
  strong {
2263
2585
  font-size: 12px;
@@ -2273,40 +2595,127 @@ var MessageContent2 = styled4.p`
2273
2595
  word-wrap: break-word;
2274
2596
  white-space: pre-wrap;
2275
2597
  `;
2276
- var MessageTime = styled4.time`
2598
+ var MessageTime2 = styled4.time`
2277
2599
  font-size: 11px;
2278
2600
  opacity: 0.7;
2279
2601
  margin-top: 4px;
2280
2602
  text-align: right;
2281
2603
  `;
2604
+ var ActionButton3 = styled4.button`
2605
+ display: inline-flex;
2606
+ align-items: center;
2607
+ gap: 4px;
2608
+ padding: 4px 8px;
2609
+ margin-top: 8px;
2610
+ font-size: 12px;
2611
+ font-weight: 500;
2612
+ color: rgba(0, 0, 0, 0.7);
2613
+ background: rgba(255, 255, 255, 0.3);
2614
+ border: 1px solid rgba(0, 0, 0, 0.1);
2615
+ border-radius: 6px;
2616
+ cursor: pointer;
2617
+ transition: all 0.15s ease-in-out;
2618
+
2619
+ &:hover {
2620
+ background: rgba(255, 255, 255, 0.5);
2621
+ border-color: rgba(0, 0, 0, 0.2);
2622
+ }
2623
+
2624
+ &:active {
2625
+ transform: scale(0.98);
2626
+ }
2627
+ `;
2628
+ var ActionsContainer3 = styled4.div`
2629
+ display: flex;
2630
+ gap: 6px;
2631
+ flex-wrap: wrap;
2632
+ `;
2633
+ var StreamingIndicator2 = styled4.span`
2634
+ display: inline-block;
2635
+ width: 4px;
2636
+ height: 4px;
2637
+ margin-left: 4px;
2638
+ background-color: rgba(0, 0, 0, 0.5);
2639
+ border-radius: 50%;
2640
+ animation: pulse 1.5s ease-in-out infinite;
2641
+
2642
+ @keyframes pulse {
2643
+ 0%,
2644
+ 100% {
2645
+ opacity: 0.3;
2646
+ transform: scale(0.8);
2647
+ }
2648
+ 50% {
2649
+ opacity: 1;
2650
+ transform: scale(1.2);
2651
+ }
2652
+ }
2653
+ `;
2654
+ var Avatar3 = styled4.img`
2655
+ width: 32px;
2656
+ height: 32px;
2657
+ border-radius: 50%;
2658
+ margin-left: 8px;
2659
+ object-fit: cover;
2660
+ border: 2px solid rgba(216, 180, 254, 0.3);
2661
+ `;
2282
2662
  var UserMessage2 = ({
2283
2663
  content,
2284
2664
  timestamp,
2285
2665
  className,
2286
2666
  avatarUrl,
2287
- username
2667
+ username,
2668
+ isStreaming = false,
2669
+ actions = []
2288
2670
  }) => {
2289
2671
  return /* @__PURE__ */ jsxs(StyledUserMessage2, { className, children: [
2290
2672
  /* @__PURE__ */ jsxs(MessageBubble, { children: [
2291
2673
  username && /* @__PURE__ */ jsx("strong", { children: username }),
2292
- /* @__PURE__ */ jsx(MessageContent2, { children: content }),
2293
- timestamp && /* @__PURE__ */ jsx(MessageTime, { children: timestamp })
2674
+ /* @__PURE__ */ jsxs(MessageContent2, { children: [
2675
+ content,
2676
+ isStreaming && /* @__PURE__ */ jsx(StreamingIndicator2, {})
2677
+ ] }),
2678
+ timestamp && /* @__PURE__ */ jsx(MessageTime2, { children: timestamp }),
2679
+ actions.length > 0 && /* @__PURE__ */ jsx(ActionsContainer3, { children: actions.map((action, index) => /* @__PURE__ */ jsxs(ActionButton3, { onClick: action.onClick, children: [
2680
+ action.icon,
2681
+ action.label
2682
+ ] }, index)) })
2294
2683
  ] }),
2295
- avatarUrl && /* @__PURE__ */ jsx(
2296
- "img",
2297
- {
2298
- src: avatarUrl,
2299
- alt: username || "User",
2300
- style: { width: "32px", height: "32px", borderRadius: "50%", marginLeft: "8px" }
2301
- }
2302
- )
2684
+ avatarUrl && /* @__PURE__ */ jsx(Avatar3, { src: avatarUrl, alt: username || "User" })
2303
2685
  ] });
2304
2686
  };
2305
2687
  var SuggestionsContainer = styled4.div`
2306
2688
  display: flex;
2307
- flex-wrap: wrap;
2689
+ flex-wrap: nowrap; /* Single row */
2308
2690
  gap: ${({ theme }) => theme?.spacing?.sm ?? "8px"};
2309
- padding: ${({ theme }) => theme?.spacing?.md ?? "16px"} 0;
2691
+
2692
+ /* Reduced padding for tighter height */
2693
+ padding: ${({ theme }) => theme?.spacing?.xs ?? "4px"} 0;
2694
+
2695
+ /* Horizontal scrolling */
2696
+ overflow-x: auto;
2697
+ overflow-y: hidden;
2698
+
2699
+ /* Smooth scrolling on mobile */
2700
+ -webkit-overflow-scrolling: touch;
2701
+ scroll-behavior: smooth;
2702
+
2703
+ /* Align items to ensure single-row height */
2704
+ align-items: center;
2705
+
2706
+ /* Constrain to exact height of buttons + minimal padding */
2707
+ /* Button height: ~14px font + 16px padding + 2px border = ~32px */
2708
+ /* Add small padding: 8px total = 40px */
2709
+ max-height: 40px;
2710
+ min-height: 40px;
2711
+
2712
+ /* Hide scrollbar but keep functionality */
2713
+ scrollbar-width: none; /* Firefox */
2714
+ -ms-overflow-style: none; /* IE/Edge */
2715
+
2716
+ &::-webkit-scrollbar {
2717
+ display: none; /* Chrome/Safari/Opera */
2718
+ }
2310
2719
  `;
2311
2720
  var StyledSuggestion = styled4.button`
2312
2721
  /* Base styles */
@@ -2325,6 +2734,7 @@ var StyledSuggestion = styled4.button`
2325
2734
  transition: all 0.2s ease-in-out;
2326
2735
  white-space: nowrap;
2327
2736
  user-select: none;
2737
+ flex-shrink: 0; /* Prevent shrinking to maintain size */
2328
2738
 
2329
2739
  /* Hover state */
2330
2740
  &:hover:not(:disabled) {
@@ -2380,6 +2790,324 @@ function SuggestionChip({ suggestion, onSelect }) {
2380
2790
  return /* @__PURE__ */ jsx(StyledSuggestion, { ...buttonProps, ref, $isPressed: isPressed, role: "listitem", children: suggestion });
2381
2791
  }
2382
2792
  Suggestions.displayName = "Suggestions";
2793
+ var ErrorContainer = styled4.div`
2794
+ display: flex;
2795
+ align-items: flex-start;
2796
+ gap: 12px;
2797
+ padding: ${(props) => props.variant === "banner" ? "16px" : "12px 16px"};
2798
+ background-color: ${(props) => props.variant === "banner" ? "rgba(239, 68, 68, 0.1)" : "rgba(239, 68, 68, 0.05)"};
2799
+ border: 1px solid rgba(239, 68, 68, 0.3);
2800
+ border-radius: ${(props) => props.variant === "banner" ? "8px" : "12px"};
2801
+ color: #FFFFFF;
2802
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',
2803
+ 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
2804
+ margin: 8px 0;
2805
+ width: ${(props) => props.variant === "banner" ? "100%" : "auto"};
2806
+ max-width: ${(props) => props.variant === "banner" ? "100%" : "600px"};
2807
+ `;
2808
+ var IconContainer = styled4.div`
2809
+ flex-shrink: 0;
2810
+ width: 20px;
2811
+ height: 20px;
2812
+ color: #EF4444;
2813
+ `;
2814
+ var ErrorIcon = () => /* @__PURE__ */ jsx(
2815
+ "svg",
2816
+ {
2817
+ xmlns: "http://www.w3.org/2000/svg",
2818
+ viewBox: "0 0 24 24",
2819
+ fill: "currentColor",
2820
+ width: "20",
2821
+ height: "20",
2822
+ children: /* @__PURE__ */ jsx("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z" })
2823
+ }
2824
+ );
2825
+ var Content2 = styled4.div`
2826
+ flex: 1;
2827
+ display: flex;
2828
+ flex-direction: column;
2829
+ gap: 8px;
2830
+ `;
2831
+ var ErrorMessage = styled4.div`
2832
+ font-size: 14px;
2833
+ line-height: 1.5;
2834
+ color: #FFFFFF;
2835
+ `;
2836
+ var ErrorDetails = styled4.div`
2837
+ font-size: 12px;
2838
+ line-height: 1.4;
2839
+ color: #9CA3AF;
2840
+ margin-top: 4px;
2841
+ `;
2842
+ var Actions2 = styled4.div`
2843
+ display: flex;
2844
+ gap: 8px;
2845
+ margin-top: 8px;
2846
+ `;
2847
+ var Button2 = styled4.button`
2848
+ display: inline-flex;
2849
+ align-items: center;
2850
+ gap: 6px;
2851
+ padding: 6px 12px;
2852
+ font-size: 13px;
2853
+ font-weight: 500;
2854
+ color: ${(props) => props.variant === "primary" ? "#FFFFFF" : "#9CA3AF"};
2855
+ background: ${(props) => props.variant === "primary" ? "#EF4444" : "rgba(255, 255, 255, 0.05)"};
2856
+ border: 1px solid
2857
+ ${(props) => props.variant === "primary" ? "#EF4444" : "rgba(255, 255, 255, 0.1)"};
2858
+ border-radius: 6px;
2859
+ cursor: pointer;
2860
+ transition: all 0.15s ease-in-out;
2861
+
2862
+ &:hover {
2863
+ background: ${(props) => props.variant === "primary" ? "#DC2626" : "rgba(255, 255, 255, 0.1)"};
2864
+ border-color: ${(props) => props.variant === "primary" ? "#DC2626" : "rgba(255, 255, 255, 0.2)"};
2865
+ }
2866
+
2867
+ &:active {
2868
+ transform: scale(0.98);
2869
+ }
2870
+
2871
+ &:disabled {
2872
+ opacity: 0.5;
2873
+ cursor: not-allowed;
2874
+ }
2875
+ `;
2876
+ var CloseButton = styled4.button`
2877
+ flex-shrink: 0;
2878
+ width: 24px;
2879
+ height: 24px;
2880
+ padding: 0;
2881
+ display: flex;
2882
+ align-items: center;
2883
+ justify-content: center;
2884
+ background: transparent;
2885
+ border: none;
2886
+ color: #9CA3AF;
2887
+ cursor: pointer;
2888
+ border-radius: 4px;
2889
+ transition: all 0.15s ease-in-out;
2890
+
2891
+ &:hover {
2892
+ background: rgba(255, 255, 255, 0.1);
2893
+ color: #FFFFFF;
2894
+ }
2895
+
2896
+ &:active {
2897
+ transform: scale(0.95);
2898
+ }
2899
+ `;
2900
+ var CloseIcon = () => /* @__PURE__ */ jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", width: "16", height: "16", children: /* @__PURE__ */ jsx("path", { d: "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" }) });
2901
+ var StreamErrorMessage = ({
2902
+ error,
2903
+ variant = "inline",
2904
+ retryable = false,
2905
+ onRetry,
2906
+ onDismiss,
2907
+ details,
2908
+ className
2909
+ }) => {
2910
+ const errorMessage = typeof error === "string" ? error : error.message;
2911
+ return /* @__PURE__ */ jsxs(ErrorContainer, { variant, className, role: "alert", "aria-live": "assertive", children: [
2912
+ /* @__PURE__ */ jsx(IconContainer, { "aria-hidden": "true", children: /* @__PURE__ */ jsx(ErrorIcon, {}) }),
2913
+ /* @__PURE__ */ jsxs(Content2, { children: [
2914
+ /* @__PURE__ */ jsx(ErrorMessage, { children: errorMessage }),
2915
+ details && /* @__PURE__ */ jsx(ErrorDetails, { children: details }),
2916
+ (retryable || onDismiss) && /* @__PURE__ */ jsxs(Actions2, { children: [
2917
+ retryable && onRetry && /* @__PURE__ */ jsx(Button2, { variant: "primary", onClick: onRetry, children: "Retry" }),
2918
+ onDismiss && /* @__PURE__ */ jsx(Button2, { variant: "secondary", onClick: onDismiss, children: "Dismiss" })
2919
+ ] })
2920
+ ] }),
2921
+ onDismiss && /* @__PURE__ */ jsx(CloseButton, { onClick: onDismiss, "aria-label": "Dismiss error", children: /* @__PURE__ */ jsx(CloseIcon, {}) })
2922
+ ] });
2923
+ };
2924
+ StreamErrorMessage.displayName = "StreamErrorMessage";
2925
+ var pulse2 = keyframes`
2926
+ 0%, 100% {
2927
+ opacity: 1;
2928
+ transform: scale(1);
2929
+ }
2930
+ 50% {
2931
+ opacity: 0.6;
2932
+ transform: scale(1.1);
2933
+ }
2934
+ `;
2935
+ var Container3 = styled4.div`
2936
+ display: inline-flex;
2937
+ align-items: center;
2938
+ gap: ${(props) => {
2939
+ switch (props.size) {
2940
+ case "sm":
2941
+ return "4px";
2942
+ case "lg":
2943
+ return "8px";
2944
+ case "md":
2945
+ default:
2946
+ return "6px";
2947
+ }
2948
+ }};
2949
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',
2950
+ 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
2951
+ `;
2952
+ var StatusDot = styled4.div`
2953
+ width: ${(props) => {
2954
+ if (props.variant === "badge") {
2955
+ switch (props.size) {
2956
+ case "sm":
2957
+ return "6px";
2958
+ case "lg":
2959
+ return "10px";
2960
+ case "md":
2961
+ default:
2962
+ return "8px";
2963
+ }
2964
+ }
2965
+ switch (props.size) {
2966
+ case "sm":
2967
+ return "6px";
2968
+ case "lg":
2969
+ return "12px";
2970
+ case "md":
2971
+ default:
2972
+ return "8px";
2973
+ }
2974
+ }};
2975
+ height: ${(props) => {
2976
+ if (props.variant === "badge") {
2977
+ switch (props.size) {
2978
+ case "sm":
2979
+ return "6px";
2980
+ case "lg":
2981
+ return "10px";
2982
+ case "md":
2983
+ default:
2984
+ return "8px";
2985
+ }
2986
+ }
2987
+ switch (props.size) {
2988
+ case "sm":
2989
+ return "6px";
2990
+ case "lg":
2991
+ return "12px";
2992
+ case "md":
2993
+ default:
2994
+ return "8px";
2995
+ }
2996
+ }};
2997
+ border-radius: 50%;
2998
+ background-color: ${(props) => {
2999
+ switch (props.status) {
3000
+ case "connected":
3001
+ return "#10B981";
3002
+ // Green
3003
+ case "streaming":
3004
+ return "#3B82F6";
3005
+ // Blue
3006
+ case "disconnected":
3007
+ return "#EF4444";
3008
+ // Red
3009
+ case "reconnecting":
3010
+ return "#F59E0B";
3011
+ }
3012
+ }};
3013
+ animation: ${(props) => props.status === "streaming" ? pulse2 : "none"} 2s ease-in-out infinite;
3014
+ flex-shrink: 0;
3015
+ `;
3016
+ var Label = styled4.span`
3017
+ font-size: ${(props) => {
3018
+ if (props.variant === "badge") {
3019
+ switch (props.size) {
3020
+ case "sm":
3021
+ return "11px";
3022
+ case "lg":
3023
+ return "15px";
3024
+ case "md":
3025
+ default:
3026
+ return "13px";
3027
+ }
3028
+ }
3029
+ switch (props.size) {
3030
+ case "sm":
3031
+ return "12px";
3032
+ case "lg":
3033
+ return "16px";
3034
+ case "md":
3035
+ default:
3036
+ return "14px";
3037
+ }
3038
+ }};
3039
+ font-weight: ${(props) => props.variant === "badge" ? "500" : "400"};
3040
+ color: #9CA3AF;
3041
+ line-height: 1.4;
3042
+ `;
3043
+ var BadgeContainer = styled4.div`
3044
+ display: inline-flex;
3045
+ align-items: center;
3046
+ gap: ${(props) => {
3047
+ switch (props.size) {
3048
+ case "sm":
3049
+ return "4px";
3050
+ case "lg":
3051
+ return "8px";
3052
+ case "md":
3053
+ default:
3054
+ return "6px";
3055
+ }
3056
+ }};
3057
+ padding: ${(props) => {
3058
+ switch (props.size) {
3059
+ case "sm":
3060
+ return "4px 8px";
3061
+ case "lg":
3062
+ return "8px 16px";
3063
+ case "md":
3064
+ default:
3065
+ return "6px 12px";
3066
+ }
3067
+ }};
3068
+ background-color: rgba(255, 255, 255, 0.05);
3069
+ border: 1px solid rgba(255, 255, 255, 0.1);
3070
+ border-radius: ${(props) => {
3071
+ switch (props.size) {
3072
+ case "sm":
3073
+ return "4px";
3074
+ case "lg":
3075
+ return "8px";
3076
+ case "md":
3077
+ default:
3078
+ return "6px";
3079
+ }
3080
+ }};
3081
+ `;
3082
+ var getStatusLabel = (status) => {
3083
+ switch (status) {
3084
+ case "connected":
3085
+ return "Connected";
3086
+ case "streaming":
3087
+ return "Streaming";
3088
+ case "disconnected":
3089
+ return "Disconnected";
3090
+ case "reconnecting":
3091
+ return "Reconnecting...";
3092
+ }
3093
+ };
3094
+ var StreamStatusIndicator = ({
3095
+ status,
3096
+ variant = "dot",
3097
+ size = "md",
3098
+ showLabel = false,
3099
+ className
3100
+ }) => {
3101
+ const content = /* @__PURE__ */ jsxs(Fragment, { children: [
3102
+ /* @__PURE__ */ jsx(StatusDot, { status, size, variant, "aria-hidden": "true" }),
3103
+ showLabel && /* @__PURE__ */ jsx(Label, { size, variant, children: getStatusLabel(status) })
3104
+ ] });
3105
+ if (variant === "badge") {
3106
+ return /* @__PURE__ */ jsx(BadgeContainer, { size, className, role: "status", "aria-label": getStatusLabel(status), children: content });
3107
+ }
3108
+ return /* @__PURE__ */ jsx(Container3, { size, className, role: "status", "aria-label": getStatusLabel(status), children: content });
3109
+ };
3110
+ StreamStatusIndicator.displayName = "StreamStatusIndicator";
2383
3111
  var GlobalSidebarStyles2 = createGlobalStyle`
2384
3112
  /* Override CopilotKit's default positioning - start off-screen */
2385
3113
  .copilotKitSidebar {
@@ -2619,6 +3347,6 @@ var CustomCopilotSidebar2 = ({
2619
3347
  };
2620
3348
  CustomCopilotSidebar2.displayName = "CustomCopilotSidebar";
2621
3349
 
2622
- export { Actions, AgentState, AssistantMessage, AssistantMessageAdapter, Button, CustomCopilotSidebar, FileAttachment, Footer, Header, Input, InputAdapter, CustomCopilotSidebar2 as IntegratedSidebar, Messages, MessagesList, MessagesListContainer, MessagesListContent, Response, Suggestions, UserMessage2 as UserMessage, UserMessageAdapter, Window };
3350
+ export { Actions, AgentState, AssistantMessage, AssistantMessageAdapter, Button, CustomCopilotSidebar, FileAttachment, Footer, Header, Input, InputAdapter, CustomCopilotSidebar2 as IntegratedSidebar, Messages, MessagesList, MessagesListContainer, MessagesListContent, Response, StreamErrorMessage, StreamStatusIndicator, StreamingText2 as StreamingText, Suggestions, UserMessage2 as UserMessage, UserMessageAdapter, Window };
2623
3351
  //# sourceMappingURL=index.js.map
2624
3352
  //# sourceMappingURL=index.js.map