@agentiffai/design 0.1.5 → 0.1.7

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 (43) 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 +974 -222
  4. package/dist/copilotkit/index.cjs.map +1 -1
  5. package/dist/copilotkit/index.d.cts +10 -2
  6. package/dist/copilotkit/index.d.ts +10 -2
  7. package/dist/copilotkit/index.js +972 -223
  8. package/dist/copilotkit/index.js.map +1 -1
  9. package/dist/index.cjs +1829 -175
  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 +1822 -176
  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 +15 -3
  34. package/public/assets/avatar-transparent-bg.png +0 -0
  35. package/public/assets/icon-set/Icon-arrow-left-fill.svg +1 -0
  36. package/public/assets/icon-set/Icon-check-fill.svg +3 -0
  37. package/public/assets/icon-set/Icon-close-fill.svg +3 -0
  38. package/public/assets/icon-set/Icon-hourglass-line.svg +3 -0
  39. package/public/assets/icon-set/Icon-loader-2-line.svg +3 -0
  40. package/public/assets/icon-set/Icon-radio-button-line.svg +3 -0
  41. package/public/assets/icon-set/Icon-shield-check-fill.svg +3 -0
  42. package/public/assets/icon-set/Icon-shield-cross-fill.svg +3 -0
  43. 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;
@@ -467,25 +481,24 @@ var Avatar = styled4.img`
467
481
  height: 32px;
468
482
  border-radius: 50%;
469
483
  object-fit: cover;
470
- background-color: #e5e7eb;
484
+ background-color: transparent;
471
485
  `;
472
486
  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%);
477
- color: white;
490
+ overflow: hidden;
478
491
  display: flex;
479
492
  align-items: center;
480
493
  justify-content: center;
481
- font-size: 12px;
482
- font-weight: 600;
483
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
484
- 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
494
+ background-color: #1e3a5f; /* Dark blue background */
495
+ padding: 4px; /* Make the avatar image smaller inside the circle */
496
+ box-sizing: border-box;
485
497
 
486
- svg {
487
- width: 18px;
488
- height: 18px;
498
+ img {
499
+ width: 100%;
500
+ height: 100%;
501
+ object-fit: contain;
489
502
  }
490
503
  `;
491
504
  var ContentContainer = styled4.div`
@@ -493,11 +506,13 @@ var ContentContainer = styled4.div`
493
506
  min-width: 0;
494
507
  `;
495
508
  var MessageContent = styled4.div`
496
- background-color: #2c2c2e;
509
+ background-color: rgba(45, 45, 61, 0.7); /* Semi-transparent dark gray with 70% opacity */
510
+ backdrop-filter: blur(10px);
511
+ -webkit-backdrop-filter: blur(10px);
497
512
  padding: 12px 16px;
498
- border-radius: 16px;
513
+ border-radius: 12px; /* Match design tokens */
499
514
  border-top-left-radius: 4px;
500
- color: #e5e5e7;
515
+ color: #FFFFFF; /* White text from design tokens */
501
516
  font-size: 14px;
502
517
  line-height: 1.5;
503
518
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
@@ -509,8 +524,10 @@ var LoadingDots2 = styled4.div`
509
524
  display: flex;
510
525
  gap: 6px;
511
526
  padding: 12px 16px;
512
- background-color: #2c2c2e;
513
- border-radius: 16px;
527
+ background-color: rgba(45, 45, 61, 0.7); /* Match MessageContent with transparency */
528
+ backdrop-filter: blur(10px);
529
+ -webkit-backdrop-filter: blur(10px);
530
+ border-radius: 12px; /* Match design tokens */
514
531
  border-top-left-radius: 4px;
515
532
  width: fit-content;
516
533
  `;
@@ -661,20 +678,136 @@ var FileAttachment = ({
661
678
  }
662
679
  );
663
680
  };
681
+ var Container = styled4.div`
682
+ 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'};
683
+ white-space: pre-wrap;
684
+ word-break: break-word;
685
+ line-height: 1.5;
686
+ `;
687
+ var Cursor = styled4.span`
688
+ display: inline-block;
689
+ width: 2px;
690
+ height: 1em;
691
+ background-color: currentColor;
692
+ margin-left: 2px;
693
+ vertical-align: text-bottom;
694
+ animation: blink 1s infinite;
695
+
696
+ @keyframes blink {
697
+ 0%,
698
+ 49% {
699
+ opacity: 1;
700
+ }
701
+ 50%,
702
+ 100% {
703
+ opacity: 0;
704
+ }
705
+ }
706
+ `;
707
+ var StreamingText2 = ({
708
+ content,
709
+ isStreaming = false,
710
+ typingSpeed: _typingSpeed = 50,
711
+ // Not used - streaming shows chunks as they arrive
712
+ cursor = true,
713
+ variant = "default",
714
+ onStreamComplete,
715
+ className
716
+ }) => {
717
+ const [displayedText, setDisplayedText] = useState("");
718
+ useEffect(() => {
719
+ if (isStreaming) {
720
+ setDisplayedText(content);
721
+ return;
722
+ }
723
+ if (!isStreaming && displayedText !== content) {
724
+ setDisplayedText(content);
725
+ if (onStreamComplete) {
726
+ onStreamComplete();
727
+ }
728
+ }
729
+ }, [content, isStreaming, onStreamComplete, displayedText]);
730
+ const showCursor = isStreaming && cursor;
731
+ return /* @__PURE__ */ jsxs(Container, { variant, className, children: [
732
+ displayedText,
733
+ showCursor && /* @__PURE__ */ jsx(Cursor, {})
734
+ ] });
735
+ };
736
+ StreamingText2.displayName = "StreamingText";
664
737
  var AttachmentsContainer = styled4.div`
665
738
  display: flex;
666
739
  flex-direction: column;
667
740
  gap: 8px;
668
741
  margin-top: 12px;
669
742
  `;
743
+ var ActionButton = styled4.button`
744
+ display: inline-flex;
745
+ align-items: center;
746
+ gap: 4px;
747
+ padding: 4px 8px;
748
+ font-size: 12px;
749
+ font-weight: 500;
750
+ color: #9CA3AF;
751
+ background: rgba(255, 255, 255, 0.05);
752
+ border: 1px solid rgba(255, 255, 255, 0.1);
753
+ border-radius: 6px;
754
+ cursor: pointer;
755
+ transition: all 0.15s ease-in-out;
756
+
757
+ &:hover {
758
+ background: rgba(255, 255, 255, 0.1);
759
+ border-color: rgba(255, 255, 255, 0.2);
760
+ color: #FFFFFF;
761
+ }
762
+
763
+ &:active {
764
+ transform: scale(0.98);
765
+ }
766
+ `;
767
+ var ActionsContainer2 = styled4.div`
768
+ display: flex;
769
+ gap: 6px;
770
+ flex-wrap: wrap;
771
+ margin-top: 8px;
772
+ `;
773
+ var MessageTime = styled4.time`
774
+ font-size: 11px;
775
+ color: #6B7280;
776
+ margin-top: 4px;
777
+ display: block;
778
+ `;
779
+ var StreamingIndicator = styled4.span`
780
+ display: inline-block;
781
+ width: 4px;
782
+ height: 4px;
783
+ margin-left: 4px;
784
+ background-color: #459FB9;
785
+ border-radius: 50%;
786
+ animation: pulse 1.5s ease-in-out infinite;
787
+
788
+ @keyframes pulse {
789
+ 0%,
790
+ 100% {
791
+ opacity: 0.3;
792
+ transform: scale(0.8);
793
+ }
794
+ 50% {
795
+ opacity: 1;
796
+ transform: scale(1.2);
797
+ }
798
+ }
799
+ `;
670
800
  var AssistantMessage = ({
671
801
  content = "",
672
802
  avatarUrl,
673
803
  avatarInitials: _avatarInitials = "AI",
674
804
  isLoading = false,
805
+ isStreaming = false,
675
806
  className,
676
807
  attachments = [],
677
- enableMarkdown: _enableMarkdown = false
808
+ enableMarkdown = false,
809
+ timestamp,
810
+ actions = []
678
811
  }) => {
679
812
  const renderContent = () => {
680
813
  if (isLoading) {
@@ -685,12 +818,29 @@ var AssistantMessage = ({
685
818
  ] });
686
819
  }
687
820
  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}`)) })
