@assistant-ui/mcp-docs-server 0.1.15 → 0.1.17
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.
- package/.docs/organized/code-examples/store-example.md +249 -147
- package/.docs/organized/code-examples/with-ag-ui.md +250 -186
- package/.docs/organized/code-examples/with-ai-sdk-v5.md +250 -199
- package/.docs/organized/code-examples/with-assistant-transport.md +195 -243
- package/.docs/organized/code-examples/with-cloud.md +277 -226
- package/.docs/organized/code-examples/with-custom-thread-list.md +1855 -0
- package/.docs/organized/code-examples/with-external-store.md +246 -180
- package/.docs/organized/code-examples/with-ffmpeg.md +255 -189
- package/.docs/organized/code-examples/with-langgraph.md +293 -242
- package/.docs/organized/code-examples/with-parent-id-grouping.md +243 -263
- package/.docs/organized/code-examples/with-react-hook-form.md +262 -196
- package/.docs/organized/code-examples/with-tanstack.md +1578 -0
- package/.docs/raw/blog/2024-07-29-hello/index.mdx +2 -2
- package/.docs/raw/docs/api-reference/overview.mdx +6 -6
- package/.docs/raw/docs/api-reference/primitives/ActionBar.mdx +85 -4
- package/.docs/raw/docs/api-reference/primitives/AssistantIf.mdx +200 -0
- package/.docs/raw/docs/api-reference/primitives/Composer.mdx +0 -20
- package/.docs/raw/docs/api-reference/primitives/Message.mdx +0 -45
- package/.docs/raw/docs/api-reference/primitives/Thread.mdx +0 -50
- package/.docs/raw/docs/cloud/persistence/ai-sdk.mdx +2 -3
- package/.docs/raw/docs/cloud/persistence/langgraph.mdx +2 -3
- package/.docs/raw/docs/devtools.mdx +2 -3
- package/.docs/raw/docs/getting-started.mdx +36 -1102
- package/.docs/raw/docs/guides/Attachments.mdx +3 -25
- package/.docs/raw/docs/guides/Branching.mdx +1 -1
- package/.docs/raw/docs/guides/Speech.mdx +1 -1
- package/.docs/raw/docs/guides/ToolUI.mdx +1 -1
- package/.docs/raw/docs/legacy/styled/AssistantModal.mdx +2 -3
- package/.docs/raw/docs/legacy/styled/Decomposition.mdx +6 -5
- package/.docs/raw/docs/legacy/styled/Markdown.mdx +2 -3
- package/.docs/raw/docs/legacy/styled/Thread.mdx +2 -3
- package/.docs/raw/docs/react-compatibility.mdx +2 -5
- package/.docs/raw/docs/runtimes/ai-sdk/use-chat.mdx +3 -4
- package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +3 -6
- package/.docs/raw/docs/runtimes/custom/external-store.mdx +2 -3
- package/.docs/raw/docs/runtimes/custom/local.mdx +11 -41
- package/.docs/raw/docs/runtimes/data-stream.mdx +15 -11
- package/.docs/raw/docs/runtimes/langgraph/index.mdx +3 -3
- package/.docs/raw/docs/runtimes/langgraph/tutorial/part-2.mdx +1 -1
- package/.docs/raw/docs/runtimes/langgraph/tutorial/part-3.mdx +2 -3
- package/.docs/raw/docs/runtimes/langserve.mdx +2 -3
- package/.docs/raw/docs/runtimes/mastra/full-stack-integration.mdx +2 -3
- package/.docs/raw/docs/runtimes/mastra/separate-server-integration.mdx +2 -3
- package/.docs/raw/docs/ui/AssistantModal.mdx +3 -25
- package/.docs/raw/docs/ui/AssistantSidebar.mdx +2 -24
- package/.docs/raw/docs/ui/Attachment.mdx +3 -25
- package/.docs/raw/docs/ui/Markdown.mdx +2 -24
- package/.docs/raw/docs/ui/Mermaid.mdx +2 -24
- package/.docs/raw/docs/ui/Reasoning.mdx +2 -24
- package/.docs/raw/docs/ui/Scrollbar.mdx +4 -6
- package/.docs/raw/docs/ui/SyntaxHighlighting.mdx +3 -47
- package/.docs/raw/docs/ui/Thread.mdx +38 -53
- package/.docs/raw/docs/ui/ThreadList.mdx +4 -47
- package/.docs/raw/docs/ui/ToolFallback.mdx +2 -24
- package/package.json +6 -7
|
@@ -341,16 +341,16 @@ const AttachmentPreviewDialog: FC<PropsWithChildren> = ({ children }) => {
|
|
|
341
341
|
return (
|
|
342
342
|
<Dialog>
|
|
343
343
|
<DialogTrigger
|
|
344
|
-
className="aui-attachment-preview-trigger hover:bg-accent/50
|
|
344
|
+
className="aui-attachment-preview-trigger cursor-pointer transition-colors hover:bg-accent/50"
|
|
345
345
|
asChild
|
|
346
346
|
>
|
|
347
347
|
{children}
|
|
348
348
|
</DialogTrigger>
|
|
349
|
-
<DialogContent className="aui-attachment-preview-dialog-content [
|
|
349
|
+
<DialogContent className="aui-attachment-preview-dialog-content p-2 sm:max-w-3xl [&>button]:rounded-full [&>button]:bg-foreground/60 [&>button]:p-1 [&>button]:opacity-100 [&>button]:ring-0! [&_svg]:text-background [&>button]:hover:[&_svg]:text-destructive">
|
|
350
350
|
<DialogTitle className="aui-sr-only sr-only">
|
|
351
351
|
Image Attachment Preview
|
|
352
352
|
</DialogTitle>
|
|
353
|
-
<div className="aui-attachment-preview
|
|
353
|
+
<div className="aui-attachment-preview relative mx-auto flex max-h-[80dvh] w-full items-center justify-center overflow-hidden bg-background">
|
|
354
354
|
<AttachmentPreview src={src} />
|
|
355
355
|
</div>
|
|
356
356
|
</DialogContent>
|
|
@@ -372,7 +372,7 @@ const AttachmentThumb: FC = () => {
|
|
|
372
372
|
className="aui-attachment-tile-image object-cover"
|
|
373
373
|
/>
|
|
374
374
|
<AvatarFallback delayMs={isImage ? 200 : 0}>
|
|
375
|
-
<FileText className="aui-attachment-tile-fallback-icon text-muted-foreground
|
|
375
|
+
<FileText className="aui-attachment-tile-fallback-icon size-8 text-muted-foreground" />
|
|
376
376
|
</AvatarFallback>
|
|
377
377
|
</Avatar>
|
|
378
378
|
);
|
|
@@ -413,7 +413,7 @@ const AttachmentUI: FC = () => {
|
|
|
413
413
|
<TooltipTrigger asChild>
|
|
414
414
|
<div
|
|
415
415
|
className={cn(
|
|
416
|
-
"aui-attachment-tile
|
|
416
|
+
"aui-attachment-tile size-14 cursor-pointer overflow-hidden rounded-[14px] border bg-muted transition-opacity hover:opacity-75",
|
|
417
417
|
isComposer &&
|
|
418
418
|
"aui-attachment-tile-composer border-foreground/20",
|
|
419
419
|
)}
|
|
@@ -439,7 +439,7 @@ const AttachmentRemove: FC = () => {
|
|
|
439
439
|
<AttachmentPrimitive.Remove asChild>
|
|
440
440
|
<TooltipIconButton
|
|
441
441
|
tooltip="Remove file"
|
|
442
|
-
className="aui-attachment-tile-remove
|
|
442
|
+
className="aui-attachment-tile-remove absolute top-1.5 right-1.5 size-3.5 rounded-full bg-white text-muted-foreground opacity-100 shadow-sm hover:bg-white! [&_svg]:text-black hover:[&_svg]:text-destructive"
|
|
443
443
|
side="top"
|
|
444
444
|
>
|
|
445
445
|
<XIcon className="aui-attachment-remove-icon size-3 dark:stroke-[2.5px]" />
|
|
@@ -474,7 +474,7 @@ export const ComposerAddAttachment: FC = () => {
|
|
|
474
474
|
side="bottom"
|
|
475
475
|
variant="ghost"
|
|
476
476
|
size="icon"
|
|
477
|
-
className="aui-composer-add-attachment hover:bg-muted-foreground/15 dark:border-muted-foreground/15 dark:hover:bg-muted-foreground/30
|
|
477
|
+
className="aui-composer-add-attachment size-[34px] rounded-full p-1 font-semibold text-xs hover:bg-muted-foreground/15 dark:border-muted-foreground/15 dark:hover:bg-muted-foreground/30"
|
|
478
478
|
aria-label="Add Attachment"
|
|
479
479
|
>
|
|
480
480
|
<PlusIcon className="aui-attachment-add-icon size-5 stroke-[1.5px]" />
|
|
@@ -525,7 +525,7 @@ const CodeHeader: FC<CodeHeaderProps> = ({ language, code }) => {
|
|
|
525
525
|
};
|
|
526
526
|
|
|
527
527
|
return (
|
|
528
|
-
<div className="aui-code-header-root
|
|
528
|
+
<div className="aui-code-header-root mt-4 flex items-center justify-between gap-4 rounded-t-lg bg-muted-foreground/15 px-4 py-2 font-semibold text-foreground text-sm dark:bg-muted-foreground/20">
|
|
529
529
|
<span className="aui-code-header-language lowercase [&>span]:text-xs">
|
|
530
530
|
{language}
|
|
531
531
|
</span>
|
|
@@ -560,7 +560,7 @@ const defaultComponents = memoizeMarkdownComponents({
|
|
|
560
560
|
h1: ({ className, ...props }) => (
|
|
561
561
|
<h1
|
|
562
562
|
className={cn(
|
|
563
|
-
"aui-md-h1 mb-8 scroll-m-20 text-4xl
|
|
563
|
+
"aui-md-h1 mb-8 scroll-m-20 font-extrabold text-4xl tracking-tight last:mb-0",
|
|
564
564
|
className,
|
|
565
565
|
)}
|
|
566
566
|
{...props}
|
|
@@ -569,7 +569,7 @@ const defaultComponents = memoizeMarkdownComponents({
|
|
|
569
569
|
h2: ({ className, ...props }) => (
|
|
570
570
|
<h2
|
|
571
571
|
className={cn(
|
|
572
|
-
"aui-md-h2 mt-8 mb-4 scroll-m-20 text-3xl
|
|
572
|
+
"aui-md-h2 mt-8 mb-4 scroll-m-20 font-semibold text-3xl tracking-tight first:mt-0 last:mb-0",
|
|
573
573
|
className,
|
|
574
574
|
)}
|
|
575
575
|
{...props}
|
|
@@ -578,7 +578,7 @@ const defaultComponents = memoizeMarkdownComponents({
|
|
|
578
578
|
h3: ({ className, ...props }) => (
|
|
579
579
|
<h3
|
|
580
580
|
className={cn(
|
|
581
|
-
"aui-md-h3 mt-6 mb-4 scroll-m-20 text-2xl
|
|
581
|
+
"aui-md-h3 mt-6 mb-4 scroll-m-20 font-semibold text-2xl tracking-tight first:mt-0 last:mb-0",
|
|
582
582
|
className,
|
|
583
583
|
)}
|
|
584
584
|
{...props}
|
|
@@ -587,7 +587,7 @@ const defaultComponents = memoizeMarkdownComponents({
|
|
|
587
587
|
h4: ({ className, ...props }) => (
|
|
588
588
|
<h4
|
|
589
589
|
className={cn(
|
|
590
|
-
"aui-md-h4 mt-6 mb-4 scroll-m-20 text-xl
|
|
590
|
+
"aui-md-h4 mt-6 mb-4 scroll-m-20 font-semibold text-xl tracking-tight first:mt-0 last:mb-0",
|
|
591
591
|
className,
|
|
592
592
|
)}
|
|
593
593
|
{...props}
|
|
@@ -596,7 +596,7 @@ const defaultComponents = memoizeMarkdownComponents({
|
|
|
596
596
|
h5: ({ className, ...props }) => (
|
|
597
597
|
<h5
|
|
598
598
|
className={cn(
|
|
599
|
-
"aui-md-h5 my-4 text-lg
|
|
599
|
+
"aui-md-h5 my-4 font-semibold text-lg first:mt-0 last:mb-0",
|
|
600
600
|
className,
|
|
601
601
|
)}
|
|
602
602
|
{...props}
|
|
@@ -623,7 +623,7 @@ const defaultComponents = memoizeMarkdownComponents({
|
|
|
623
623
|
a: ({ className, ...props }) => (
|
|
624
624
|
<a
|
|
625
625
|
className={cn(
|
|
626
|
-
"aui-md-a text-primary
|
|
626
|
+
"aui-md-a font-medium text-primary underline underline-offset-4",
|
|
627
627
|
className,
|
|
628
628
|
)}
|
|
629
629
|
{...props}
|
|
@@ -662,7 +662,7 @@ const defaultComponents = memoizeMarkdownComponents({
|
|
|
662
662
|
th: ({ className, ...props }) => (
|
|
663
663
|
<th
|
|
664
664
|
className={cn(
|
|
665
|
-
"aui-md-th bg-muted px-4 py-2 text-left font-bold first:rounded-tl-lg last:rounded-tr-lg [
|
|
665
|
+
"aui-md-th bg-muted px-4 py-2 text-left font-bold first:rounded-tl-lg last:rounded-tr-lg [[align=center]]:text-center [[align=right]]:text-right",
|
|
666
666
|
className,
|
|
667
667
|
)}
|
|
668
668
|
{...props}
|
|
@@ -671,7 +671,7 @@ const defaultComponents = memoizeMarkdownComponents({
|
|
|
671
671
|
td: ({ className, ...props }) => (
|
|
672
672
|
<td
|
|
673
673
|
className={cn(
|
|
674
|
-
"aui-md-td border-b border-l px-4 py-2 text-left last:border-r [
|
|
674
|
+
"aui-md-td border-b border-l px-4 py-2 text-left last:border-r [[align=center]]:text-center [[align=right]]:text-right",
|
|
675
675
|
className,
|
|
676
676
|
)}
|
|
677
677
|
{...props}
|
|
@@ -695,7 +695,7 @@ const defaultComponents = memoizeMarkdownComponents({
|
|
|
695
695
|
pre: ({ className, ...props }) => (
|
|
696
696
|
<pre
|
|
697
697
|
className={cn(
|
|
698
|
-
"aui-md-pre overflow-x-auto
|
|
698
|
+
"aui-md-pre overflow-x-auto rounded-t-none! rounded-b-lg bg-black p-4 text-white",
|
|
699
699
|
className,
|
|
700
700
|
)}
|
|
701
701
|
{...props}
|
|
@@ -707,7 +707,7 @@ const defaultComponents = memoizeMarkdownComponents({
|
|
|
707
707
|
<code
|
|
708
708
|
className={cn(
|
|
709
709
|
!isCodeBlock &&
|
|
710
|
-
"aui-md-inline-code bg-muted
|
|
710
|
+
"aui-md-inline-code rounded border bg-muted font-semibold",
|
|
711
711
|
className,
|
|
712
712
|
)}
|
|
713
713
|
{...props}
|
|
@@ -722,59 +722,67 @@ const defaultComponents = memoizeMarkdownComponents({
|
|
|
722
722
|
## components/assistant-ui/thread.tsx
|
|
723
723
|
|
|
724
724
|
```tsx
|
|
725
|
+
import {
|
|
726
|
+
ComposerAddAttachment,
|
|
727
|
+
ComposerAttachments,
|
|
728
|
+
UserMessageAttachments,
|
|
729
|
+
} from "@/components/assistant-ui/attachment";
|
|
730
|
+
import { MarkdownText } from "@/components/assistant-ui/markdown-text";
|
|
731
|
+
import { ToolFallback } from "@/components/assistant-ui/tool-fallback";
|
|
732
|
+
import { TooltipIconButton } from "@/components/assistant-ui/tooltip-icon-button";
|
|
733
|
+
import { Button } from "@/components/ui/button";
|
|
734
|
+
import { cn } from "@/lib/utils";
|
|
725
735
|
import {
|
|
726
736
|
ActionBarPrimitive,
|
|
737
|
+
AssistantIf,
|
|
727
738
|
BranchPickerPrimitive,
|
|
728
739
|
ComposerPrimitive,
|
|
729
740
|
ErrorPrimitive,
|
|
730
741
|
MessagePrimitive,
|
|
731
742
|
ThreadPrimitive,
|
|
732
743
|
} from "@assistant-ui/react";
|
|
733
|
-
import type { FC } from "react";
|
|
734
744
|
import {
|
|
735
745
|
ArrowDownIcon,
|
|
746
|
+
ArrowUpIcon,
|
|
736
747
|
CheckIcon,
|
|
737
748
|
ChevronLeftIcon,
|
|
738
749
|
ChevronRightIcon,
|
|
739
750
|
CopyIcon,
|
|
751
|
+
DownloadIcon,
|
|
740
752
|
PencilIcon,
|
|
741
753
|
RefreshCwIcon,
|
|
742
|
-
|
|
754
|
+
SquareIcon,
|
|
743
755
|
} from "lucide-react";
|
|
744
|
-
import {
|
|
745
|
-
|
|
746
|
-
import { Button } from "@/components/ui/button";
|
|
747
|
-
import { MarkdownText } from "@/components/assistant-ui/markdown-text";
|
|
748
|
-
import { TooltipIconButton } from "@/components/assistant-ui/tooltip-icon-button";
|
|
749
|
-
import { ToolFallback } from "./tool-fallback";
|
|
756
|
+
import type { FC } from "react";
|
|
750
757
|
|
|
751
758
|
export const Thread: FC = () => {
|
|
752
759
|
return (
|
|
753
760
|
<ThreadPrimitive.Root
|
|
754
|
-
className="
|
|
761
|
+
className="aui-root aui-thread-root @container flex h-full flex-col bg-background"
|
|
755
762
|
style={{
|
|
756
|
-
["--thread-max-width" as string]: "
|
|
763
|
+
["--thread-max-width" as string]: "44rem",
|
|
757
764
|
}}
|
|
758
765
|
>
|
|
759
|
-
<ThreadPrimitive.Viewport
|
|
760
|
-
|
|
766
|
+
<ThreadPrimitive.Viewport
|
|
767
|
+
turnAnchor="top"
|
|
768
|
+
className="aui-thread-viewport relative flex flex-1 flex-col overflow-x-auto overflow-y-scroll scroll-smooth px-4 pt-4"
|
|
769
|
+
>
|
|
770
|
+
<AssistantIf condition={({ thread }) => thread.isEmpty}>
|
|
771
|
+
<ThreadWelcome />
|
|
772
|
+
</AssistantIf>
|
|
761
773
|
|
|
762
774
|
<ThreadPrimitive.Messages
|
|
763
775
|
components={{
|
|
764
|
-
UserMessage
|
|
765
|
-
EditComposer
|
|
766
|
-
AssistantMessage
|
|
776
|
+
UserMessage,
|
|
777
|
+
EditComposer,
|
|
778
|
+
AssistantMessage,
|
|
767
779
|
}}
|
|
768
780
|
/>
|
|
769
781
|
|
|
770
|
-
<ThreadPrimitive.
|
|
771
|
-
<div className="min-h-8 flex-grow" />
|
|
772
|
-
</ThreadPrimitive.If>
|
|
773
|
-
|
|
774
|
-
<div className="sticky bottom-0 mt-3 flex w-full max-w-[var(--thread-max-width)] flex-col items-center justify-end rounded-t-lg bg-inherit pb-4">
|
|
782
|
+
<ThreadPrimitive.ViewportFooter className="aui-thread-viewport-footer sticky bottom-0 mx-auto mt-auto flex w-full max-w-(--thread-max-width) flex-col gap-4 overflow-visible rounded-t-3xl bg-background pb-4 md:pb-6">
|
|
775
783
|
<ThreadScrollToBottom />
|
|
776
784
|
<Composer />
|
|
777
|
-
</
|
|
785
|
+
</ThreadPrimitive.ViewportFooter>
|
|
778
786
|
</ThreadPrimitive.Viewport>
|
|
779
787
|
</ThreadPrimitive.Root>
|
|
780
788
|
);
|
|
@@ -786,7 +794,7 @@ const ThreadScrollToBottom: FC = () => {
|
|
|
786
794
|
<TooltipIconButton
|
|
787
795
|
tooltip="Scroll to bottom"
|
|
788
796
|
variant="outline"
|
|
789
|
-
className="
|
|
797
|
+
className="aui-thread-scroll-to-bottom -top-12 absolute z-10 self-center rounded-full p-4 disabled:invisible dark:bg-background dark:hover:bg-accent"
|
|
790
798
|
>
|
|
791
799
|
<ArrowDownIcon />
|
|
792
800
|
</TooltipIconButton>
|
|
@@ -796,179 +804,177 @@ const ThreadScrollToBottom: FC = () => {
|
|
|
796
804
|
|
|
797
805
|
const ThreadWelcome: FC = () => {
|
|
798
806
|
return (
|
|
799
|
-
<
|
|
800
|
-
<div className="
|
|
801
|
-
<div className="flex
|
|
802
|
-
<
|
|
807
|
+
<div className="aui-thread-welcome-root mx-auto my-auto flex w-full max-w-(--thread-max-width) grow flex-col">
|
|
808
|
+
<div className="aui-thread-welcome-center flex w-full grow flex-col items-center justify-center">
|
|
809
|
+
<div className="aui-thread-welcome-message flex size-full flex-col justify-center px-4">
|
|
810
|
+
<h1 className="aui-thread-welcome-message-inner fade-in slide-in-from-bottom-1 animate-in font-semibold text-2xl duration-200">
|
|
811
|
+
Hello there!
|
|
812
|
+
</h1>
|
|
813
|
+
<p className="aui-thread-welcome-message-inner fade-in slide-in-from-bottom-1 animate-in text-muted-foreground text-xl delay-75 duration-200">
|
|
814
|
+
How can I help you today?
|
|
815
|
+
</p>
|
|
803
816
|
</div>
|
|
804
|
-
<ThreadWelcomeSuggestions />
|
|
805
817
|
</div>
|
|
806
|
-
|
|
818
|
+
<ThreadSuggestions />
|
|
819
|
+
</div>
|
|
807
820
|
);
|
|
808
821
|
};
|
|
809
822
|
|
|
810
|
-
const
|
|
823
|
+
const SUGGESTIONS = [
|
|
824
|
+
{
|
|
825
|
+
title: "What's the weather",
|
|
826
|
+
label: "in San Francisco?",
|
|
827
|
+
prompt: "What's the weather in San Francisco?",
|
|
828
|
+
},
|
|
829
|
+
{
|
|
830
|
+
title: "Explain React hooks",
|
|
831
|
+
label: "like useState and useEffect",
|
|
832
|
+
prompt: "Explain React hooks like useState and useEffect",
|
|
833
|
+
},
|
|
834
|
+
] as const;
|
|
835
|
+
|
|
836
|
+
const ThreadSuggestions: FC = () => {
|
|
811
837
|
return (
|
|
812
|
-
<div className="
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
838
|
+
<div className="aui-thread-welcome-suggestions grid w-full @md:grid-cols-2 gap-2 pb-4">
|
|
839
|
+
{SUGGESTIONS.map((suggestion, index) => (
|
|
840
|
+
<div
|
|
841
|
+
key={suggestion.prompt}
|
|
842
|
+
className="aui-thread-welcome-suggestion-display fade-in slide-in-from-bottom-2 @md:nth-[n+3]:block nth-[n+3]:hidden animate-in fill-mode-both duration-200"
|
|
843
|
+
style={{ animationDelay: `${100 + index * 50}ms` }}
|
|
844
|
+
>
|
|
845
|
+
<ThreadPrimitive.Suggestion prompt={suggestion.prompt} send asChild>
|
|
846
|
+
<Button
|
|
847
|
+
variant="ghost"
|
|
848
|
+
className="aui-thread-welcome-suggestion h-auto w-full @md:flex-col flex-wrap items-start justify-start gap-1 rounded-2xl border px-4 py-3 text-left text-sm transition-colors hover:bg-muted"
|
|
849
|
+
aria-label={suggestion.prompt}
|
|
850
|
+
>
|
|
851
|
+
<span className="aui-thread-welcome-suggestion-text-1 font-medium">
|
|
852
|
+
{suggestion.title}
|
|
853
|
+
</span>
|
|
854
|
+
<span className="aui-thread-welcome-suggestion-text-2 text-muted-foreground">
|
|
855
|
+
{suggestion.label}
|
|
856
|
+
</span>
|
|
857
|
+
</Button>
|
|
858
|
+
</ThreadPrimitive.Suggestion>
|
|
859
|
+
</div>
|
|
860
|
+
))}
|
|
833
861
|
</div>
|
|
834
862
|
);
|
|
835
863
|
};
|
|
836
864
|
|
|
837
865
|
const Composer: FC = () => {
|
|
838
866
|
return (
|
|
839
|
-
<ComposerPrimitive.Root className="
|
|
840
|
-
<ComposerPrimitive.
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
867
|
+
<ComposerPrimitive.Root className="aui-composer-root relative flex w-full flex-col">
|
|
868
|
+
<ComposerPrimitive.AttachmentDropzone className="aui-composer-attachment-dropzone flex w-full flex-col rounded-2xl border border-input bg-background px-1 pt-2 outline-none transition-shadow has-[textarea:focus-visible]:border-ring has-[textarea:focus-visible]:ring-2 has-[textarea:focus-visible]:ring-ring/20 data-[dragging=true]:border-ring data-[dragging=true]:border-dashed data-[dragging=true]:bg-accent/50">
|
|
869
|
+
<ComposerAttachments />
|
|
870
|
+
<ComposerPrimitive.Input
|
|
871
|
+
placeholder="Send a message..."
|
|
872
|
+
className="aui-composer-input mb-1 max-h-32 min-h-14 w-full resize-none bg-transparent px-4 pt-2 pb-3 text-sm outline-none placeholder:text-muted-foreground focus-visible:ring-0"
|
|
873
|
+
rows={1}
|
|
874
|
+
autoFocus
|
|
875
|
+
aria-label="Message input"
|
|
876
|
+
/>
|
|
877
|
+
<ComposerAction />
|
|
878
|
+
</ComposerPrimitive.AttachmentDropzone>
|
|
847
879
|
</ComposerPrimitive.Root>
|
|
848
880
|
);
|
|
849
881
|
};
|
|
850
882
|
|
|
851
883
|
const ComposerAction: FC = () => {
|
|
852
884
|
return (
|
|
853
|
-
|
|
854
|
-
<
|
|
885
|
+
<div className="aui-composer-action-wrapper relative mx-2 mb-2 flex items-center justify-between">
|
|
886
|
+
<ComposerAddAttachment />
|
|
887
|
+
|
|
888
|
+
<AssistantIf condition={({ thread }) => !thread.isRunning}>
|
|
855
889
|
<ComposerPrimitive.Send asChild>
|
|
856
890
|
<TooltipIconButton
|
|
857
|
-
tooltip="Send"
|
|
891
|
+
tooltip="Send message"
|
|
892
|
+
side="bottom"
|
|
893
|
+
type="submit"
|
|
858
894
|
variant="default"
|
|
859
|
-
|
|
895
|
+
size="icon"
|
|
896
|
+
className="aui-composer-send size-8 rounded-full"
|
|
897
|
+
aria-label="Send message"
|
|
860
898
|
>
|
|
861
|
-
<
|
|
899
|
+
<ArrowUpIcon className="aui-composer-send-icon size-4" />
|
|
862
900
|
</TooltipIconButton>
|
|
863
901
|
</ComposerPrimitive.Send>
|
|
864
|
-
</
|
|
865
|
-
|
|
902
|
+
</AssistantIf>
|
|
903
|
+
|
|
904
|
+
<AssistantIf condition={({ thread }) => thread.isRunning}>
|
|
866
905
|
<ComposerPrimitive.Cancel asChild>
|
|
867
|
-
<
|
|
868
|
-
|
|
906
|
+
<Button
|
|
907
|
+
type="button"
|
|
869
908
|
variant="default"
|
|
870
|
-
|
|
909
|
+
size="icon"
|
|
910
|
+
className="aui-composer-cancel size-8 rounded-full"
|
|
911
|
+
aria-label="Stop generating"
|
|
871
912
|
>
|
|
872
|
-
<
|
|
873
|
-
</
|
|
913
|
+
<SquareIcon className="aui-composer-cancel-icon size-3 fill-current" />
|
|
914
|
+
</Button>
|
|
874
915
|
</ComposerPrimitive.Cancel>
|
|
875
|
-
</
|
|
876
|
-
|
|
877
|
-
);
|
|
878
|
-
};
|
|
879
|
-
|
|
880
|
-
const UserMessage: FC = () => {
|
|
881
|
-
return (
|
|
882
|
-
<MessagePrimitive.Root className="grid w-full max-w-[var(--thread-max-width)] auto-rows-auto grid-cols-[minmax(72px,1fr)_auto] gap-y-2 py-4 [&:where(>*)]:col-start-2">
|
|
883
|
-
<UserActionBar />
|
|
884
|
-
|
|
885
|
-
<div className="bg-muted text-foreground col-start-2 row-start-2 max-w-[calc(var(--thread-max-width)*0.8)] rounded-3xl px-5 py-2.5 break-words">
|
|
886
|
-
<MessagePrimitive.Parts />
|
|
887
|
-
</div>
|
|
888
|
-
|
|
889
|
-
<BranchPicker className="col-span-full col-start-1 row-start-3 -mr-1 justify-end" />
|
|
890
|
-
</MessagePrimitive.Root>
|
|
891
|
-
);
|
|
892
|
-
};
|
|
893
|
-
|
|
894
|
-
const UserActionBar: FC = () => {
|
|
895
|
-
return (
|
|
896
|
-
<ActionBarPrimitive.Root
|
|
897
|
-
hideWhenRunning
|
|
898
|
-
autohide="not-last"
|
|
899
|
-
className="col-start-1 row-start-2 mt-2.5 mr-3 flex flex-col items-end"
|
|
900
|
-
>
|
|
901
|
-
<ActionBarPrimitive.Edit asChild>
|
|
902
|
-
<TooltipIconButton tooltip="Edit">
|
|
903
|
-
<PencilIcon />
|
|
904
|
-
</TooltipIconButton>
|
|
905
|
-
</ActionBarPrimitive.Edit>
|
|
906
|
-
</ActionBarPrimitive.Root>
|
|
916
|
+
</AssistantIf>
|
|
917
|
+
</div>
|
|
907
918
|
);
|
|
908
919
|
};
|
|
909
920
|
|
|
910
|
-
const
|
|
921
|
+
const MessageError: FC = () => {
|
|
911
922
|
return (
|
|
912
|
-
<
|
|
913
|
-
<
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
<Button variant="ghost">Cancel</Button>
|
|
918
|
-
</ComposerPrimitive.Cancel>
|
|
919
|
-
<ComposerPrimitive.Send asChild>
|
|
920
|
-
<Button>Send</Button>
|
|
921
|
-
</ComposerPrimitive.Send>
|
|
922
|
-
</div>
|
|
923
|
-
</ComposerPrimitive.Root>
|
|
923
|
+
<MessagePrimitive.Error>
|
|
924
|
+
<ErrorPrimitive.Root className="aui-message-error-root mt-2 rounded-md border border-destructive bg-destructive/10 p-3 text-destructive text-sm dark:bg-destructive/5 dark:text-red-200">
|
|
925
|
+
<ErrorPrimitive.Message className="aui-message-error-message line-clamp-2" />
|
|
926
|
+
</ErrorPrimitive.Root>
|
|
927
|
+
</MessagePrimitive.Error>
|
|
924
928
|
);
|
|
925
929
|
};
|
|
926
930
|
|
|
927
931
|
const AssistantMessage: FC = () => {
|
|
928
932
|
return (
|
|
929
|
-
<MessagePrimitive.Root
|
|
930
|
-
|
|
933
|
+
<MessagePrimitive.Root
|
|
934
|
+
className="aui-assistant-message-root fade-in slide-in-from-bottom-1 relative mx-auto w-full max-w-(--thread-max-width) animate-in py-3 duration-150"
|
|
935
|
+
data-role="assistant"
|
|
936
|
+
>
|
|
937
|
+
<div className="aui-assistant-message-content wrap-break-word px-2 text-foreground leading-relaxed">
|
|
931
938
|
<MessagePrimitive.Parts
|
|
932
|
-
components={{
|
|
939
|
+
components={{
|
|
940
|
+
Text: MarkdownText,
|
|
941
|
+
tools: { Fallback: ToolFallback },
|
|
942
|
+
}}
|
|
933
943
|
/>
|
|
934
944
|
<MessageError />
|
|
935
945
|
</div>
|
|
936
946
|
|
|
937
|
-
<
|
|
938
|
-
|
|
939
|
-
|
|
947
|
+
<div className="aui-assistant-message-footer mt-1 ml-2 flex">
|
|
948
|
+
<BranchPicker />
|
|
949
|
+
<AssistantActionBar />
|
|
950
|
+
</div>
|
|
940
951
|
</MessagePrimitive.Root>
|
|
941
952
|
);
|
|
942
953
|
};
|
|
943
954
|
|
|
944
|
-
const MessageError: FC = () => {
|
|
945
|
-
return (
|
|
946
|
-
<MessagePrimitive.Error>
|
|
947
|
-
<ErrorPrimitive.Root className="border-destructive bg-destructive/10 dark:bg-destructive/5 text-destructive mt-2 rounded-md border p-3 text-sm dark:text-red-200">
|
|
948
|
-
<ErrorPrimitive.Message className="line-clamp-2" />
|
|
949
|
-
</ErrorPrimitive.Root>
|
|
950
|
-
</MessagePrimitive.Error>
|
|
951
|
-
);
|
|
952
|
-
};
|
|
953
|
-
|
|
954
955
|
const AssistantActionBar: FC = () => {
|
|
955
956
|
return (
|
|
956
957
|
<ActionBarPrimitive.Root
|
|
957
958
|
hideWhenRunning
|
|
958
959
|
autohide="not-last"
|
|
959
960
|
autohideFloat="single-branch"
|
|
960
|
-
className="
|
|
961
|
+
className="aui-assistant-action-bar-root -ml-1 col-start-3 row-start-2 flex gap-1 text-muted-foreground data-floating:absolute data-floating:rounded-md data-floating:border data-floating:bg-background data-floating:p-1 data-floating:shadow-sm"
|
|
961
962
|
>
|
|
962
963
|
<ActionBarPrimitive.Copy asChild>
|
|
963
964
|
<TooltipIconButton tooltip="Copy">
|
|
964
|
-
<
|
|
965
|
+
<AssistantIf condition={({ message }) => message.isCopied}>
|
|
965
966
|
<CheckIcon />
|
|
966
|
-
</
|
|
967
|
-
<
|
|
967
|
+
</AssistantIf>
|
|
968
|
+
<AssistantIf condition={({ message }) => !message.isCopied}>
|
|
968
969
|
<CopyIcon />
|
|
969
|
-
</
|
|
970
|
+
</AssistantIf>
|
|
970
971
|
</TooltipIconButton>
|
|
971
972
|
</ActionBarPrimitive.Copy>
|
|
973
|
+
<ActionBarPrimitive.ExportMarkdown asChild>
|
|
974
|
+
<TooltipIconButton tooltip="Export as Markdown">
|
|
975
|
+
<DownloadIcon />
|
|
976
|
+
</TooltipIconButton>
|
|
977
|
+
</ActionBarPrimitive.ExportMarkdown>
|
|
972
978
|
<ActionBarPrimitive.Reload asChild>
|
|
973
979
|
<TooltipIconButton tooltip="Refresh">
|
|
974
980
|
<RefreshCwIcon />
|
|
@@ -978,6 +984,67 @@ const AssistantActionBar: FC = () => {
|
|
|
978
984
|
);
|
|
979
985
|
};
|
|
980
986
|
|
|
987
|
+
const UserMessage: FC = () => {
|
|
988
|
+
return (
|
|
989
|
+
<MessagePrimitive.Root
|
|
990
|
+
className="aui-user-message-root fade-in slide-in-from-bottom-1 mx-auto grid w-full max-w-(--thread-max-width) animate-in auto-rows-auto grid-cols-[minmax(72px,1fr)_auto] content-start gap-y-2 px-2 py-3 duration-150 [&:where(>*)]:col-start-2"
|
|
991
|
+
data-role="user"
|
|
992
|
+
>
|
|
993
|
+
<UserMessageAttachments />
|
|
994
|
+
|
|
995
|
+
<div className="aui-user-message-content-wrapper relative col-start-2 min-w-0">
|
|
996
|
+
<div className="aui-user-message-content wrap-break-word rounded-2xl bg-muted px-4 py-2.5 text-foreground">
|
|
997
|
+
<MessagePrimitive.Parts />
|
|
998
|
+
</div>
|
|
999
|
+
<div className="aui-user-action-bar-wrapper -translate-x-full -translate-y-1/2 absolute top-1/2 left-0 pr-2">
|
|
1000
|
+
<UserActionBar />
|
|
1001
|
+
</div>
|
|
1002
|
+
</div>
|
|
1003
|
+
|
|
1004
|
+
<BranchPicker className="aui-user-branch-picker -mr-1 col-span-full col-start-1 row-start-3 justify-end" />
|
|
1005
|
+
</MessagePrimitive.Root>
|
|
1006
|
+
);
|
|
1007
|
+
};
|
|
1008
|
+
|
|
1009
|
+
const UserActionBar: FC = () => {
|
|
1010
|
+
return (
|
|
1011
|
+
<ActionBarPrimitive.Root
|
|
1012
|
+
hideWhenRunning
|
|
1013
|
+
autohide="not-last"
|
|
1014
|
+
className="aui-user-action-bar-root flex flex-col items-end"
|
|
1015
|
+
>
|
|
1016
|
+
<ActionBarPrimitive.Edit asChild>
|
|
1017
|
+
<TooltipIconButton tooltip="Edit" className="aui-user-action-edit p-4">
|
|
1018
|
+
<PencilIcon />
|
|
1019
|
+
</TooltipIconButton>
|
|
1020
|
+
</ActionBarPrimitive.Edit>
|
|
1021
|
+
</ActionBarPrimitive.Root>
|
|
1022
|
+
);
|
|
1023
|
+
};
|
|
1024
|
+
|
|
1025
|
+
const EditComposer: FC = () => {
|
|
1026
|
+
return (
|
|
1027
|
+
<MessagePrimitive.Root className="aui-edit-composer-wrapper mx-auto flex w-full max-w-(--thread-max-width) flex-col px-2 py-3">
|
|
1028
|
+
<ComposerPrimitive.Root className="aui-edit-composer-root ml-auto flex w-full max-w-[85%] flex-col rounded-2xl bg-muted">
|
|
1029
|
+
<ComposerPrimitive.Input
|
|
1030
|
+
className="aui-edit-composer-input min-h-14 w-full resize-none bg-transparent p-4 text-foreground text-sm outline-none"
|
|
1031
|
+
autoFocus
|
|
1032
|
+
/>
|
|
1033
|
+
<div className="aui-edit-composer-footer mx-3 mb-3 flex items-center gap-2 self-end">
|
|
1034
|
+
<ComposerPrimitive.Cancel asChild>
|
|
1035
|
+
<Button variant="ghost" size="sm">
|
|
1036
|
+
Cancel
|
|
1037
|
+
</Button>
|
|
1038
|
+
</ComposerPrimitive.Cancel>
|
|
1039
|
+
<ComposerPrimitive.Send asChild>
|
|
1040
|
+
<Button size="sm">Update</Button>
|
|
1041
|
+
</ComposerPrimitive.Send>
|
|
1042
|
+
</div>
|
|
1043
|
+
</ComposerPrimitive.Root>
|
|
1044
|
+
</MessagePrimitive.Root>
|
|
1045
|
+
);
|
|
1046
|
+
};
|
|
1047
|
+
|
|
981
1048
|
const BranchPicker: FC<BranchPickerPrimitive.Root.Props> = ({
|
|
982
1049
|
className,
|
|
983
1050
|
...rest
|
|
@@ -986,7 +1053,7 @@ const BranchPicker: FC<BranchPickerPrimitive.Root.Props> = ({
|
|
|
986
1053
|
<BranchPickerPrimitive.Root
|
|
987
1054
|
hideWhenSingleBranch
|
|
988
1055
|
className={cn(
|
|
989
|
-
"
|
|
1056
|
+
"aui-branch-picker-root -ml-2 mr-2 inline-flex items-center text-muted-foreground text-xs",
|
|
990
1057
|
className,
|
|
991
1058
|
)}
|
|
992
1059
|
{...rest}
|
|
@@ -996,7 +1063,7 @@ const BranchPicker: FC<BranchPickerPrimitive.Root.Props> = ({
|
|
|
996
1063
|
<ChevronLeftIcon />
|
|
997
1064
|
</TooltipIconButton>
|
|
998
1065
|
</BranchPickerPrimitive.Previous>
|
|
999
|
-
<span className="font-medium">
|
|
1066
|
+
<span className="aui-branch-picker-state font-medium">
|
|
1000
1067
|
<BranchPickerPrimitive.Number /> / <BranchPickerPrimitive.Count />
|
|
1001
1068
|
</span>
|
|
1002
1069
|
<BranchPickerPrimitive.Next asChild>
|
|
@@ -1008,20 +1075,6 @@ const BranchPicker: FC<BranchPickerPrimitive.Root.Props> = ({
|
|
|
1008
1075
|
);
|
|
1009
1076
|
};
|
|
1010
1077
|
|
|
1011
|
-
const CircleStopIcon = () => {
|
|
1012
|
-
return (
|
|
1013
|
-
<svg
|
|
1014
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
1015
|
-
viewBox="0 0 16 16"
|
|
1016
|
-
fill="currentColor"
|
|
1017
|
-
width="16"
|
|
1018
|
-
height="16"
|
|
1019
|
-
>
|
|
1020
|
-
<rect width="10" height="10" x="3" y="3" rx="2" />
|
|
1021
|
-
</svg>
|
|
1022
|
-
);
|
|
1023
|
-
};
|
|
1024
|
-
|
|
1025
1078
|
```
|
|
1026
1079
|
|
|
1027
1080
|
## components/assistant-ui/tool-fallback.tsx
|
|
@@ -1064,7 +1117,7 @@ export const ToolFallback: ToolCallMessagePartComponent = ({
|
|
|
1064
1117
|
>
|
|
1065
1118
|
<div className="aui-tool-fallback-header flex items-center gap-2 px-4">
|
|
1066
1119
|
{isCancelled ? (
|
|
1067
|
-
<XCircleIcon className="aui-tool-fallback-icon text-muted-foreground
|
|
1120
|
+
<XCircleIcon className="aui-tool-fallback-icon size-4 text-muted-foreground" />
|
|
1068
1121
|
) : (
|
|
1069
1122
|
<CheckIcon className="aui-tool-fallback-icon size-4" />
|
|
1070
1123
|
)}
|
|
@@ -1085,7 +1138,7 @@ export const ToolFallback: ToolCallMessagePartComponent = ({
|
|
|
1085
1138
|
<div className="aui-tool-fallback-content flex flex-col gap-2 border-t pt-2">
|
|
1086
1139
|
{cancelledReason && (
|
|
1087
1140
|
<div className="aui-tool-fallback-cancelled-root px-4">
|
|
1088
|
-
<p className="aui-tool-fallback-cancelled-header text-muted-foreground
|
|
1141
|
+
<p className="aui-tool-fallback-cancelled-header font-semibold text-muted-foreground">
|
|
1089
1142
|
Cancelled reason:
|
|
1090
1143
|
</p>
|
|
1091
1144
|
<p className="aui-tool-fallback-cancelled-reason text-muted-foreground">
|
|
@@ -1215,7 +1268,7 @@ const AvatarFallback = React.forwardRef<
|
|
|
1215
1268
|
<AvatarPrimitive.Fallback
|
|
1216
1269
|
ref={ref}
|
|
1217
1270
|
className={cn(
|
|
1218
|
-
"
|
|
1271
|
+
"flex h-full w-full items-center justify-center rounded-full bg-muted",
|
|
1219
1272
|
className,
|
|
1220
1273
|
)}
|
|
1221
1274
|
{...props}
|
|
@@ -1237,16 +1290,16 @@ import { cva, type VariantProps } from "class-variance-authority";
|
|
|
1237
1290
|
import { cn } from "@/lib/utils";
|
|
1238
1291
|
|
|
1239
1292
|
const buttonVariants = cva(
|
|
1240
|
-
"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm
|
|
1293
|
+
"inline-flex shrink-0 items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium text-sm outline-none transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
|
1241
1294
|
{
|
|
1242
1295
|
variants: {
|
|
1243
1296
|
variant: {
|
|
1244
1297
|
default:
|
|
1245
1298
|
"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
|
|
1246
1299
|
destructive:
|
|
1247
|
-
"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40
|
|
1300
|
+
"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",
|
|
1248
1301
|
outline:
|
|
1249
|
-
"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:
|
|
1302
|
+
"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
|
|
1250
1303
|
secondary:
|
|
1251
1304
|
"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",
|
|
1252
1305
|
ghost:
|
|
@@ -1255,7 +1308,7 @@ const buttonVariants = cva(
|
|
|
1255
1308
|
},
|
|
1256
1309
|
size: {
|
|
1257
1310
|
default: "h-9 px-4 py-2 has-[>svg]:px-3",
|
|
1258
|
-
sm: "h-8
|
|
1311
|
+
sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",
|
|
1259
1312
|
lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
|
|
1260
1313
|
icon: "size-9",
|
|
1261
1314
|
},
|
|
@@ -1335,7 +1388,7 @@ function DialogOverlay({
|
|
|
1335
1388
|
<DialogPrimitive.Overlay
|
|
1336
1389
|
data-slot="dialog-overlay"
|
|
1337
1390
|
className={cn(
|
|
1338
|
-
"data-[state=closed]:
|
|
1391
|
+
"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/80 data-[state=closed]:animate-out data-[state=open]:animate-in",
|
|
1339
1392
|
className,
|
|
1340
1393
|
)}
|
|
1341
1394
|
{...props}
|
|
@@ -1354,13 +1407,13 @@ function DialogContent({
|
|
|
1354
1407
|
<DialogPrimitive.Content
|
|
1355
1408
|
data-slot="dialog-content"
|
|
1356
1409
|
className={cn(
|
|
1357
|
-
"
|
|
1410
|
+
"data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 data-[state=closed]:animate-out data-[state=open]:animate-in sm:max-w-lg",
|
|
1358
1411
|
className,
|
|
1359
1412
|
)}
|
|
1360
1413
|
{...props}
|
|
1361
1414
|
>
|
|
1362
1415
|
{children}
|
|
1363
|
-
<DialogPrimitive.Close className="
|
|
1416
|
+
<DialogPrimitive.Close className="absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0">
|
|
1364
1417
|
<XIcon />
|
|
1365
1418
|
<span className="sr-only">Close</span>
|
|
1366
1419
|
</DialogPrimitive.Close>
|
|
@@ -1399,7 +1452,7 @@ function DialogTitle({
|
|
|
1399
1452
|
return (
|
|
1400
1453
|
<DialogPrimitive.Title
|
|
1401
1454
|
data-slot="dialog-title"
|
|
1402
|
-
className={cn("text-lg leading-none
|
|
1455
|
+
className={cn("font-semibold text-lg leading-none", className)}
|
|
1403
1456
|
{...props}
|
|
1404
1457
|
/>
|
|
1405
1458
|
);
|
|
@@ -1484,13 +1537,13 @@ function TooltipContent({
|
|
|
1484
1537
|
data-slot="tooltip-content"
|
|
1485
1538
|
sideOffset={sideOffset}
|
|
1486
1539
|
className={cn(
|
|
1487
|
-
"
|
|
1540
|
+
"fade-in-0 zoom-in-95 data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in text-balance rounded-md bg-primary px-3 py-1.5 text-primary-foreground text-xs data-[state=closed]:animate-out",
|
|
1488
1541
|
className,
|
|
1489
1542
|
)}
|
|
1490
1543
|
{...props}
|
|
1491
1544
|
>
|
|
1492
1545
|
{children}
|
|
1493
|
-
<TooltipPrimitive.Arrow className="
|
|
1546
|
+
<TooltipPrimitive.Arrow className="z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-primary fill-primary" />
|
|
1494
1547
|
</TooltipPrimitive.Content>
|
|
1495
1548
|
</TooltipPrimitive.Portal>
|
|
1496
1549
|
);
|
|
@@ -1533,34 +1586,33 @@ export default nextConfig;
|
|
|
1533
1586
|
"version": "0.0.0",
|
|
1534
1587
|
"type": "module",
|
|
1535
1588
|
"dependencies": {
|
|
1536
|
-
"@ai-sdk/openai": "^2.0.
|
|
1537
|
-
"@ai-sdk/react": "^2.0.
|
|
1589
|
+
"@ai-sdk/openai": "^2.0.84",
|
|
1590
|
+
"@ai-sdk/react": "^2.0.114",
|
|
1538
1591
|
"@assistant-ui/react": "workspace:^",
|
|
1539
1592
|
"@assistant-ui/react-ai-sdk": "workspace:*",
|
|
1540
1593
|
"@assistant-ui/react-markdown": "workspace:^",
|
|
1541
|
-
"@radix-ui/react-avatar": "^1.1.
|
|
1542
|
-
"@radix-ui/react-dialog": "^1.1.
|
|
1594
|
+
"@radix-ui/react-avatar": "^1.1.11",
|
|
1595
|
+
"@radix-ui/react-dialog": "^1.1.15",
|
|
1543
1596
|
"@radix-ui/react-slot": "^1.2.4",
|
|
1544
1597
|
"@radix-ui/react-tooltip": "^1.2.8",
|
|
1545
|
-
"@tailwindcss/postcss": "^4.1.
|
|
1546
|
-
"ai": "^5.0.
|
|
1598
|
+
"@tailwindcss/postcss": "^4.1.18",
|
|
1599
|
+
"ai": "^5.0.112",
|
|
1547
1600
|
"class-variance-authority": "^0.7.1",
|
|
1548
1601
|
"clsx": "^2.1.1",
|
|
1549
|
-
"lucide-react": "^0.
|
|
1550
|
-
"
|
|
1551
|
-
"next": "16.0.4",
|
|
1602
|
+
"lucide-react": "^0.560.0",
|
|
1603
|
+
"next": "16.0.10",
|
|
1552
1604
|
"postcss": "^8.5.6",
|
|
1553
|
-
"react": "19.2.
|
|
1554
|
-
"react-dom": "19.2.
|
|
1605
|
+
"react": "19.2.3",
|
|
1606
|
+
"react-dom": "19.2.3",
|
|
1555
1607
|
"remark-gfm": "^4.0.1",
|
|
1556
1608
|
"tailwind-merge": "^3.4.0",
|
|
1557
|
-
"tailwindcss": "^4.1.
|
|
1609
|
+
"tailwindcss": "^4.1.18",
|
|
1558
1610
|
"zod": "^4.1.13",
|
|
1559
|
-
"zustand": "^5.0.
|
|
1611
|
+
"zustand": "^5.0.9"
|
|
1560
1612
|
},
|
|
1561
1613
|
"devDependencies": {
|
|
1562
1614
|
"@assistant-ui/x-buildutils": "workspace:*",
|
|
1563
|
-
"@types/node": "^
|
|
1615
|
+
"@types/node": "^25.0.0",
|
|
1564
1616
|
"@types/react": "^19.2.7",
|
|
1565
1617
|
"@types/react-dom": "^19.2.3",
|
|
1566
1618
|
"tw-animate-css": "^1.4.0",
|
|
@@ -1569,8 +1621,7 @@ export default nextConfig;
|
|
|
1569
1621
|
"scripts": {
|
|
1570
1622
|
"dev": "next dev",
|
|
1571
1623
|
"build": "next build",
|
|
1572
|
-
"start": "next start"
|
|
1573
|
-
"lint": "eslint ."
|
|
1624
|
+
"start": "next start"
|
|
1574
1625
|
}
|
|
1575
1626
|
}
|
|
1576
1627
|
|