From 4b50ab2185de053612674012e429aa6cf36f8764 Mon Sep 17 00:00:00 2001 From: Zhang Minghan Date: Mon, 18 Mar 2024 11:45:34 +0800 Subject: [PATCH] feat: add market land feature --- app/src-tauri/tauri.conf.json | 2 +- app/src/assets/pages/home.less | 3 +- app/src/components/home/ChatWrapper.tsx | 2 +- app/src/components/home/ModelMarket.tsx | 4 + .../components/home/assemblies/ChatAction.tsx | 97 ++++++++++++++++++- .../components/home/assemblies/ChatInput.tsx | 8 +- app/src/components/ui/button.tsx | 1 + app/src/components/ui/textarea.tsx | 8 +- app/src/conf/bootstrap.ts | 2 +- app/src/resources/i18n/cn.json | 2 + app/src/resources/i18n/en.json | 4 +- app/src/resources/i18n/ja.json | 4 +- app/src/resources/i18n/ru.json | 4 +- app/tailwind.config.js | 1 + 14 files changed, 124 insertions(+), 18 deletions(-) diff --git a/app/src-tauri/tauri.conf.json b/app/src-tauri/tauri.conf.json index a1c50d96..83488f21 100644 --- a/app/src-tauri/tauri.conf.json +++ b/app/src-tauri/tauri.conf.json @@ -8,7 +8,7 @@ }, "package": { "productName": "chatnio", - "version": "3.10.7" + "version": "3.10.8" }, "tauri": { "allowlist": { diff --git a/app/src/assets/pages/home.less b/app/src/assets/pages/home.less index 4f7a8595..bfb1de08 100644 --- a/app/src/assets/pages/home.less +++ b/app/src/assets/pages/home.less @@ -759,8 +759,7 @@ width: 100%; color: hsl(var(--text)); white-space: pre-wrap; - scrollbar-width: thin; - padding-right: 3rem; + padding-right: 3.25rem; &.align { text-align: center; diff --git a/app/src/components/home/ChatWrapper.tsx b/app/src/components/home/ChatWrapper.tsx index 012d1ca9..16ff1059 100644 --- a/app/src/components/home/ChatWrapper.tsx +++ b/app/src/components/home/ChatWrapper.tsx @@ -182,7 +182,7 @@ function ChatWrapper() {
-
+
(isUrl(avatar) ? avatar : `/icons/${avatar}`), [avatar]); +} + function SearchBar({ value, onChange }: SearchBarProps) { const { t } = useTranslation(); diff --git a/app/src/components/home/assemblies/ChatAction.tsx b/app/src/components/home/assemblies/ChatAction.tsx index c7ff3b6f..fcef21f1 100644 --- a/app/src/components/home/assemblies/ChatAction.tsx +++ b/app/src/components/home/assemblies/ChatAction.tsx @@ -1,10 +1,31 @@ -import { openMarket, openMask, selectWeb, toggleWeb } from "@/store/chat.ts"; -import { Blocks, Globe, Settings, Wand2 } from "lucide-react"; +import { + openMarket, + openMask, + selectModel, + selectSupportModels, + selectWeb, + toggleWeb, + useConversationActions, +} from "@/store/chat.ts"; +import { Blocks, Globe, LandPlot, Play, Settings, Wand2 } from "lucide-react"; import { useDispatch, useSelector } from "react-redux"; import { useTranslation } from "react-i18next"; import React, { useEffect, useRef } from "react"; import { openDialog } from "@/store/settings.ts"; import { cn } from "@/components/ui/lib/utils.ts"; +import { + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog.tsx"; +import { ScrollArea } from "@/components/ui/scroll-area.tsx"; +import { getModelAvatar } from "@/components/home/ModelMarket.tsx"; +import { Button } from "@/components/ui/button.tsx"; +import Tips from "@/components/Tips.tsx"; +import { Model } from "@/api/types.tsx"; type ChatActionProps = { className?: string; @@ -82,10 +103,76 @@ export function MarketAction() { const { t } = useTranslation(); const dispatch = useDispatch(); + const current = useSelector(selectModel); + const models = useSelector(selectSupportModels); + + const [open, setOpen] = React.useState(false); + + const { selected } = useConversationActions(); + + const event = (model: Model) => { + selected(model.id); + setOpen(false); + }; + return ( - dispatch(openMarket())}> - - + + + + + + + + + {t("market.list")} + + + + {models.map((model, index) => ( +
event(model)} + className={cn( + "flex sm:flex-row flex-col items-center px-4 py-4 sm:py-2 border-b last:border-none select-none cursor-pointer transition-all hover:bg-background-container", + model.id === current && "bg-background-container", + )} + > + {""} +
+ {model.name} +
+ {model.id} + +
+ ))} +
+
+
+
+
); } diff --git a/app/src/components/home/assemblies/ChatInput.tsx b/app/src/components/home/assemblies/ChatInput.tsx index e30ece5a..b7c752f9 100644 --- a/app/src/components/home/assemblies/ChatInput.tsx +++ b/app/src/components/home/assemblies/ChatInput.tsx @@ -1,10 +1,11 @@ import React from "react"; import { setMemory } from "@/utils/memory.ts"; import { useTranslation } from "react-i18next"; -import { Textarea } from "@/components/ui/textarea.tsx"; +import { FlexibleTextarea } from "@/components/ui/textarea.tsx"; import { useSelector } from "react-redux"; import { senderSelector } from "@/store/settings.ts"; import { blobEvent } from "@/events/blob.ts"; +import { cn } from "@/components/ui/lib/utils.ts"; type ChatInputProps = { className?: string; @@ -27,12 +28,13 @@ function ChatInput({ // sender: Ctrl + Enter if false, Enter if true return ( -