821
+ content && /* @__PURE__ */ jsxs(MessageContent, { children: [
822
+ /* @__PURE__ */ jsx(
823
+ StreamingText2,
824
+ {
825
+ content,
826
+ isStreaming,
827
+ typingSpeed: 30,
828
+ cursor: false,
829
+ variant: enableMarkdown ? "markdown" : "default"
830
+ }
831
+ ),
832
+ isStreaming && /* @__PURE__ */ jsx(StreamingIndicator, {})
833
+ ] }),
834
+ attachments.length > 0 && /* @__PURE__ */ jsx(AttachmentsContainer, { children: attachments.map((attachment, index) => /* @__PURE__ */ jsx(FileAttachment, { ...attachment }, `${attachment.title}-${index}`)) }),
835
+ timestamp && /* @__PURE__ */ jsx(MessageTime, { children: timestamp }),
836
+ actions.length > 0 && /* @__PURE__ */ jsx(ActionsContainer2, { children: actions.map((action, index) => /* @__PURE__ */ jsxs(ActionButton, { onClick: action.onClick, children: [
837
+ action.icon,
838
+ action.label
839
+ ] }, index)) })
690
840
  ] });
691
841
  };
692
842
  return /* @__PURE__ */ jsxs(MessageContainer, { className, children: [
693
- /* @__PURE__ */ jsx(AvatarContainer, { children: avatarUrl ? /* @__PURE__ */ jsx(Avatar, { src: avatarUrl, alt: "Assistant avatar" }) : /* @__PURE__ */ jsx(AvatarInitials, { children: /* @__PURE__ */ jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", 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" }) }) }) }),
843
+ /* @__PURE__ */ jsx(AvatarContainer, { children: avatarUrl ? /* @__PURE__ */ jsx(Avatar, { src: avatarUrl, alt: "Assistant avatar" }) : /* @__PURE__ */ jsx(AvatarInitials, { children: /* @__PURE__ */ jsx(Avatar, { src: "/assets/avatar-transparent-bg.png", alt: "AI Assistant" }) }) }),
694
844
  /* @__PURE__ */ jsx(ContentContainer, { children: renderContent() })
695
845
  ] });
696
846
  };
@@ -704,11 +854,40 @@ var dotPulse3 = keyframes`
704
854
  transform: scale(1);
705
855
  }
706
856
  `;
707
- var Container = styled4.div`
857
+ var pulse = keyframes`
858
+ 0%, 100% {
859
+ opacity: 0.5;
860
+ transform: scale(1);
861
+ }
862
+ 50% {
863
+ opacity: 1;
864
+ transform: scale(1.2);
865
+ }
866
+ `;
867
+ var wave = keyframes`
868
+ 0%, 40%, 100% {
869
+ transform: translateY(0);
870
+ }
871
+ 20% {
872
+ transform: translateY(-8px);
873
+ }
874
+ `;
875
+ var getSizeValue = (size = "md") => {
876
+ switch (size) {
877
+ case "sm":
878
+ return { padding: "8px 12px", avatar: "32px", icon: "16px", fontSize: "12px", dotSize: "4px" };
879
+ case "lg":
880
+ return { padding: "16px 20px", avatar: "48px", icon: "24px", fontSize: "16px", dotSize: "8px" };
881
+ case "md":
882
+ default:
883
+ return { padding: "12px 16px", avatar: "40px", icon: "20px", fontSize: "14px", dotSize: "6px" };
884
+ }
885
+ };
886
+ var Container2 = styled4.div`
708
887
  display: inline-flex;
709
888
  align-items: center;
710
889
  gap: 12px;
711
- padding: 12px 16px;
890
+ padding: ${(props) => getSizeValue(props.size).padding};
712
891
  background-color: #2c2c2e;
713
892
  border-radius: 16px;
714
893
  box-shadow: none;
@@ -718,19 +897,19 @@ var Container = styled4.div`
718
897
  margin: 0 auto;
719
898
  `;
720
899
  var Avatar2 = styled4.div`
721
- width: 40px;
722
- height: 40px;
900
+ width: ${(props) => getSizeValue(props.size).avatar};
901
+ height: ${(props) => getSizeValue(props.size).avatar};
723
902
  border-radius: 50%;
724
- background: linear-gradient(135deg, #8B5CF6 0%, #EC4899 100%);
903
+ background: linear-gradient(135deg, #1e5a6b 0%, #2a7a8f 100%); /* Darker teal gradient */
725
904
  display: flex;
726
905
  align-items: center;
727
906
  justify-content: center;
728
907
  flex-shrink: 0;
729
- box-shadow: 0 2px 8px rgba(139, 92, 246, 0.3);
908
+ box-shadow: 0 2px 8px rgba(44, 176, 171, 0.3); /* Teal shadow */
730
909
  `;
731
910
  var HeadphonesIcon = styled4.svg`
732
- width: 20px;
733
- height: 20px;
911
+ width: ${(props) => getSizeValue(props.size).icon};
912
+ height: ${(props) => getSizeValue(props.size).icon};
734
913
  color: #FFFFFF;
735
914
  `;
736
915
  var Content = styled4.div`
@@ -741,18 +920,29 @@ var Content = styled4.div`
741
920
  var LoadingDots3 = styled4.div`
742
921
  display: flex;
743
922
  align-items: center;
744
- gap: 4px;
923
+ gap: ${(props) => props.variant === "wave" ? "2px" : "4px"};
745
924
  padding: 0 4px;
746
925
  `;
747
926
  var Dot2 = styled4.span`
748
- width: 6px;
749
- height: 6px;
927
+ width: ${(props) => getSizeValue(props.size).dotSize};
928
+ height: ${(props) => getSizeValue(props.size).dotSize};
750
929
  border-radius: 50%;
751
930
  background-color: #8e8e93;
752
- animation: ${dotPulse3} 1.4s ease-in-out infinite;
931
+ animation: ${(props) => {
932
+ switch (props.variant) {
933
+ case "pulse":
934
+ return pulse;
935
+ case "wave":
936
+ return wave;
937
+ case "dots":
938
+ default:
939
+ return dotPulse3;
940
+ }
941
+ }}
942
+ 1.4s ease-in-out infinite;
753
943
  `;
754
944
  var Message2 = styled4.span`
755
- font-size: 14px;
945
+ font-size: ${(props) => getSizeValue(props.size).fontSize};
756
946
  color: #e5e5e7;
757
947
  font-weight: 400;
758
948
  line-height: 1.5;
@@ -761,26 +951,50 @@ var Message2 = styled4.span`
761
951
  function AssistantThinking({
762
952
  message = "Analyzing data, please wait...",
763
953
  className,
764
- ariaLabel = "Assistant is thinking"
954
+ ariaLabel = "Assistant is thinking",
955
+ variant = "dots",
956
+ size = "md"
765
957
  }) {
766
958
  const containerRef = useRef(null);
959
+ const renderLoadingIndicator = () => {
960
+ switch (variant) {
961
+ case "dots":
962
+ return /* @__PURE__ */ jsxs(LoadingDots3, { "aria-hidden": "true", size, children: [
963
+ /* @__PURE__ */ jsx(Dot2, { style: { animationDelay: "0ms" }, size }),
964
+ /* @__PURE__ */ jsx(Dot2, { style: { animationDelay: "150ms" }, size }),
965
+ /* @__PURE__ */ jsx(Dot2, { style: { animationDelay: "300ms" }, size })
966
+ ] });
967
+ case "pulse":
968
+ return /* @__PURE__ */ jsx(LoadingDots3, { "aria-hidden": "true", size, variant: "pulse", children: /* @__PURE__ */ jsx(Dot2, { style: { animationDelay: "0ms" }, size, variant: "pulse" }) });
969
+ case "wave":
970
+ return /* @__PURE__ */ jsxs(LoadingDots3, { "aria-hidden": "true", size, variant: "wave", children: [
971
+ /* @__PURE__ */ jsx(Dot2, { style: { animationDelay: "0ms" }, size, variant: "wave" }),
972
+ /* @__PURE__ */ jsx(Dot2, { style: { animationDelay: "100ms" }, size, variant: "wave" }),
973
+ /* @__PURE__ */ jsx(Dot2, { style: { animationDelay: "200ms" }, size, variant: "wave" }),
974
+ /* @__PURE__ */ jsx(Dot2, { style: { animationDelay: "300ms" }, size, variant: "wave" }),
975
+ /* @__PURE__ */ jsx(Dot2, { style: { animationDelay: "400ms" }, size, variant: "wave" })
976
+ ] });
977
+ case "text":
978
+ return null;
979
+ // Just show the message with no indicator
980
+ default:
981
+ return null;
982
+ }
983
+ };
767
984
  return /* @__PURE__ */ jsxs(
768
- Container,
985
+ Container2,
769
986
  {
770
987
  ref: containerRef,
771
988
  className,
772
989
  role: "status",
773
990
  "aria-live": "polite",
774
991
  "aria-label": ariaLabel,
992
+ size,
775
993
  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" }) }) }),
994
+ /* @__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
995
  /* @__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 })
996
+ renderLoadingIndicator(),
997
+ /* @__PURE__ */ jsx(Message2, { size, children: message })
784
998
  ] })
