@assistant-ui/mcp-docs-server 0.1.10 → 0.1.12
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/with-ai-sdk-v5.md +23 -23
- package/.docs/organized/code-examples/with-assistant-transport.md +26 -26
- package/.docs/organized/code-examples/with-cloud.md +19 -19
- package/.docs/organized/code-examples/with-external-store.md +16 -16
- package/.docs/organized/code-examples/with-ffmpeg.md +20 -20
- package/.docs/organized/code-examples/with-langgraph.md +20 -20
- package/.docs/organized/code-examples/with-parent-id-grouping.md +16 -16
- package/.docs/organized/code-examples/with-react-hook-form.md +25 -25
- package/.docs/raw/docs/cloud/persistence/langgraph.mdx +22 -2
- package/.docs/raw/docs/getting-started.mdx +544 -153
- package/.docs/raw/docs/guides/Attachments.mdx +21 -0
- package/.docs/raw/docs/runtimes/ai-sdk/use-chat.mdx +2 -2
- package/.docs/raw/docs/runtimes/custom/custom-thread-list.mdx +218 -0
- package/.docs/raw/docs/runtimes/custom/external-store.mdx +31 -24
- package/.docs/raw/docs/runtimes/mastra/separate-server-integration.mdx +8 -3
- package/.docs/raw/docs/runtimes/pick-a-runtime.mdx +1 -1
- package/.docs/raw/docs/ui/AssistantModal.mdx +21 -0
- package/.docs/raw/docs/ui/AssistantSidebar.mdx +21 -0
- package/.docs/raw/docs/ui/Attachment.mdx +21 -0
- package/.docs/raw/docs/ui/Markdown.mdx +22 -1
- package/.docs/raw/docs/ui/Mermaid.mdx +22 -1
- package/.docs/raw/docs/ui/SyntaxHighlighting.mdx +43 -2
- package/.docs/raw/docs/ui/Thread.mdx +9 -3
- package/.docs/raw/docs/ui/ThreadList.mdx +48 -2
- package/.docs/raw/docs/ui/ToolFallback.mdx +21 -0
- package/package.json +6 -6
|
@@ -552,7 +552,7 @@ const defaultComponents = memoizeMarkdownComponents({
|
|
|
552
552
|
h2: ({ className, ...props }) => (
|
|
553
553
|
<h2
|
|
554
554
|
className={cn(
|
|
555
|
-
"mb-4
|
|
555
|
+
"mt-8 mb-4 scroll-m-20 text-3xl font-semibold tracking-tight first:mt-0 last:mb-0",
|
|
556
556
|
className,
|
|
557
557
|
)}
|
|
558
558
|
{...props}
|
|
@@ -561,7 +561,7 @@ const defaultComponents = memoizeMarkdownComponents({
|
|
|
561
561
|
h3: ({ className, ...props }) => (
|
|
562
562
|
<h3
|
|
563
563
|
className={cn(
|
|
564
|
-
"mb-4
|
|
564
|
+
"mt-6 mb-4 scroll-m-20 text-2xl font-semibold tracking-tight first:mt-0 last:mb-0",
|
|
565
565
|
className,
|
|
566
566
|
)}
|
|
567
567
|
{...props}
|
|
@@ -570,7 +570,7 @@ const defaultComponents = memoizeMarkdownComponents({
|
|
|
570
570
|
h4: ({ className, ...props }) => (
|
|
571
571
|
<h4
|
|
572
572
|
className={cn(
|
|
573
|
-
"mb-4
|
|
573
|
+
"mt-6 mb-4 scroll-m-20 text-xl font-semibold tracking-tight first:mt-0 last:mb-0",
|
|
574
574
|
className,
|
|
575
575
|
)}
|
|
576
576
|
{...props}
|
|
@@ -593,7 +593,7 @@ const defaultComponents = memoizeMarkdownComponents({
|
|
|
593
593
|
),
|
|
594
594
|
p: ({ className, ...props }) => (
|
|
595
595
|
<p
|
|
596
|
-
className={cn("
|
|
596
|
+
className={cn("mt-5 mb-5 leading-7 first:mt-0 last:mb-0", className)}
|
|
597
597
|
{...props}
|
|
598
598
|
/>
|
|
599
599
|
),
|
|
@@ -790,7 +790,7 @@ const ThreadWelcomeSuggestions: FC = () => {
|
|
|
790
790
|
method="replace"
|
|
791
791
|
autoSend
|
|
792
792
|
>
|
|
793
|
-
<span className="line-clamp-2 text-
|
|
793
|
+
<span className="line-clamp-2 text-sm font-semibold text-ellipsis">
|
|
794
794
|
What is the weather in Tokyo?
|
|
795
795
|
</span>
|
|
796
796
|
</ThreadPrimitive.Suggestion>
|
|
@@ -800,7 +800,7 @@ const ThreadWelcomeSuggestions: FC = () => {
|
|
|
800
800
|
method="replace"
|
|
801
801
|
autoSend
|
|
802
802
|
>
|
|
803
|
-
<span className="line-clamp-2 text-
|
|
803
|
+
<span className="line-clamp-2 text-sm font-semibold text-ellipsis">
|
|
804
804
|
What is assistant-ui?
|
|
805
805
|
</span>
|
|
806
806
|
</ThreadPrimitive.Suggestion>
|
|
@@ -856,7 +856,7 @@ const UserMessage: FC = () => {
|
|
|
856
856
|
<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">
|
|
857
857
|
<UserActionBar />
|
|
858
858
|
|
|
859
|
-
<div className="bg-muted text-foreground col-start-2 row-start-2 max-w-[calc(var(--thread-max-width)*0.8)]
|
|
859
|
+
<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">
|
|
860
860
|
<MessagePrimitive.Parts />
|
|
861
861
|
</div>
|
|
862
862
|
|
|
@@ -870,7 +870,7 @@ const UserActionBar: FC = () => {
|
|
|
870
870
|
<ActionBarPrimitive.Root
|
|
871
871
|
hideWhenRunning
|
|
872
872
|
autohide="not-last"
|
|
873
|
-
className="col-start-1 row-start-2
|
|
873
|
+
className="col-start-1 row-start-2 mt-2.5 mr-3 flex flex-col items-end"
|
|
874
874
|
>
|
|
875
875
|
<ActionBarPrimitive.Edit asChild>
|
|
876
876
|
<TooltipIconButton tooltip="Edit">
|
|
@@ -901,13 +901,13 @@ const EditComposer: FC = () => {
|
|
|
901
901
|
const AssistantMessage: FC = () => {
|
|
902
902
|
return (
|
|
903
903
|
<MessagePrimitive.Root className="relative grid w-full max-w-[var(--thread-max-width)] grid-cols-[auto_auto_1fr] grid-rows-[auto_1fr] py-4">
|
|
904
|
-
<div className="text-foreground col-span-2 col-start-2 row-start-1 my-1.5 max-w-[calc(var(--thread-max-width)*0.8)] break-words
|
|
904
|
+
<div className="text-foreground col-span-2 col-start-2 row-start-1 my-1.5 max-w-[calc(var(--thread-max-width)*0.8)] leading-7 break-words">
|
|
905
905
|
<MessagePrimitive.Parts components={{ Text: MarkdownText }} />
|
|
906
906
|
</div>
|
|
907
907
|
|
|
908
908
|
<AssistantActionBar />
|
|
909
909
|
|
|
910
|
-
<BranchPicker className="col-start-2 row-start-2 -
|
|
910
|
+
<BranchPicker className="col-start-2 row-start-2 mr-2 -ml-2" />
|
|
911
911
|
</MessagePrimitive.Root>
|
|
912
912
|
);
|
|
913
913
|
};
|
|
@@ -1151,7 +1151,7 @@ function TooltipContent({
|
|
|
1151
1151
|
data-slot="tooltip-content"
|
|
1152
1152
|
sideOffset={sideOffset}
|
|
1153
1153
|
className={cn(
|
|
1154
|
-
"bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out 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]
|
|
1154
|
+
"bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out 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] rounded-md px-3 py-1.5 text-xs text-balance",
|
|
1155
1155
|
className,
|
|
1156
1156
|
)}
|
|
1157
1157
|
{...props}
|
|
@@ -1191,7 +1191,7 @@ export function cn(...inputs: ClassValue[]) {
|
|
|
1191
1191
|
```typescript
|
|
1192
1192
|
/// <reference types="next" />
|
|
1193
1193
|
/// <reference types="next/image-types/global" />
|
|
1194
|
-
|
|
1194
|
+
import "./.next/types/routes.d.ts";
|
|
1195
1195
|
|
|
1196
1196
|
// NOTE: This file should not be edited
|
|
1197
1197
|
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
|
|
@@ -1225,7 +1225,7 @@ export default nextConfig;
|
|
|
1225
1225
|
"lint": "eslint ."
|
|
1226
1226
|
},
|
|
1227
1227
|
"dependencies": {
|
|
1228
|
-
"@ai-sdk/openai": "^2.0.
|
|
1228
|
+
"@ai-sdk/openai": "^2.0.53",
|
|
1229
1229
|
"@assistant-ui/react": "workspace:*",
|
|
1230
1230
|
"@assistant-ui/react-ai-sdk": "workspace:*",
|
|
1231
1231
|
"@assistant-ui/react-hook-form": "workspace:*",
|
|
@@ -1240,20 +1240,20 @@ export default nextConfig;
|
|
|
1240
1240
|
"@radix-ui/react-tabs": "^1.1.13",
|
|
1241
1241
|
"@radix-ui/react-tooltip": "^1.2.8",
|
|
1242
1242
|
"@react-hook/media-query": "^1.1.1",
|
|
1243
|
-
"ai": "^5.0.
|
|
1243
|
+
"ai": "^5.0.76",
|
|
1244
1244
|
"class-variance-authority": "^0.7.1",
|
|
1245
1245
|
"clsx": "^2.1.1",
|
|
1246
1246
|
"json-schema-to-zod": "^2.6.1",
|
|
1247
|
-
"lucide-react": "^0.
|
|
1248
|
-
"next": "
|
|
1247
|
+
"lucide-react": "^0.546.0",
|
|
1248
|
+
"next": "16.0.0",
|
|
1249
1249
|
"react": "19.2.0",
|
|
1250
1250
|
"react-dom": "19.2.0",
|
|
1251
|
-
"react-hook-form": "^7.
|
|
1251
|
+
"react-hook-form": "^7.65.0",
|
|
1252
1252
|
"react-resizable-panels": "^3.0.6",
|
|
1253
1253
|
"remark-gfm": "^4.0.1",
|
|
1254
1254
|
"tailwind-merge": "^3.3.1",
|
|
1255
1255
|
"tw-animate-css": "^1.4.0",
|
|
1256
|
-
"zod": "^4.1.
|
|
1256
|
+
"zod": "^4.1.12",
|
|
1257
1257
|
"zustand": "^5.0.8"
|
|
1258
1258
|
},
|
|
1259
1259
|
"devDependencies": {
|
|
@@ -1262,9 +1262,9 @@ export default nextConfig;
|
|
|
1262
1262
|
"@types/react": "^19",
|
|
1263
1263
|
"@types/react-dom": "^19",
|
|
1264
1264
|
"eslint": "^9",
|
|
1265
|
-
"eslint-config-next": "
|
|
1265
|
+
"eslint-config-next": "16.0.0",
|
|
1266
1266
|
"postcss": "^8",
|
|
1267
|
-
"tailwindcss": "^4.1.
|
|
1267
|
+
"tailwindcss": "^4.1.15",
|
|
1268
1268
|
"typescript": "^5.9.3"
|
|
1269
1269
|
}
|
|
1270
1270
|
}
|
|
@@ -417,7 +417,7 @@ const defaultComponents = memoizeMarkdownComponents({
|
|
|
417
417
|
h2: ({ className, ...props }) => (
|
|
418
418
|
<h2
|
|
419
419
|
className={cn(
|
|
420
|
-
"mb-4
|
|
420
|
+
"mt-8 mb-4 scroll-m-20 text-3xl font-semibold tracking-tight first:mt-0 last:mb-0",
|
|
421
421
|
className,
|
|
422
422
|
)}
|
|
423
423
|
{...props}
|
|
@@ -426,7 +426,7 @@ const defaultComponents = memoizeMarkdownComponents({
|
|
|
426
426
|
h3: ({ className, ...props }) => (
|
|
427
427
|
<h3
|
|
428
428
|
className={cn(
|
|
429
|
-
"mb-4
|
|
429
|
+
"mt-6 mb-4 scroll-m-20 text-2xl font-semibold tracking-tight first:mt-0 last:mb-0",
|
|
430
430
|
className,
|
|
431
431
|
)}
|
|
432
432
|
{...props}
|
|
@@ -435,7 +435,7 @@ const defaultComponents = memoizeMarkdownComponents({
|
|
|
435
435
|
h4: ({ className, ...props }) => (
|
|
436
436
|
<h4
|
|
437
437
|
className={cn(
|
|
438
|
-
"mb-4
|
|
438
|
+
"mt-6 mb-4 scroll-m-20 text-xl font-semibold tracking-tight first:mt-0 last:mb-0",
|
|
439
439
|
className,
|
|
440
440
|
)}
|
|
441
441
|
{...props}
|
|
@@ -458,7 +458,7 @@ const defaultComponents = memoizeMarkdownComponents({
|
|
|
458
458
|
),
|
|
459
459
|
p: ({ className, ...props }) => (
|
|
460
460
|
<p
|
|
461
|
-
className={cn("
|
|
461
|
+
className={cn("mt-5 mb-5 leading-7 first:mt-0 last:mb-0", className)}
|
|
462
462
|
{...props}
|
|
463
463
|
/>
|
|
464
464
|
),
|
|
@@ -602,7 +602,7 @@ const ThreadListItems: FC = () => {
|
|
|
602
602
|
|
|
603
603
|
const ThreadListItem: FC = () => {
|
|
604
604
|
return (
|
|
605
|
-
<ThreadListItemPrimitive.Root className="data-[active]:bg-muted hover:bg-muted focus-visible:bg-muted focus-visible:ring-ring flex items-center gap-2 rounded-lg transition-all focus-visible:
|
|
605
|
+
<ThreadListItemPrimitive.Root className="data-[active]:bg-muted hover:bg-muted focus-visible:bg-muted focus-visible:ring-ring flex items-center gap-2 rounded-lg transition-all focus-visible:ring-2 focus-visible:outline-none">
|
|
606
606
|
<ThreadListItemPrimitive.Trigger className="flex-grow px-3 py-2 text-start">
|
|
607
607
|
<ThreadListItemTitle />
|
|
608
608
|
</ThreadListItemPrimitive.Trigger>
|
|
@@ -623,7 +623,7 @@ const ThreadListItemArchive: FC = () => {
|
|
|
623
623
|
return (
|
|
624
624
|
<ThreadListItemPrimitive.Archive asChild>
|
|
625
625
|
<TooltipIconButton
|
|
626
|
-
className="hover:text-primary text-foreground ml-auto
|
|
626
|
+
className="hover:text-primary text-foreground mr-3 ml-auto size-4 p-0"
|
|
627
627
|
variant="ghost"
|
|
628
628
|
tooltip="Archive thread"
|
|
629
629
|
>
|
|
@@ -730,7 +730,7 @@ const ThreadWelcomeSuggestions: FC = () => {
|
|
|
730
730
|
method="replace"
|
|
731
731
|
autoSend
|
|
732
732
|
>
|
|
733
|
-
<span className="line-clamp-2 text-
|
|
733
|
+
<span className="line-clamp-2 text-sm font-semibold text-ellipsis">
|
|
734
734
|
What is the weather in Tokyo?
|
|
735
735
|
</span>
|
|
736
736
|
</ThreadPrimitive.Suggestion>
|
|
@@ -740,7 +740,7 @@ const ThreadWelcomeSuggestions: FC = () => {
|
|
|
740
740
|
method="replace"
|
|
741
741
|
autoSend
|
|
742
742
|
>
|
|
743
|
-
<span className="line-clamp-2 text-
|
|
743
|
+
<span className="line-clamp-2 text-sm font-semibold text-ellipsis">
|
|
744
744
|
What is assistant-ui?
|
|
745
745
|
</span>
|
|
746
746
|
</ThreadPrimitive.Suggestion>
|
|
@@ -796,7 +796,7 @@ const UserMessage: FC = () => {
|
|
|
796
796
|
<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">
|
|
797
797
|
<UserActionBar />
|
|
798
798
|
|
|
799
|
-
<div className="bg-muted text-foreground col-start-2 row-start-2 max-w-[calc(var(--thread-max-width)*0.8)]
|
|
799
|
+
<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">
|
|
800
800
|
<MessagePrimitive.Parts />
|
|
801
801
|
</div>
|
|
802
802
|
|
|
@@ -810,7 +810,7 @@ const UserActionBar: FC = () => {
|
|
|
810
810
|
<ActionBarPrimitive.Root
|
|
811
811
|
hideWhenRunning
|
|
812
812
|
autohide="not-last"
|
|
813
|
-
className="col-start-1 row-start-2
|
|
813
|
+
className="col-start-1 row-start-2 mt-2.5 mr-3 flex flex-col items-end"
|
|
814
814
|
>
|
|
815
815
|
<ActionBarPrimitive.Edit asChild>
|
|
816
816
|
<TooltipIconButton tooltip="Edit">
|
|
@@ -841,13 +841,13 @@ const EditComposer: FC = () => {
|
|
|
841
841
|
const AssistantMessage: FC = () => {
|
|
842
842
|
return (
|
|
843
843
|
<MessagePrimitive.Root className="relative grid w-full max-w-[var(--thread-max-width)] grid-cols-[auto_auto_1fr] grid-rows-[auto_1fr] py-4">
|
|
844
|
-
<div className="text-foreground col-span-2 col-start-2 row-start-1 my-1.5 max-w-[calc(var(--thread-max-width)*0.8)] break-words
|
|
844
|
+
<div className="text-foreground col-span-2 col-start-2 row-start-1 my-1.5 max-w-[calc(var(--thread-max-width)*0.8)] leading-7 break-words">
|
|
845
845
|
<MessagePrimitive.Parts components={{ Text: MarkdownText }} />
|
|
846
846
|
</div>
|
|
847
847
|
|
|
848
848
|
<AssistantActionBar />
|
|
849
849
|
|
|
850
|
-
<BranchPicker className="col-start-2 row-start-2 -
|
|
850
|
+
<BranchPicker className="col-start-2 row-start-2 mr-2 -ml-2" />
|
|
851
851
|
</MessagePrimitive.Root>
|
|
852
852
|
);
|
|
853
853
|
};
|
|
@@ -1414,7 +1414,7 @@ const CardTitle = React.forwardRef<
|
|
|
1414
1414
|
>(({ className, ...props }, ref) => (
|
|
1415
1415
|
<div
|
|
1416
1416
|
ref={ref}
|
|
1417
|
-
className={cn("font-semibold
|
|
1417
|
+
className={cn("leading-none font-semibold tracking-tight", className)}
|
|
1418
1418
|
{...props}
|
|
1419
1419
|
/>
|
|
1420
1420
|
));
|
|
@@ -1514,7 +1514,7 @@ function TooltipContent({
|
|
|
1514
1514
|
data-slot="tooltip-content"
|
|
1515
1515
|
sideOffset={sideOffset}
|
|
1516
1516
|
className={cn(
|
|
1517
|
-
"bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out 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 origin-(--radix-tooltip-content-transform-origin)
|
|
1517
|
+
"bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out 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) rounded-md px-3 py-1.5 text-xs text-balance",
|
|
1518
1518
|
className,
|
|
1519
1519
|
)}
|
|
1520
1520
|
{...props}
|
|
@@ -1631,7 +1631,7 @@ export function cn(...inputs: ClassValue[]) {
|
|
|
1631
1631
|
```typescript
|
|
1632
1632
|
/// <reference types="next" />
|
|
1633
1633
|
/// <reference types="next/image-types/global" />
|
|
1634
|
-
|
|
1634
|
+
import "./.next/types/routes.d.ts";
|
|
1635
1635
|
|
|
1636
1636
|
// NOTE: This file should not be edited
|
|
1637
1637
|
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
|
|
@@ -1675,16 +1675,16 @@ export default nextConfig;
|
|
|
1675
1675
|
"@assistant-ui/react": "workspace:*",
|
|
1676
1676
|
"@assistant-ui/react-langgraph": "workspace:*",
|
|
1677
1677
|
"@assistant-ui/react-markdown": "workspace:*",
|
|
1678
|
-
"@langchain/langgraph-sdk": "^0.
|
|
1678
|
+
"@langchain/langgraph-sdk": "^1.0.0",
|
|
1679
1679
|
"@radix-ui/react-slot": "^1.2.3",
|
|
1680
1680
|
"@radix-ui/react-tooltip": "^1.2.8",
|
|
1681
1681
|
"class-variance-authority": "^0.7.1",
|
|
1682
1682
|
"clsx": "^2.1.1",
|
|
1683
1683
|
"js-cookie": "^3.0.5",
|
|
1684
1684
|
"jsonwebtoken": "^9.0.2",
|
|
1685
|
-
"lucide-react": "^0.
|
|
1685
|
+
"lucide-react": "^0.546.0",
|
|
1686
1686
|
"nanoid": "5.1.6",
|
|
1687
|
-
"next": "
|
|
1687
|
+
"next": "16.0.0",
|
|
1688
1688
|
"react": "19.2.0",
|
|
1689
1689
|
"react-dom": "19.2.0",
|
|
1690
1690
|
"remark-gfm": "^4.0.1",
|
|
@@ -1699,9 +1699,9 @@ export default nextConfig;
|
|
|
1699
1699
|
"@types/react": "^19",
|
|
1700
1700
|
"@types/react-dom": "^19",
|
|
1701
1701
|
"eslint": "^9",
|
|
1702
|
-
"eslint-config-next": "
|
|
1702
|
+
"eslint-config-next": "16.0.0",
|
|
1703
1703
|
"postcss": "^8",
|
|
1704
|
-
"tailwindcss": "^4.1.
|
|
1704
|
+
"tailwindcss": "^4.1.15",
|
|
1705
1705
|
"typescript": "^5.9.3"
|
|
1706
1706
|
}
|
|
1707
1707
|
}
|
|
@@ -503,7 +503,7 @@ const defaultComponents = memoizeMarkdownComponents({
|
|
|
503
503
|
h2: ({ className, ...props }) => (
|
|
504
504
|
<h2
|
|
505
505
|
className={cn(
|
|
506
|
-
"mb-4
|
|
506
|
+
"mt-8 mb-4 scroll-m-20 text-3xl font-semibold tracking-tight first:mt-0 last:mb-0",
|
|
507
507
|
className,
|
|
508
508
|
)}
|
|
509
509
|
{...props}
|
|
@@ -512,7 +512,7 @@ const defaultComponents = memoizeMarkdownComponents({
|
|
|
512
512
|
h3: ({ className, ...props }) => (
|
|
513
513
|
<h3
|
|
514
514
|
className={cn(
|
|
515
|
-
"mb-4
|
|
515
|
+
"mt-6 mb-4 scroll-m-20 text-2xl font-semibold tracking-tight first:mt-0 last:mb-0",
|
|
516
516
|
className,
|
|
517
517
|
)}
|
|
518
518
|
{...props}
|
|
@@ -521,7 +521,7 @@ const defaultComponents = memoizeMarkdownComponents({
|
|
|
521
521
|
h4: ({ className, ...props }) => (
|
|
522
522
|
<h4
|
|
523
523
|
className={cn(
|
|
524
|
-
"mb-4
|
|
524
|
+
"mt-6 mb-4 scroll-m-20 text-xl font-semibold tracking-tight first:mt-0 last:mb-0",
|
|
525
525
|
className,
|
|
526
526
|
)}
|
|
527
527
|
{...props}
|
|
@@ -544,7 +544,7 @@ const defaultComponents = memoizeMarkdownComponents({
|
|
|
544
544
|
),
|
|
545
545
|
p: ({ className, ...props }) => (
|
|
546
546
|
<p
|
|
547
|
-
className={cn("
|
|
547
|
+
className={cn("mt-5 mb-5 leading-7 first:mt-0 last:mb-0", className)}
|
|
548
548
|
{...props}
|
|
549
549
|
/>
|
|
550
550
|
),
|
|
@@ -748,7 +748,7 @@ const ThreadWelcomeSuggestions: FC = () => {
|
|
|
748
748
|
method="replace"
|
|
749
749
|
autoSend
|
|
750
750
|
>
|
|
751
|
-
<span className="line-clamp-2 text-
|
|
751
|
+
<span className="line-clamp-2 text-sm font-semibold text-ellipsis">
|
|
752
752
|
Tell me more about this
|
|
753
753
|
</span>
|
|
754
754
|
</ThreadPrimitive.Suggestion>
|
|
@@ -758,7 +758,7 @@ const ThreadWelcomeSuggestions: FC = () => {
|
|
|
758
758
|
method="replace"
|
|
759
759
|
autoSend
|
|
760
760
|
>
|
|
761
|
-
<span className="line-clamp-2 text-
|
|
761
|
+
<span className="line-clamp-2 text-sm font-semibold text-ellipsis">
|
|
762
762
|
What are the latest updates?
|
|
763
763
|
</span>
|
|
764
764
|
</ThreadPrimitive.Suggestion>
|
|
@@ -814,7 +814,7 @@ const UserMessage: FC = () => {
|
|
|
814
814
|
<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">
|
|
815
815
|
<UserActionBar />
|
|
816
816
|
|
|
817
|
-
<div className="bg-muted text-foreground col-start-2 row-start-2 max-w-[calc(var(--thread-max-width)*0.8)]
|
|
817
|
+
<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">
|
|
818
818
|
<MessagePrimitive.Parts />
|
|
819
819
|
</div>
|
|
820
820
|
|
|
@@ -828,7 +828,7 @@ const UserActionBar: FC = () => {
|
|
|
828
828
|
<ActionBarPrimitive.Root
|
|
829
829
|
hideWhenRunning
|
|
830
830
|
autohide="not-last"
|
|
831
|
-
className="col-start-1 row-start-2
|
|
831
|
+
className="col-start-1 row-start-2 mt-2.5 mr-3 flex flex-col items-end"
|
|
832
832
|
>
|
|
833
833
|
<ActionBarPrimitive.Edit asChild>
|
|
834
834
|
<TooltipIconButton tooltip="Edit">
|
|
@@ -904,7 +904,7 @@ const ParentIdGroup: FC<
|
|
|
904
904
|
const AssistantMessage: FC = () => {
|
|
905
905
|
return (
|
|
906
906
|
<MessagePrimitive.Root className="relative grid w-full max-w-[var(--thread-max-width)] grid-cols-[auto_auto_1fr] grid-rows-[auto_1fr] py-4">
|
|
907
|
-
<div className="text-foreground col-span-2 col-start-2 row-start-1 my-1.5 max-w-[calc(var(--thread-max-width)*0.8)] break-words
|
|
907
|
+
<div className="text-foreground col-span-2 col-start-2 row-start-1 my-1.5 max-w-[calc(var(--thread-max-width)*0.8)] leading-7 break-words">
|
|
908
908
|
<MessagePrimitive.Unstable_PartsGroupedByParentId
|
|
909
909
|
components={{
|
|
910
910
|
Text: MarkdownText,
|
|
@@ -944,7 +944,7 @@ const AssistantMessage: FC = () => {
|
|
|
944
944
|
|
|
945
945
|
<AssistantActionBar />
|
|
946
946
|
|
|
947
|
-
<BranchPicker className="col-start-2 row-start-2 -
|
|
947
|
+
<BranchPicker className="col-start-2 row-start-2 mr-2 -ml-2" />
|
|
948
948
|
</MessagePrimitive.Root>
|
|
949
949
|
);
|
|
950
950
|
};
|
|
@@ -1186,7 +1186,7 @@ function TooltipContent({
|
|
|
1186
1186
|
data-slot="tooltip-content"
|
|
1187
1187
|
sideOffset={sideOffset}
|
|
1188
1188
|
className={cn(
|
|
1189
|
-
"bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out 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]
|
|
1189
|
+
"bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out 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] rounded-md px-3 py-1.5 text-xs text-balance",
|
|
1190
1190
|
className,
|
|
1191
1191
|
)}
|
|
1192
1192
|
{...props}
|
|
@@ -1248,15 +1248,15 @@ export default nextConfig;
|
|
|
1248
1248
|
"lint": "eslint ."
|
|
1249
1249
|
},
|
|
1250
1250
|
"dependencies": {
|
|
1251
|
-
"@ai-sdk/openai": "^2.0.
|
|
1251
|
+
"@ai-sdk/openai": "^2.0.53",
|
|
1252
1252
|
"@assistant-ui/react": "workspace:*",
|
|
1253
1253
|
"@assistant-ui/react-markdown": "workspace:*",
|
|
1254
1254
|
"@radix-ui/react-slot": "^1.2.3",
|
|
1255
1255
|
"@radix-ui/react-tooltip": "^1.2.8",
|
|
1256
1256
|
"class-variance-authority": "^0.7.1",
|
|
1257
1257
|
"clsx": "^2.1.1",
|
|
1258
|
-
"lucide-react": "^0.
|
|
1259
|
-
"next": "
|
|
1258
|
+
"lucide-react": "^0.546.0",
|
|
1259
|
+
"next": "16.0.0",
|
|
1260
1260
|
"react": "19.2.0",
|
|
1261
1261
|
"react-dom": "19.2.0",
|
|
1262
1262
|
"remark-gfm": "^4.0.1",
|
|
@@ -1269,9 +1269,9 @@ export default nextConfig;
|
|
|
1269
1269
|
"@types/react": "^19",
|
|
1270
1270
|
"@types/react-dom": "^19",
|
|
1271
1271
|
"eslint": "^9",
|
|
1272
|
-
"eslint-config-next": "
|
|
1272
|
+
"eslint-config-next": "16.0.0",
|
|
1273
1273
|
"postcss": "^8",
|
|
1274
|
-
"tailwindcss": "^4.1.
|
|
1274
|
+
"tailwindcss": "^4.1.15",
|
|
1275
1275
|
"typescript": "^5"
|
|
1276
1276
|
}
|
|
1277
1277
|
}
|
|
@@ -444,7 +444,7 @@ const defaultComponents = memoizeMarkdownComponents({
|
|
|
444
444
|
h2: ({ className, ...props }) => (
|
|
445
445
|
<h2
|
|
446
446
|
className={cn(
|
|
447
|
-
"mb-4
|
|
447
|
+
"mt-8 mb-4 scroll-m-20 text-3xl font-semibold tracking-tight first:mt-0 last:mb-0",
|
|
448
448
|
className,
|
|
449
449
|
)}
|
|
450
450
|
{...props}
|
|
@@ -453,7 +453,7 @@ const defaultComponents = memoizeMarkdownComponents({
|
|
|
453
453
|
h3: ({ className, ...props }) => (
|
|
454
454
|
<h3
|
|
455
455
|
className={cn(
|
|
456
|
-
"mb-4
|
|
456
|
+
"mt-6 mb-4 scroll-m-20 text-2xl font-semibold tracking-tight first:mt-0 last:mb-0",
|
|
457
457
|
className,
|
|
458
458
|
)}
|
|
459
459
|
{...props}
|
|
@@ -462,7 +462,7 @@ const defaultComponents = memoizeMarkdownComponents({
|
|
|
462
462
|
h4: ({ className, ...props }) => (
|
|
463
463
|
<h4
|
|
464
464
|
className={cn(
|
|
465
|
-
"mb-4
|
|
465
|
+
"mt-6 mb-4 scroll-m-20 text-xl font-semibold tracking-tight first:mt-0 last:mb-0",
|
|
466
466
|
className,
|
|
467
467
|
)}
|
|
468
468
|
{...props}
|
|
@@ -485,7 +485,7 @@ const defaultComponents = memoizeMarkdownComponents({
|
|
|
485
485
|
),
|
|
486
486
|
p: ({ className, ...props }) => (
|
|
487
487
|
<p
|
|
488
|
-
className={cn("
|
|
488
|
+
className={cn("mt-5 mb-5 leading-7 first:mt-0 last:mb-0", className)}
|
|
489
489
|
{...props}
|
|
490
490
|
/>
|
|
491
491
|
),
|
|
@@ -682,7 +682,7 @@ const ThreadWelcomeSuggestions: FC = () => {
|
|
|
682
682
|
method="replace"
|
|
683
683
|
autoSend
|
|
684
684
|
>
|
|
685
|
-
<span className="line-clamp-2 text-
|
|
685
|
+
<span className="line-clamp-2 text-sm font-semibold text-ellipsis">
|
|
686
686
|
What is the weather in Tokyo?
|
|
687
687
|
</span>
|
|
688
688
|
</ThreadPrimitive.Suggestion>
|
|
@@ -692,7 +692,7 @@ const ThreadWelcomeSuggestions: FC = () => {
|
|
|
692
692
|
method="replace"
|
|
693
693
|
autoSend
|
|
694
694
|
>
|
|
695
|
-
<span className="line-clamp-2 text-
|
|
695
|
+
<span className="line-clamp-2 text-sm font-semibold text-ellipsis">
|
|
696
696
|
What is assistant-ui?
|
|
697
697
|
</span>
|
|
698
698
|
</ThreadPrimitive.Suggestion>
|
|
@@ -748,7 +748,7 @@ const UserMessage: FC = () => {
|
|
|
748
748
|
<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">
|
|
749
749
|
<UserActionBar />
|
|
750
750
|
|
|
751
|
-
<div className="bg-muted text-foreground col-start-2 row-start-2 max-w-[calc(var(--thread-max-width)*0.8)]
|
|
751
|
+
<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">
|
|
752
752
|
<MessagePrimitive.Parts />
|
|
753
753
|
</div>
|
|
754
754
|
|
|
@@ -762,7 +762,7 @@ const UserActionBar: FC = () => {
|
|
|
762
762
|
<ActionBarPrimitive.Root
|
|
763
763
|
hideWhenRunning
|
|
764
764
|
autohide="not-last"
|
|
765
|
-
className="col-start-1 row-start-2
|
|
765
|
+
className="col-start-1 row-start-2 mt-2.5 mr-3 flex flex-col items-end"
|
|
766
766
|
>
|
|
767
767
|
<ActionBarPrimitive.Edit asChild>
|
|
768
768
|
<TooltipIconButton tooltip="Edit">
|
|
@@ -793,13 +793,13 @@ const EditComposer: FC = () => {
|
|
|
793
793
|
const AssistantMessage: FC = () => {
|
|
794
794
|
return (
|
|
795
795
|
<MessagePrimitive.Root className="relative grid w-full max-w-[var(--thread-max-width)] grid-cols-[auto_auto_1fr] grid-rows-[auto_1fr] py-4">
|
|
796
|
-
<div className="text-foreground col-span-2 col-start-2 row-start-1 my-1.5 max-w-[calc(var(--thread-max-width)*0.8)] break-words
|
|
796
|
+
<div className="text-foreground col-span-2 col-start-2 row-start-1 my-1.5 max-w-[calc(var(--thread-max-width)*0.8)] leading-7 break-words">
|
|
797
797
|
<MessagePrimitive.Parts components={{ Text: MarkdownText }} />
|
|
798
798
|
</div>
|
|
799
799
|
|
|
800
800
|
<AssistantActionBar />
|
|
801
801
|
|
|
802
|
-
<BranchPicker className="col-start-2 row-start-2 -
|
|
802
|
+
<BranchPicker className="col-start-2 row-start-2 mr-2 -ml-2" />
|
|
803
803
|
</MessagePrimitive.Root>
|
|
804
804
|
);
|
|
805
805
|
};
|
|
@@ -1326,7 +1326,7 @@ function Input({ className, type, ...props }: React.ComponentProps<"input">) {
|
|
|
1326
1326
|
type={type}
|
|
1327
1327
|
data-slot="input"
|
|
1328
1328
|
className={cn(
|
|
1329
|
-
"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input
|
|
1329
|
+
"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
|
|
1330
1330
|
"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
|
|
1331
1331
|
"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
|
|
1332
1332
|
className,
|
|
@@ -1358,7 +1358,7 @@ function Label({
|
|
|
1358
1358
|
<LabelPrimitive.Root
|
|
1359
1359
|
data-slot="label"
|
|
1360
1360
|
className={cn(
|
|
1361
|
-
"flex
|
|
1361
|
+
"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
|
|
1362
1362
|
className,
|
|
1363
1363
|
)}
|
|
1364
1364
|
{...props}
|
|
@@ -1414,13 +1414,13 @@ function ResizableHandle({
|
|
|
1414
1414
|
<ResizablePrimitive.PanelResizeHandle
|
|
1415
1415
|
data-slot="resizable-handle"
|
|
1416
1416
|
className={cn(
|
|
1417
|
-
"bg-border focus-visible:ring-ring
|
|
1417
|
+
"bg-border focus-visible:ring-ring relative flex w-px items-center justify-center after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-offset-1 focus-visible:outline-hidden data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:translate-x-0 data-[panel-group-direction=vertical]:after:-translate-y-1/2 [&[data-panel-group-direction=vertical]>div]:rotate-90",
|
|
1418
1418
|
className,
|
|
1419
1419
|
)}
|
|
1420
1420
|
{...props}
|
|
1421
1421
|
>
|
|
1422
1422
|
{withHandle && (
|
|
1423
|
-
<div className="bg-border
|
|
1423
|
+
<div className="bg-border z-10 flex h-4 w-3 items-center justify-center rounded-xs border">
|
|
1424
1424
|
<GripVerticalIcon className="size-2.5" />
|
|
1425
1425
|
</div>
|
|
1426
1426
|
)}
|
|
@@ -1479,7 +1479,7 @@ function TabsTrigger({
|
|
|
1479
1479
|
<TabsPrimitive.Trigger
|
|
1480
1480
|
data-slot="tabs-trigger"
|
|
1481
1481
|
className={cn(
|
|
1482
|
-
"data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5
|
|
1482
|
+
"data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
1483
1483
|
className,
|
|
1484
1484
|
)}
|
|
1485
1485
|
{...props}
|
|
@@ -1555,7 +1555,7 @@ function TooltipContent({
|
|
|
1555
1555
|
data-slot="tooltip-content"
|
|
1556
1556
|
sideOffset={sideOffset}
|
|
1557
1557
|
className={cn(
|
|
1558
|
-
"bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out 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]
|
|
1558
|
+
"bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out 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] rounded-md px-3 py-1.5 text-xs text-balance",
|
|
1559
1559
|
className,
|
|
1560
1560
|
)}
|
|
1561
1561
|
{...props}
|
|
@@ -1613,7 +1613,7 @@ export function cn(...inputs: ClassValue[]) {
|
|
|
1613
1613
|
```typescript
|
|
1614
1614
|
/// <reference types="next" />
|
|
1615
1615
|
/// <reference types="next/image-types/global" />
|
|
1616
|
-
|
|
1616
|
+
import "./.next/types/routes.d.ts";
|
|
1617
1617
|
|
|
1618
1618
|
// NOTE: This file should not be edited
|
|
1619
1619
|
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
|
|
@@ -1647,7 +1647,7 @@ export default nextConfig;
|
|
|
1647
1647
|
"lint": "eslint ."
|
|
1648
1648
|
},
|
|
1649
1649
|
"dependencies": {
|
|
1650
|
-
"@ai-sdk/openai": "^2.0.
|
|
1650
|
+
"@ai-sdk/openai": "^2.0.53",
|
|
1651
1651
|
"@assistant-ui/react": "workspace:*",
|
|
1652
1652
|
"@assistant-ui/react-ai-sdk": "workspace:*",
|
|
1653
1653
|
"@assistant-ui/react-hook-form": "workspace:*",
|
|
@@ -1660,20 +1660,20 @@ export default nextConfig;
|
|
|
1660
1660
|
"@radix-ui/react-tabs": "^1.1.13",
|
|
1661
1661
|
"@radix-ui/react-tooltip": "^1.2.8",
|
|
1662
1662
|
"@react-hook/media-query": "^1.1.1",
|
|
1663
|
-
"ai": "^5.0.
|
|
1663
|
+
"ai": "^5.0.76",
|
|
1664
1664
|
"class-variance-authority": "^0.7.1",
|
|
1665
1665
|
"clsx": "^2.1.1",
|
|
1666
1666
|
"json-schema-to-zod": "^2.6.1",
|
|
1667
|
-
"lucide-react": "^0.
|
|
1668
|
-
"next": "
|
|
1667
|
+
"lucide-react": "^0.546.0",
|
|
1668
|
+
"next": "16.0.0",
|
|
1669
1669
|
"react": "19.2.0",
|
|
1670
1670
|
"react-dom": "19.2.0",
|
|
1671
|
-
"react-hook-form": "^7.
|
|
1671
|
+
"react-hook-form": "^7.65.0",
|
|
1672
1672
|
"react-resizable-panels": "^3.0.6",
|
|
1673
1673
|
"remark-gfm": "^4.0.1",
|
|
1674
1674
|
"tailwind-merge": "^3.3.1",
|
|
1675
1675
|
"tw-animate-css": "^1.4.0",
|
|
1676
|
-
"zod": "^4.1.
|
|
1676
|
+
"zod": "^4.1.12",
|
|
1677
1677
|
"zustand": "^5.0.8"
|
|
1678
1678
|
},
|
|
1679
1679
|
"devDependencies": {
|
|
@@ -1682,9 +1682,9 @@ export default nextConfig;
|
|
|
1682
1682
|
"@types/react": "^19",
|
|
1683
1683
|
"@types/react-dom": "^19",
|
|
1684
1684
|
"eslint": "^9",
|
|
1685
|
-
"eslint-config-next": "
|
|
1685
|
+
"eslint-config-next": "16.0.0",
|
|
1686
1686
|
"postcss": "^8",
|
|
1687
|
-
"tailwindcss": "^4.1.
|
|
1687
|
+
"tailwindcss": "^4.1.15",
|
|
1688
1688
|
"typescript": "^5.9.3"
|
|
1689
1689
|
}
|
|
1690
1690
|
}
|