785
999
  ]
786
1000
  }
@@ -800,12 +1014,9 @@ var AssistantMessageAdapter = ({
800
1014
  // markdownTagRenderers,
801
1015
  // ImageRenderer,
802
1016
  }) => {
803
- if (isLoading) {
1017
+ if (isLoading || isGenerating && !message?.content) {
804
1018
  return /* @__PURE__ */ jsx(AssistantThinking, { message: "Thinking..." });
805
1019
  }
806
- if (isGenerating && !message?.content) {
807
- return /* @__PURE__ */ jsx(AssistantThinking, { message: "Generating response..." });
808
- }
809
1020
  const content = message?.content || "";
810
1021
  const attachments = [];
811
1022
  return /* @__PURE__ */ jsx(
@@ -813,7 +1024,8 @@ var AssistantMessageAdapter = ({
813
1024
  {
814
1025
  content,
815
1026
  avatarInitials: "AI",
816
- isLoading: isGenerating,
1027
+ isLoading: false,
1028
+ isStreaming: isGenerating,
817
1029
  attachments,
818
1030
  enableMarkdown: true
819
1031
  }
@@ -831,7 +1043,6 @@ var StyledUserMessage = styled4.button`
831
1043
  font-size: 14px;
832
1044
  font-weight: 400;
833
1045
  line-height: 1.4;
834
- color: #ffffff;
835
1046
  border: none;
836
1047
  cursor: default;
837
1048
  user-select: none;
@@ -840,34 +1051,37 @@ var StyledUserMessage = styled4.button`
840
1051
  position: relative;
841
1052
  text-align: left;
842
1053
 
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%);
1054
+ /* Force override CopilotKit's default user message styles */
1055
+ && {
1056
+ background: #1C3A4E !important; /* Darker brand blue - darker than secondary */
1057
+ color: #FFFFFF !important; /* White text on dark blue background */
1058
+ border-radius: 999px !important; /* Pill shape - fully rounded ends */
1059
+ }
848
1060
 
849
- /* Subtle shadow and glow effect */
1061
+ /* Subtle shadow and glow effect - darker blue */
850
1062
  box-shadow:
851
- 0 2px 8px rgba(91, 141, 239, 0.25),
852
- 0 1px 3px rgba(139, 92, 246, 0.15);
1063
+ 0 2px 8px rgba(28, 58, 78, 0.25),
1064
+ 0 1px 3px rgba(28, 58, 78, 0.15);
853
1065
 
854
1066
  /* Smooth transitions */
855
1067
  transition: all 0.2s ease-in-out;
856
1068
 
857
- /* Speech bubble tail */
1069
+ /* Speech bubble tail - darker blue to match bubble */
858
1070
  &::after {
859
1071
  content: '';
860
1072
  position: absolute;
861
- bottom: -4px;
862
- right: -6px;
863
- width: 18px;
864
- height: 18px;
865
- background: #5B8DEF;
1073
+ bottom: -6px;
1074
+ right: 12px;
1075
+ width: 14px;
1076
+ height: 14px;
1077
+ background: #1C3A4E !important; /* Force override - darker blue */
866
1078
  transform: rotate(45deg);
867
- border-radius: 0 0 16px 0;
1079
+ border-radius: 0 0 4px 0;
1080
+ clip-path: polygon(0 0, 100% 100%, 0 100%);
868
1081
  box-shadow:
869
- 2px 2px 4px rgba(91, 141, 239, 0.15);
1082
+ 2px 2px 4px rgba(28, 58, 78, 0.15);
870
1083
  transition: all 0.2s ease-in-out;
1084
+ z-index: -1;
871
1085
  }
872
1086
 
873
1087
  /* Hover state - only for button elements */
@@ -875,12 +1089,12 @@ var StyledUserMessage = styled4.button`
875
1089
  transform: translateY(-1px);
876
1090
  cursor: pointer;
877
1091
  box-shadow:
878
- 0 4px 12px rgba(91, 141, 239, 0.35),
879
- 0 2px 6px rgba(139, 92, 246, 0.25);
1092
+ 0 4px 12px rgba(28, 58, 78, 0.35),
1093
+ 0 2px 6px rgba(28, 58, 78, 0.25);
880
1094
 
881
1095
  &::after {
882
1096
  box-shadow:
883
- 3px 3px 6px rgba(91, 141, 239, 0.2);
1097
+ 3px 3px 6px rgba(28, 58, 78, 0.2);
884
1098
  }
885
1099
  }
886
1100
 
@@ -888,24 +1102,24 @@ var StyledUserMessage = styled4.button`
888
1102
  &[role="button"]:active:not(:disabled) {
889
1103
  transform: translateY(0);
890
1104
  box-shadow:
891
- 0 1px 4px rgba(91, 141, 239, 0.2),
892
- 0 1px 2px rgba(139, 92, 246, 0.1);
1105
+ 0 1px 4px rgba(28, 58, 78, 0.2),
1106
+ 0 1px 2px rgba(28, 58, 78, 0.1);
893
1107
 
894
1108
  &::after {
895
1109
  box-shadow:
896
- 1px 1px 2px rgba(91, 141, 239, 0.1);
1110
+ 1px 1px 2px rgba(28, 58, 78, 0.1);
897
1111
  }
898
1112
  }
899
1113
 
900
1114
  ${({ $isPressed }) => $isPressed && css`
901
1115
  transform: translateY(0) scale(0.98);
902
1116
  box-shadow:
903
- 0 1px 4px rgba(91, 141, 239, 0.2),
904
- 0 1px 2px rgba(139, 92, 246, 0.1);
1117
+ 0 1px 4px rgba(28, 58, 78, 0.2),
1118
+ 0 1px 2px rgba(28, 58, 78, 0.1);
905
1119
 
906
1120
  &::after {
907
1121
  box-shadow:
908
- 1px 1px 2px rgba(91, 141, 239, 0.1);
1122
+ 1px 1px 2px rgba(28, 58, 78, 0.1);
909
1123
  }
910
1124
  `}
911
1125
 
@@ -915,12 +1129,12 @@ var StyledUserMessage = styled4.button`
915
1129
  }
916
1130
 
917
1131
  &:focus-visible {
918
- outline: 2px solid #5B8DEF;
1132
+ outline: 2px solid #1C3A4E;
919
1133
  outline-offset: 3px;
920
1134
  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);
1135
+ 0 4px 12px rgba(28, 58, 78, 0.35),
1136
+ 0 2px 6px rgba(28, 58, 78, 0.25),
1137
+ 0 0 0 3px rgba(28, 58, 78, 0.1);
924
1138
  }
925
1139
 
926
1140
  /* Disabled state */
@@ -982,6 +1196,20 @@ var UserMessageWrapper = styled4.div`
982
1196
  justify-content: flex-end;
983
1197
  width: 100%;
984
1198
  padding: 8px 0;
1199
+
1200
+ /* Fade in and slide up animation */
1201
+ animation: fadeInSlideUp 0.3s ease-out;
1202
+
1203
+ @keyframes fadeInSlideUp {
1204
+ from {
1205
+ opacity: 0;
1206
+ transform: translateY(10px);
1207
+ }
1208
+ to {
1209
+ opacity: 1;
1210
+ transform: translateY(0);
1211
+ }
1212
+ }
985
1213
  `;
986
1214
  var UserMessageAdapter = ({
987
1215
  message,
@@ -1005,7 +1233,9 @@ var ChatInputContainer = styled4.div`
1005
1233
  flex-direction: column;
1006
1234
  width: 100%;
1007
1235
  padding: 8px;
1008
- background: transparent;
1236
+ background-color: rgba(25, 25, 25, 0.6);
1237
+ backdrop-filter: blur(10px);
1238
+ -webkit-backdrop-filter: blur(10px);
1009
1239
  border-radius: 0;
1010
1240
  box-shadow: none;
1011
1241
  box-sizing: border-box;
@@ -1068,16 +1298,17 @@ var InputWrapper = styled4.div`
1068
1298
  align-items: center;
1069
1299
  gap: 10px;
1070
1300
  padding: 10px 14px;
1071
- background-color: #2c2c2e;
1072
- border: 1px solid #3a3a3c;
1301
+ background-color: rgba(25, 25, 25, 0.4);
1302
+ border: 1px solid rgba(58, 58, 60, 0.3);
1073
1303
  border-radius: 12px;
1074
1304
  transition: all 0.2s ease;
1075
1305
  width: 100%;
1076
1306
  box-sizing: border-box;
1077
1307
 
1078
1308
  &:focus-within {
1079
- border-color: #5B9FFF;
1080
- background-color: #323234;
1309
+ /* Subtle focus indication without bold colored border */
1310
+ border-color: rgba(255, 255, 255, 0.3);
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
+ }
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
+ }
1290
1551
  };
1552
+ const shouldDisableInput = isSubmitting;
1291
1553
  return /* @__PURE__ */ jsx(
1292
1554
  ChatInput,
1293
1555
  {
@@ -1295,18 +1557,13 @@ 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: [
1302
- { text: "Create in-depth analysis" },
1303
- { text: "Identify actionable tasks" },
1304
- { text: "Summarize key points" }
1564
+ { text: "Explore workflows" }
1305
1565
  ],
1306
- onSuggestionSelect: (suggestion) => {
1307
- setValue(suggestion);
1308
- handleSubmit(suggestion);
1309
- }
1566
+ onSuggestionSelect: handleSuggestionSelect
1310
1567
  }
1311
1568
  );
1312
1569
  };
@@ -1315,14 +1572,16 @@ var HeaderContainer = styled4.header`
1315
1572
  display: flex;
1316
1573
  align-items: center;
1317
1574
  justify-content: space-between;
1318
- padding: 8px;
1319
- background-color: #2c2c2e;
1320
- border-bottom: 1px solid #3a3a3c;
1321
- min-height: 60px;
1575
+ padding: 6px 8px;
1576
+ background-color: rgba(25, 25, 25, 0.6);
1577
+ backdrop-filter: blur(10px);
1578
+ -webkit-backdrop-filter: blur(10px);
1579
+ border-bottom: 1px solid rgba(58, 58, 60, 0.3);
1580
+ min-height: 44px;
1322
1581
  box-sizing: border-box;
1323
1582
 
1324
1583
  @media (min-width: 640px) {
1325
- padding: 12px;
1584
+ padding: 8px 12px;
1326
1585
  }
1327
1586
  `;
1328
1587
  var HeaderContent = styled4.div`
@@ -1361,7 +1620,7 @@ var HeaderActions = styled4.div`
1361
1620
  gap: ${({ theme }) => theme?.spacing?.xs ?? "4px"};
1362
1621
  margin-left: ${({ theme }) => theme?.spacing?.md ?? "16px"};
1363
1622
  `;
1364
- var ActionButton = styled4.button`
1623
+ var ActionButton2 = styled4.button`
1365
1624
  display: inline-flex;
1366
1625
  align-items: center;
1367
1626
  justify-content: center;
@@ -1431,7 +1690,7 @@ var Header = ({
1431
1690
  subtitle && /* @__PURE__ */ jsx(HeaderSubtitle, { children: subtitle })
1432
1691
  ] }),
1433
1692
  /* @__PURE__ */ jsxs(HeaderActions, { children: [
1434
- onMinimize && /* @__PURE__ */ jsx(ActionButton, { ref: minimizeRef, ...minimizeProps, "data-action": "minimize", children: /* @__PURE__ */ jsxs(
1693
+ onMinimize && /* @__PURE__ */ jsx(ActionButton2, { ref: minimizeRef, ...minimizeProps, "data-action": "minimize", children: /* @__PURE__ */ jsxs(
1435
1694
  "svg",
1436
1695
  {
1437
1696
  width: "16",
@@ -1446,7 +1705,7 @@ var Header = ({
1446
1705
  ]
1447
1706
  }
1448
1707
  ) }),
1449
- onClose && /* @__PURE__ */ jsx(ActionButton, { ref: closeRef, ...closeProps, "data-action": "close", children: /* @__PURE__ */ jsxs(
1708
+ onClose && /* @__PURE__ */ jsx(ActionButton2, { ref: closeRef, ...closeProps, "data-action": "close", children: /* @__PURE__ */ jsxs(
1450
1709
  "svg",
1451
1710
  {
1452
1711
  width: "16",
@@ -1466,41 +1725,18 @@ var Header = ({
1466
1725
  ] });
1467
1726
  };
1468
1727
  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
1728
  var WindowContainer = styled4.div`
1497
1729
  display: flex;
1498
1730
  flex-direction: column;
1499
- background-color: #1c1c1e;
1500
- border-radius: 0;
1501
- box-shadow: none;
1731
+ /* Glassmorphism effect */
1732
+ background: transparent;
1733
+ backdrop-filter: blur(3.8px);
1734
+ -webkit-backdrop-filter: blur(3.8px);
1735
+ border: 1px solid rgba(255, 255, 255, 0.25);
1736
+ border-radius: 16px;
1737
+ box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1);
1502
1738
  overflow: hidden;
1503
- transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1);
1739
+ transition: all 200ms cubic-bezier(0.4, 0, 0.2, 1);
1504
1740
  position: relative;
1505
1741
 
1506
1742
  /* Default dimensions */
@@ -1583,67 +1819,84 @@ var Window = ({
1583
1819
  };
1584
1820
  Window.displayName = "Window";
1585
1821
  var GlobalSidebarStyles = createGlobalStyle`
1586
- /* Override CopilotKit's default positioning - start off-screen */
1822
+ /* Override CopilotKit's default positioning - keep sidebar container in place */
1587
1823
  .copilotKitSidebar {
1588
1824
  position: fixed !important;
1589
- right: -100vw !important;
1825
+ top: 0 !important;
1826
+ right: 0 !important;
1590
1827
  bottom: 0 !important;
1591
- transition: right 0.3s ease !important;
1828
+ left: 0 !important;
1829
+ width: 100vw !important;
1830
+ height: 100vh !important;
1831
+ pointer-events: none !important;
1832
+ z-index: 1001 !important;
1592
1833
  }
1593
1834
 
1594
- /* Move sidebar container into view when expanded */
1835
+ /* Keep sidebar container always visible (the window inside will animate) */
1595
1836
  .copilotKitSidebarContentWrapper.sidebarExpanded .copilotKitSidebar {
1596
- right: 0 !important;
1837
+ pointer-events: auto !important;
1597
1838
  }
1598
1839
 
1599
- /* Mobile-first: Full viewport sidebar */
1600
- .copilotKitSidebar .copilotKitWindow {
1840
+ /* Mobile-first: Glassmorphism sidebar with rounded corners */
1841
+ /* Target the actual dialog element that gets rendered */
1842
+ .copilotKitSidebar [role="dialog"] {
1601
1843
  /* Override CopilotKit defaults for mobile */
1602
1844
  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;
1845
+ top: 10px !important;
1846
+ right: 10px !important;
1847
+ /* Reserve space for Android nav buttons - matches NavHorizontal approach */
1848
+ bottom: max(90px, env(safe-area-inset-bottom, 90px)) !important;
1849
+ left: 10px !important;
1850
+ width: calc(100vw - 20px) !important;
1851
+ /* Adjust height to account for bottom safe area */
1852
+ height: calc(100vh - 20px - max(80px, env(safe-area-inset-bottom, 80px))) !important;
1853
+ max-width: calc(100vw - 20px) !important;
1854
+ max-height: calc(100vh - 20px - max(80px, env(safe-area-inset-bottom, 80px))) !important;
1611
1855
  margin: 0 !important;
1612
- border-radius: 0 !important;
1856
+ border-radius: 16px !important;
1613
1857
  z-index: 1001 !important;
1614
1858
 
1615
- /* Hidden by default - translateX(100%) moves it off-screen to the right */
1859
+ /* Glassmorphism effect */
1860
+ background: rgba(255, 255, 255, 0.26) !important;
1861
+ box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1) !important;
1862
+ backdrop-filter: blur(11.1px) !important;
1863
+ -webkit-backdrop-filter: blur(11.1px) !important;
1864
+ border: 1px solid rgba(255, 255, 255, 0.3) !important;
1865
+
1866
+ /* Smooth slide transition */
1867
+ transition: transform 0.3s ease, visibility 0.3s ease, opacity 0.3s ease !important;
1868
+ }
1869
+
1870
+ /* Hidden by default */
1871
+ .copilotKitSidebarContentWrapper:not(.sidebarExpanded) .copilotKitSidebar [role="dialog"] {
1616
1872
  transform: translateX(100%) !important;
1617
1873
  visibility: hidden !important;
1618
1874
  pointer-events: none !important;
1619
1875
  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
1876
  }
1625
1877
 
1626
- /* When window has .open class (CopilotKit's native class), show it */
1627
- .copilotKitSidebar .copilotKitWindow.open {
1628
- display: flex !important;
1878
+ /* Visible when expanded */
1879
+ .copilotKitSidebarContentWrapper.sidebarExpanded .copilotKitSidebar [role="dialog"] {
1629
1880
  transform: translateX(0) !important;
1630
1881
  visibility: visible !important;
1631
1882
  pointer-events: auto !important;
1632
1883
  opacity: 1 !important;
1633
1884
  }
1634
1885
 
1635
- /* Desktop: Sidebar panel on the right (640px = CopilotKit's breakpoint) */
1886
+ /* Desktop: Sidebar panel on the right with glassmorphism (640px = CopilotKit's breakpoint) */
1636
1887
  @media (min-width: 640px) {
1637
- .copilotKitSidebar .copilotKitWindow {
1888
+ .copilotKitSidebar [role="dialog"] {
1638
1889
  inset: auto !important;
1639
- top: 0 !important;
1640
- right: 0 !important;
1641
- bottom: 0 !important;
1890
+ top: 10px !important;
1891
+ right: 10px !important;
1892
+ /* Reserve space for Android nav buttons on desktop too */
1893
+ bottom: max(90px, env(safe-area-inset-bottom, 90px)) !important;
1642
1894
  left: auto !important;
1643
1895
  width: 28rem !important;
1644
- height: 100vh !important;
1896
+ /* Adjust height to account for bottom safe area */
1897
+ height: calc(100vh - 20px - max(80px, env(safe-area-inset-bottom, 80px))) !important;
1645
1898
  max-width: 28rem !important;
1646
- max-height: 100vh !important;
1899
+ max-height: calc(100vh - 20px - max(80px, env(safe-area-inset-bottom, 80px))) !important;
1647
1900
  }
1648
1901
  }
1649
1902
 
@@ -1662,6 +1915,74 @@ var GlobalSidebarStyles = createGlobalStyle`
1662
1915
  display: flex !important;
1663
1916
  }
1664
1917
  }
1918
+
1919
+ /* Fix messages container background */
1920
+ .copilotKitMessages {
1921
+ background-color: transparent !important;
1922
+ }
1923
+
1924
+ /* Fade-in animation for new messages */
1925
+ @keyframes messagesFadeIn {
1926
+ from {
1927
+ opacity: 0;
1928
+ transform: translateY(8px);
1929
+ }
1930
+ to {
1931
+ opacity: 1;
1932
+ transform: translateY(0);
1933
+ }
1934
+ }
1935
+
1936
+ .copilotKitMessage {
1937
+ animation: messagesFadeIn 0.3s ease-out;
1938
+ }
1939
+
1940
+ /* Override CopilotKit suggestions to be single-row with horizontal scroll */
1941
+ div[role="list"][aria-label*="Suggested"] {
1942
+ display: flex !important;
1943
+ flex-wrap: nowrap !important; /* Force single row */
1944
+ gap: 8px !important;
1945
+ padding: 4px 0 !important;
1946
+
1947
+ /* Horizontal scrolling */
1948
+ overflow-x: auto !important;
1949
+ overflow-y: hidden !important;
1950
+
1951
+ /* Smooth scrolling */
1952
+ -webkit-overflow-scrolling: touch;
1953
+ scroll-behavior: smooth;
1954
+
1955
+ /* Fixed height for one suggestion */
1956
+ max-height: 40px !important;
1957
+ min-height: 40px !important;
1958
+ align-items: center !important;
1959
+
1960
+ /* Hide scrollbar */
1961
+ scrollbar-width: none !important;
1962
+ -ms-overflow-style: none !important;
1963
+
1964
+ &::-webkit-scrollbar {
1965
+ display: none !important;
1966
+ }
1967
+ }
1968
+
1969
+ /* Ensure suggestion buttons don't wrap or shrink */
1970
+ div[role="list"][aria-label*="Suggested"] button {
1971
+ flex-shrink: 0 !important;
1972
+ white-space: nowrap !important;
1973
+ }
1974
+
1975
+ /* Remove teal/cyan outline from all inputs */
1976
+ .copilotKitSidebar input,
1977
+ .copilotKitSidebar input:focus,
1978
+ .copilotKitSidebar input:focus-visible,
1979
+ .copilotKitSidebar textarea,
1980
+ .copilotKitSidebar textarea:focus,
1981
+ .copilotKitSidebar textarea:focus-visible {
1982
+ outline: none !important;
1983
+ outline-color: transparent !important;
1984
+ box-shadow: none !important;
1985
+ }
1665
1986
  `;
1666
1987
  var StyledChatButton = styled4.button`
1667
1988
  position: fixed;
@@ -1671,8 +1992,8 @@ var StyledChatButton = styled4.button`
1671
1992
  height: 36px;
1672
1993
  border-radius: 18px;
1673
1994
  border: none;
1674
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
1675
- box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);
1995
+ background: linear-gradient(135deg, #2CB0AB 0%, #459FB9 100%);
1996
+ box-shadow: 0 4px 12px rgba(44, 176, 171, 0.4);
1676
1997
  display: flex;
1677
1998
  align-items: center;
1678
1999
  justify-content: center;
@@ -1682,7 +2003,7 @@ var StyledChatButton = styled4.button`
1682
2003
 
1683
2004
  &:hover {
1684
2005
  transform: scale(1.05);
1685
- box-shadow: 0 6px 16px rgba(102, 126, 234, 0.5);
2006
+ box-shadow: 0 6px 16px rgba(44, 176, 171, 0.5);
1686
2007
  }
1687
2008
 
1688
2009
  &:active {
@@ -1700,7 +2021,9 @@ function CustomCopilotSidebar({
1700
2021
  defaultOpen = false,
1701
2022
  onSetOpen,
1702
2023
  instructions,
1703
- className
2024
+ className,
2025
+ disabled = false,
2026
+ disabledReason = "Start a free trial to enable AI chat"
1704
2027
  }) {
1705
2028
  const HeaderAdapterWithClose = (_props) => {
1706
2029
  const { setOpen } = useChatContext();
@@ -1708,36 +2031,34 @@ function CustomCopilotSidebar({
1708
2031
  setOpen(false);
1709
2032
  onSetOpen?.(false);
1710
2033
  };
1711
- return /* @__PURE__ */ jsx(Header, { title: "AI Assistant", subtitle: "How can I help you today?", onClose: handleClose });
2034
+ return /* @__PURE__ */ jsx(Header, { title: "AI Assistant", onClose: handleClose });
1712
2035
  };
1713
2036
  const WindowAdapterLocal = (props) => {
1714
2037
  return /* @__PURE__ */ jsx(Window, { children: props.children });
1715
2038
  };
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
2039
  const CustomButton = (_props) => {
1729
2040
  const { open, setOpen } = useChatContext();
1730
2041
  const handleClick = () => {
2042
+ if (disabled) return;
1731
2043
  const newOpenState = !open;
1732
2044
  setOpen(newOpenState);
1733
2045
  onSetOpen?.(newOpenState);
1734
2046
  };
2047
+ const disabledStyles = disabled ? {
2048
+ background: "rgba(100, 100, 100, 0.5)",
2049
+ boxShadow: "none",
2050
+ cursor: "not-allowed",
2051
+ opacity: 0.6
2052
+ } : {};
1735
2053
  return /* @__PURE__ */ jsx(
1736
2054
  StyledChatButton,
1737
2055
  {
1738
2056
  onClick: handleClick,
1739
- "aria-label": open ? "Close chat" : "Open chat",
2057
+ "aria-label": disabled ? disabledReason : open ? "Close chat" : "Open chat",
2058
+ "aria-disabled": disabled,
2059
+ title: disabled ? disabledReason : void 0,
1740
2060
  type: "button",
2061
+ style: disabledStyles,
1741
2062
  children: /* @__PURE__ */ jsxs(
1742
2063
  "svg",
1743
2064
  {
@@ -1747,7 +2068,8 @@ function CustomCopilotSidebar({
1747
2068
  fill: "currentColor",
1748
2069
  xmlns: "http://www.w3.org/2000/svg",
1749
2070
  role: "img",
1750
- "aria-label": "Chat icon",
2071
+ "aria-hidden": "true",
2072
+ style: disabled ? { fill: "rgba(255, 255, 255, 0.5)" } : void 0,
1751
2073
  children: [
1752
2074
  /* @__PURE__ */ jsx("title", { children: "Chat" }),
1753
2075
  /* @__PURE__ */ jsx("path", { d: "M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H6l-2 2V4h16v12z" })
@@ -1767,7 +2089,6 @@ function CustomCopilotSidebar({
1767
2089
  Input: InputAdapter,
1768
2090
  Header: HeaderAdapterWithClose,
1769
2091
  Window: WindowAdapterLocal,
1770
- Messages: MessagesAdapter,
1771
2092
  Button: CustomButton,
1772
2093
  instructions,
1773
2094
  labels: {
@@ -1882,18 +2203,20 @@ var InputWrapper2 = styled4.div`
1882
2203
  align-items: flex-end;
1883
2204
  gap: 8px;
1884
2205
  padding: 12px;
1885
- background-color: #ffffff;
1886
- border: 1px solid #e5e7eb;
2206
+ background-color: rgba(25, 25, 25, 0.6);
2207
+ backdrop-filter: blur(10px);
2208
+ -webkit-backdrop-filter: blur(10px);
2209
+ border: 1px solid rgba(58, 58, 60, 0.3);
1887
2210
  border-radius: 12px;
1888
2211
  transition: all 0.2s ease;
1889
2212
 
1890
2213
  &:focus-within {
1891
- border-color: #3b82f6;
1892
- box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
2214
+ /* Subtle focus indication without bold colored border */
2215
+ border-color: rgba(255, 255, 255, 0.3);
1893
2216
  }
1894
2217
 
1895
2218
  &:hover:not(:focus-within) {
1896
- border-color: #d1d5db;
2219
+ border-color: rgba(58, 58, 60, 0.5);
1897
2220
  }
1898
2221
  `;
1899
2222
  var TextArea = styled4.textarea`
@@ -1908,12 +2231,12 @@ var TextArea = styled4.textarea`
1908
2231
  'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
1909
2232
  font-size: 14px;
1910
2233
  line-height: 24px;
1911
- color: #111827;
2234
+ color: #FFFFFF;
1912
2235
  background: transparent;
1913
2236
  overflow-y: auto;
1914
2237
 
1915
2238
  &::placeholder {
1916
- color: #9ca3af;
2239
+ color: #8e8e93;
1917
2240
  }
1918
2241
 
1919
2242
  &:disabled {
@@ -1952,14 +2275,14 @@ var SendButton = styled4.button`
1952
2275
  padding: 0;
1953
2276
  border: none;
1954
2277
  border-radius: 8px;
1955
- background-color: ${(props) => props.disabled ? "#e5e7eb" : "#3b82f6"};
1956
- color: ${(props) => props.disabled ? "#9ca3af" : "#ffffff"};
2278
+ background-color: ${(props) => props.disabled ? "rgba(229, 231, 235, 0.3)" : "#2CB0AB"};
2279
+ color: ${(props) => props.disabled ? "#6B7280" : "#ffffff"};
1957
2280
  cursor: ${(props) => props.disabled ? "not-allowed" : "pointer"};
1958
2281
  transition: all 0.2s ease;
1959
2282
  flex-shrink: 0;
1960
2283
 
1961
2284
  &:hover:not(:disabled) {
1962
- background-color: #2563eb;
2285
+ background-color: #459FB9;
1963
2286
  transform: translateY(-1px);
1964
2287
  }
1965
2288
 
@@ -1968,8 +2291,7 @@ var SendButton = styled4.button`
1968
2291
  }
1969
2292
 
1970
2293
  &:focus-visible {
1971
- outline: 2px solid #3b82f6;
1972
- outline-offset: 2px;
2294
+ outline: none;
1973
2295
  }
1974
2296
 
1975
2297
  svg {
@@ -2073,6 +2395,34 @@ var Input = ({
2073
2395
  )
2074
2396
  ] }) });
2075
2397
  };
2398
+ var MessagesContainer = styled4.div`
2399
+ display: flex;
2400
+ flex-direction: column;
2401
+ flex: 1;
2402
+ overflow: hidden;
2403
+ /* Gradient background with subtle purple accent */
2404
+ background-image: linear-gradient(to right bottom, #302c4c, #26273d, #1e202d, #191a1e, #171a21, #141a24, #0f1b27, #081b2a, #081b2a, #081b2a);
2405
+ padding: 8px;
2406
+ gap: 12px;
2407
+ box-sizing: border-box;
2408
+
2409
+ /* Ensure proper scrolling behavior for child components */
2410
+ position: relative;
2411
+ min-height: 0;
2412
+
2413
+ /* Desktop padding */
2414
+ @media (min-width: 640px) {
2415
+ padding: 12px;
2416
+ }
2417
+ `;
2418
+ var Messages = ({
2419
+ children,
2420
+ className,
2421
+ ariaLabel = "Messages"
2422
+ }) => {
2423
+ return /* @__PURE__ */ jsx(MessagesContainer, { className, role: "region", "aria-label": ariaLabel, children });
2424
+ };
2425
+ Messages.displayName = "Messages";
2076
2426
  var MessagesListContainer = styled4.div`
2077
2427
  display: flex;
2078
2428
  flex-direction: column;
@@ -2242,22 +2592,15 @@ var MessageBubble = styled4.div`
2242
2592
  flex-direction: column;
2243
2593
  max-width: 70%;
2244
2594
  padding: 12px 16px;
2245
- border-radius: 18px 18px 4px 18px;
2595
+ border-radius: 12px; /* Consistent rounded corners, no tail */
2246
2596
 
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);
2597
+ /* User message colors - dark blue from brand */
2598
+ background: #264E68; /* Deep Blue from brand tokens */
2599
+ color: #FFFFFF; /* White text for better contrast on dark background */
2253
2600
 
2254
2601
  /* Smooth transitions */
2255
2602
  transition: all 0.2s ease-in-out;
2256
2603
 
2257
- &:hover {
2258
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
2259
- }
2260
-
2261
2604
  /* Username styling */
2262
2605
  strong {
2263
2606
  font-size: 12px;
@@ -2273,40 +2616,127 @@ var MessageContent2 = styled4.p`
2273
2616
  word-wrap: break-word;
2274
2617
  white-space: pre-wrap;
2275
2618
  `;
2276
- var MessageTime = styled4.time`
2619
+ var MessageTime2 = styled4.time`
2277
2620
  font-size: 11px;
2278
2621
  opacity: 0.7;
2279
2622
  margin-top: 4px;
2280
2623
  text-align: right;
2281
2624
  `;
2625
+ var ActionButton3 = styled4.button`
2626
+ display: inline-flex;
2627
+ align-items: center;
2628
+ gap: 4px;
2629
+ padding: 4px 8px;
2630
+ margin-top: 8px;
2631
+ font-size: 12px;
2632
+ font-weight: 500;
2633
+ color: rgba(0, 0, 0, 0.7);
2634
+ background: rgba(255, 255, 255, 0.3);
2635
+ border: 1px solid rgba(0, 0, 0, 0.1);
2636
+ border-radius: 6px;
2637
+ cursor: pointer;
2638
+ transition: all 0.15s ease-in-out;
2639
+
2640
+ &:hover {
2641
+ background: rgba(255, 255, 255, 0.5);
2642
+ border-color: rgba(0, 0, 0, 0.2);
2643
+ }
2644
+
2645
+ &:active {
2646
+ transform: scale(0.98);
2647
+ }
2648
+ `;
2649
+ var ActionsContainer3 = styled4.div`
2650
+ display: flex;
2651
+ gap: 6px;
2652
+ flex-wrap: wrap;
2653
+ `;
2654
+ var StreamingIndicator2 = styled4.span`
2655
+ display: inline-block;
2656
+ width: 4px;
2657
+ height: 4px;
2658
+ margin-left: 4px;
2659
+ background-color: rgba(0, 0, 0, 0.5);
2660
+ border-radius: 50%;
2661
+ animation: pulse 1.5s ease-in-out infinite;
2662
+
2663
+ @keyframes pulse {
2664
+ 0%,
2665
+ 100% {
2666
+ opacity: 0.3;
2667
+ transform: scale(0.8);
2668
+ }
2669
+ 50% {
2670
+ opacity: 1;
2671
+ transform: scale(1.2);
2672
+ }
2673
+ }
2674
+ `;
2675
+ var Avatar3 = styled4.img`
2676
+ width: 32px;
2677
+ height: 32px;
2678
+ border-radius: 50%;
2679
+ margin-left: 8px;
2680
+ object-fit: cover;
2681
+ border: 2px solid rgba(216, 180, 254, 0.3);
2682
+ `;
2282
2683
  var UserMessage2 = ({
2283
2684
  content,
2284
2685
  timestamp,
2285
2686
  className,
2286
2687
  avatarUrl,
2287
- username
2688
+ username,
2689
+ isStreaming = false,
2690
+ actions = []
2288
2691
  }) => {
2289
2692
  return /* @__PURE__ */ jsxs(StyledUserMessage2, { className, children: [
2290
2693
  /* @__PURE__ */ jsxs(MessageBubble, { children: [
2291
2694
  username && /* @__PURE__ */ jsx("strong", { children: username }),
2292
- /* @__PURE__ */ jsx(MessageContent2, { children: content }),
2293
- timestamp && /* @__PURE__ */ jsx(MessageTime, { children: timestamp })
2695
+ /* @__PURE__ */ jsxs(MessageContent2, { children: [
2696
+ content,
2697
+ isStreaming && /* @__PURE__ */ jsx(StreamingIndicator2, {})
2698
+ ] }),
2699
+ timestamp && /* @__PURE__ */ jsx(MessageTime2, { children: timestamp }),
2700
+ actions.length > 0 && /* @__PURE__ */ jsx(ActionsContainer3, { children: actions.map((action, index) => /* @__PURE__ */ jsxs(ActionButton3, { onClick: action.onClick, children: [
2701
+ action.icon,
2702
+ action.label
2703
+ ] }, index)) })
2294
2704
  ] }),
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
- )
2705
+ avatarUrl && /* @__PURE__ */ jsx(Avatar3, { src: avatarUrl, alt: username || "User" })
2303
2706
  ] });
2304
2707
  };
2305
2708
  var SuggestionsContainer = styled4.div`
2306
2709
  display: flex;
2307
- flex-wrap: wrap;
2710
+ flex-wrap: nowrap; /* Single row */
2308
2711
  gap: ${({ theme }) => theme?.spacing?.sm ?? "8px"};
2309
- padding: ${({ theme }) => theme?.spacing?.md ?? "16px"} 0;
2712
+
2713
+ /* Reduced padding for tighter height */
2714
+ padding: ${({ theme }) => theme?.spacing?.xs ?? "4px"} 0;
2715
+
2716
+ /* Horizontal scrolling */
2717
+ overflow-x: auto;
2718
+ overflow-y: hidden;
2719
+
2720
+ /* Smooth scrolling on mobile */
2721
+ -webkit-overflow-scrolling: touch;
2722
+ scroll-behavior: smooth;
2723
+
2724
+ /* Align items to ensure single-row height */
2725
+ align-items: center;
2726
+
2727
+ /* Constrain to exact height of buttons + minimal padding */
2728
+ /* Button height: ~14px font + 16px padding + 2px border = ~32px */
2729
+ /* Add small padding: 8px total = 40px */
2730
+ max-height: 40px;
2731
+ min-height: 40px;
2732
+
2733
+ /* Hide scrollbar but keep functionality */
2734
+ scrollbar-width: none; /* Firefox */
2735
+ -ms-overflow-style: none; /* IE/Edge */
2736
+
2737
+ &::-webkit-scrollbar {
2738
+ display: none; /* Chrome/Safari/Opera */
2739
+ }
2310
2740
  `;
2311
2741
  var StyledSuggestion = styled4.button`
2312
2742
  /* Base styles */
@@ -2325,6 +2755,7 @@ var StyledSuggestion = styled4.button`
2325
2755
  transition: all 0.2s ease-in-out;
2326
2756
  white-space: nowrap;
2327
2757
  user-select: none;
2758
+ flex-shrink: 0; /* Prevent shrinking to maintain size */
2328
2759
 
2329
2760
  /* Hover state */
2330
2761
  &:hover:not(:disabled) {
@@ -2380,6 +2811,324 @@ function SuggestionChip({ suggestion, onSelect }) {
2380
2811
  return /* @__PURE__ */ jsx(StyledSuggestion, { ...buttonProps, ref, $isPressed: isPressed, role: "listitem", children: suggestion });
2381
2812
  }
2382
2813
  Suggestions.displayName = "Suggestions";
2814
+ var ErrorContainer = styled4.div`
2815
+ display: flex;
2816
+ align-items: flex-start;
2817
+ gap: 12px;
2818
+ padding: ${(props) => props.variant === "banner" ? "16px" : "12px 16px"};
2819
+ background-color: ${(props) => props.variant === "banner" ? "rgba(239, 68, 68, 0.1)" : "rgba(239, 68, 68, 0.05)"};
2820
+ border: 1px solid rgba(239, 68, 68, 0.3);
2821
+ border-radius: ${(props) => props.variant === "banner" ? "8px" : "12px"};
2822
+ color: #FFFFFF;
2823
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',
2824
+ 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
2825
+ margin: 8px 0;
2826
+ width: ${(props) => props.variant === "banner" ? "100%" : "auto"};
2827
+ max-width: ${(props) => props.variant === "banner" ? "100%" : "600px"};
2828
+ `;
2829
+ var IconContainer = styled4.div`
2830
+ flex-shrink: 0;
2831
+ width: 20px;
2832
+ height: 20px;
2833
+ color: #EF4444;
2834
+ `;
2835
+ var ErrorIcon = () => /* @__PURE__ */ jsx(
2836
+ "svg",
2837
+ {
2838
+ xmlns: "http://www.w3.org/2000/svg",
2839
+ viewBox: "0 0 24 24",
2840
+ fill: "currentColor",
2841
+ width: "20",
2842
+ height: "20",
2843
+ 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" })
2844
+ }
2845
+ );
2846
+ var Content2 = styled4.div`
2847
+ flex: 1;
2848
+ display: flex;
2849
+ flex-direction: column;
2850
+ gap: 8px;
2851
+ `;
2852
+ var ErrorMessage = styled4.div`
2853
+ font-size: 14px;
2854
+ line-height: 1.5;
2855
+ color: #FFFFFF;
2856
+ `;
2857
+ var ErrorDetails = styled4.div`
2858
+ font-size: 12px;
2859
+ line-height: 1.4;
2860
+ color: #9CA3AF;
2861
+ margin-top: 4px;
2862
+ `;
2863
+ var Actions2 = styled4.div`
2864
+ display: flex;
2865
+ gap: 8px;
2866
+ margin-top: 8px;
2867
+ `;
2868
+ var Button2 = styled4.button`
2869
+ display: inline-flex;
2870
+ align-items: center;
2871
+ gap: 6px;
2872
+ padding: 6px 12px;
2873
+ font-size: 13px;
2874
+ font-weight: 500;
2875
+ color: ${(props) => props.variant === "primary" ? "#FFFFFF" : "#9CA3AF"};
2876
+ background: ${(props) => props.variant === "primary" ? "#EF4444" : "rgba(255, 255, 255, 0.05)"};
2877
+ border: 1px solid
2878
+ ${(props) => props.variant === "primary" ? "#EF4444" : "rgba(255, 255, 255, 0.1)"};
2879
+ border-radius: 6px;
2880
+ cursor: pointer;
2881
+ transition: all 0.15s ease-in-out;
2882
+
2883
+ &:hover {
2884
+ background: ${(props) => props.variant === "primary" ? "#DC2626" : "rgba(255, 255, 255, 0.1)"};
2885
+ border-color: ${(props) => props.variant === "primary" ? "#DC2626" : "rgba(255, 255, 255, 0.2)"};
2886
+ }
2887
+
2888
+ &:active {
2889
+ transform: scale(0.98);
2890
+ }
2891
+
2892
+ &:disabled {
2893
+ opacity: 0.5;
2894
+ cursor: not-allowed;
2895
+ }
2896
+ `;
2897
+ var CloseButton = styled4.button`
2898
+ flex-shrink: 0;
2899
+ width: 24px;
2900
+ height: 24px;
2901
+ padding: 0;
2902
+ display: flex;
2903
+ align-items: center;
2904
+ justify-content: center;
2905
+ background: transparent;
2906
+ border: none;
2907
+ color: #9CA3AF;
2908
+ cursor: pointer;
2909
+ border-radius: 4px;
2910
+ transition: all 0.15s ease-in-out;
2911
+
2912
+ &:hover {
2913
+ background: rgba(255, 255, 255, 0.1);
2914
+ color: #FFFFFF;
2915
+ }
2916
+
2917
+ &:active {
2918
+ transform: scale(0.95);
2919
+ }
2920
+ `;
2921
+ 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" }) });
2922
+ var StreamErrorMessage = ({
2923
+ error,
2924
+ variant = "inline",
2925
+ retryable = false,
2926
+ onRetry,
2927
+ onDismiss,
2928
+ details,
2929
+ className
2930
+ }) => {
2931
+ const errorMessage = typeof error === "string" ? error : error.message;
2932
+ return /* @__PURE__ */ jsxs(ErrorContainer, { variant, className, role: "alert", "aria-live": "assertive", children: [
2933
+ /* @__PURE__ */ jsx(IconContainer, { "aria-hidden": "true", children: /* @__PURE__ */ jsx(ErrorIcon, {}) }),
2934
+ /* @__PURE__ */ jsxs(Content2, { children: [
2935
+ /* @__PURE__ */ jsx(ErrorMessage, { children: errorMessage }),
2936
+ details && /* @__PURE__ */ jsx(ErrorDetails, { children: details }),
2937
+ (retryable || onDismiss) && /* @__PURE__ */ jsxs(Actions2, { children: [
2938
+ retryable && onRetry && /* @__PURE__ */ jsx(Button2, { variant: "primary", onClick: onRetry, children: "Retry" }),
2939
+ onDismiss && /* @__PURE__ */ jsx(Button2, { variant: "secondary", onClick: onDismiss, children: "Dismiss" })
2940
+ ] })
2941
+ ] }),
2942
+ onDismiss && /* @__PURE__ */ jsx(CloseButton, { onClick: onDismiss, "aria-label": "Dismiss error", children: /* @__PURE__ */ jsx(CloseIcon, {}) })
2943
+ ] });
2944
+ };
2945
+ StreamErrorMessage.displayName = "StreamErrorMessage";
2946
+ var pulse2 = keyframes`
2947
+ 0%, 100% {
2948
+ opacity: 1;
2949
+ transform: scale(1);
2950
+ }
2951
+ 50% {
2952
+ opacity: 0.6;
2953
+ transform: scale(1.1);
2954
+ }
2955
+ `;
2956
+ var Container3 = styled4.div`
2957
+ display: inline-flex;
2958
+ align-items: center;
2959
+ gap: ${(props) => {
2960
+ switch (props.size) {
2961
+ case "sm":
2962
+ return "4px";
2963
+ case "lg":
2964
+ return "8px";
2965
+ case "md":
2966
+ default:
2967
+ return "6px";
2968
+ }
2969
+ }};
2970
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',
2971
+ 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
2972
+ `;
2973
+ var StatusDot = styled4.div`
2974
+ width: ${(props) => {
2975
+ if (props.variant === "badge") {
2976
+ switch (props.size) {
2977
+ case "sm":
2978
+ return "6px";
2979
+ case "lg":
2980
+ return "10px";
2981
+ case "md":
2982
+ default:
2983
+ return "8px";
2984
+ }
2985
+ }
2986
+ switch (props.size) {
2987
+ case "sm":
2988
+ return "6px";
2989
+ case "lg":
2990
+ return "12px";
2991
+ case "md":
2992
+ default:
2993
+ return "8px";
2994
+ }
2995
+ }};
2996
+ height: ${(props) => {
2997
+ if (props.variant === "badge") {
2998
+ switch (props.size) {
2999
+ case "sm":
3000
+ return "6px";
3001
+ case "lg":
3002
+ return "10px";
3003
+ case "md":
3004
+ default:
3005
+ return "8px";
3006
+ }
3007
+ }
3008
+ switch (props.size) {
3009
+ case "sm":
3010
+ return "6px";
3011
+ case "lg":
3012
+ return "12px";
3013
+ case "md":
3014
+ default:
3015
+ return "8px";
3016
+ }
3017
+ }};
3018
+ border-radius: 50%;
3019
+ background-color: ${(props) => {
3020
+ switch (props.status) {
3021
+ case "connected":
3022
+ return "#10B981";
3023
+ // Green
3024
+ case "streaming":
3025
+ return "#3B82F6";
3026
+ // Blue
3027
+ case "disconnected":
3028
+ return "#EF4444";
3029
+ // Red
3030
+ case "reconnecting":
3031
+ return "#F59E0B";
3032
+ }
3033
+ }};
3034
+ animation: ${(props) => props.status === "streaming" ? pulse2 : "none"} 2s ease-in-out infinite;
3035
+ flex-shrink: 0;
3036
+ `;
3037
+ var Label = styled4.span`
3038
+ font-size: ${(props) => {
3039
+ if (props.variant === "badge") {
3040
+ switch (props.size) {
3041
+ case "sm":
3042
+ return "11px";
3043
+ case "lg":
3044
+ return "15px";
3045
+ case "md":
3046
+ default:
3047
+ return "13px";
3048
+ }
3049
+ }
3050
+ switch (props.size) {
3051
+ case "sm":
3052
+ return "12px";
3053
+ case "lg":
3054
+ return "16px";
3055
+ case "md":
3056
+ default:
3057
+ return "14px";
3058
+ }
3059
+ }};
3060
+ font-weight: ${(props) => props.variant === "badge" ? "500" : "400"};
3061
+ color: #9CA3AF;
3062
+ line-height: 1.4;
3063
+ `;
3064
+ var BadgeContainer = styled4.div`
3065
+ display: inline-flex;
3066
+ align-items: center;
3067
+ gap: ${(props) => {
3068
+ switch (props.size) {
3069
+ case "sm":
3070
+ return "4px";
3071
+ case "lg":
3072
+ return "8px";
3073
+ case "md":
3074
+ default:
3075
+ return "6px";
3076
+ }
3077
+ }};
3078
+ padding: ${(props) => {
3079
+ switch (props.size) {
3080
+ case "sm":
3081
+ return "4px 8px";
3082
+ case "lg":
3083
+ return "8px 16px";
3084
+ case "md":
3085
+ default:
3086
+ return "6px 12px";
3087
+ }
3088
+ }};
3089
+ background-color: rgba(255, 255, 255, 0.05);
3090
+ border: 1px solid rgba(255, 255, 255, 0.1);
3091
+ border-radius: ${(props) => {
3092
+ switch (props.size) {
3093
+ case "sm":
3094
+ return "4px";
3095
+ case "lg":
3096
+ return "8px";
3097
+ case "md":
3098
+ default:
3099
+ return "6px";
3100
+ }
3101
+ }};
3102
+ `;
3103
+ var getStatusLabel = (status) => {
3104
+ switch (status) {
3105
+ case "connected":
3106
+ return "Connected";
3107
+ case "streaming":
3108
+ return "Streaming";
3109
+ case "disconnected":
3110
+ return "Disconnected";
3111
+ case "reconnecting":
3112
+ return "Reconnecting...";
3113
+ }
3114
+ };
3115
+ var StreamStatusIndicator = ({
3116
+ status,
3117
+ variant = "dot",
3118
+ size = "md",
3119
+ showLabel = false,
3120
+ className
3121
+ }) => {
3122
+ const content = /* @__PURE__ */ jsxs(Fragment, { children: [
3123
+ /* @__PURE__ */ jsx(StatusDot, { status, size, variant, "aria-hidden": "true" }),
3124
+ showLabel && /* @__PURE__ */ jsx(Label, { size, variant, children: getStatusLabel(status) })
3125
+ ] });
3126
+ if (variant === "badge") {
3127
+ return /* @__PURE__ */ jsx(BadgeContainer, { size, className, role: "status", "aria-label": getStatusLabel(status), children: content });
3128
+ }
3129
+ return /* @__PURE__ */ jsx(Container3, { size, className, role: "status", "aria-label": getStatusLabel(status), children: content });
3130
+ };
3131
+ StreamStatusIndicator.displayName = "StreamStatusIndicator";
2383
3132
  var GlobalSidebarStyles2 = createGlobalStyle`
2384
3133
  /* Override CopilotKit's default positioning - start off-screen */
2385
3134
  .copilotKitSidebar {
@@ -2619,6 +3368,6 @@ var CustomCopilotSidebar2 = ({
2619
3368
  };
2620
3369
  CustomCopilotSidebar2.displayName = "CustomCopilotSidebar";
2621
3370
 
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 };
3371
+ 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
3372
  //# sourceMappingURL=index.js.map
2624
3373
  //# sourceMappingURL=index.js.map