From c27ef6ffbf94be6bab2f6ba7cc9237b1125627a2 Mon Sep 17 00:00:00 2001 From: Dogtiti <499960698@qq.com> Date: Thu, 25 Jul 2024 23:29:29 +0800 Subject: [PATCH] feat: artifacts style --- app/components/artifact.module.scss | 22 +++++++++++++-- app/components/artifact.tsx | 42 +++++++++++++---------------- app/components/chat.tsx | 5 ++-- app/components/markdown.tsx | 13 +++++++-- 4 files changed, 52 insertions(+), 30 deletions(-) diff --git a/app/components/artifact.module.scss b/app/components/artifact.module.scss index 1e166f418..2909008b0 100644 --- a/app/components/artifact.module.scss +++ b/app/components/artifact.module.scss @@ -1,8 +1,26 @@ .artifact { - display: block; + display: flex; width: 100%; height: 100%; - position: relative; + flex-direction: column; + &-header { + display: flex; + align-items: center; + height: 36px; + padding: 20px; + background: var(--second); + } + &-title { + flex: 1; + text-align: center; + font-weight: bold; + font-size: 24px; + } + &-content { + flex-grow: 1; + padding: 0 20px 20px 20px; + background-color: var(--second); + } } .artifact-iframe { diff --git a/app/components/artifact.tsx b/app/components/artifact.tsx index b378cba37..3006fe012 100644 --- a/app/components/artifact.tsx +++ b/app/components/artifact.tsx @@ -18,7 +18,7 @@ import styles from "./artifact.module.scss"; export function HTMLPreview(props: { code: string; autoHeight?: boolean; - height?: number; + height?: number | string; onLoad?: (title?: string) => void; }) { const ref = useRef(null); @@ -185,7 +185,6 @@ export function Artifact() { const [code, setCode] = useState(""); const [loading, setLoading] = useState(true); const [fileName, setFileName] = useState(""); - const { height } = useWindowSize(); useEffect(() => { if (id) { @@ -205,33 +204,28 @@ export function Artifact() { }, [id]); return ( -
-
+
+
} shadow /> -
NextChat Artifact
+
NextChat Artifact
code} fileName={fileName} />
- {loading && } - {code && ( - { - setFileName(title as string); - setLoading(false); - }} - /> - )} +
+ {loading && } + {code && ( + { + setFileName(title as string); + setLoading(false); + }} + /> + )} +
); } diff --git a/app/components/chat.tsx b/app/components/chat.tsx index 6bfd99b53..33956e6bc 100644 --- a/app/components/chat.tsx +++ b/app/components/chat.tsx @@ -641,12 +641,13 @@ export function ChatActions(props: { ]} onClose={() => setShowPluginSelector(false)} onSelection={(s) => { - if (s.length === 0) return; const plugin = s[0]; chatStore.updateCurrentSession((session) => { session.mask.plugin = s; }); - showToast(plugin); + if (plugin) { + showToast(plugin); + } }} /> )} diff --git a/app/components/markdown.tsx b/app/components/markdown.tsx index 219c4c868..36c742902 100644 --- a/app/components/markdown.tsx +++ b/app/components/markdown.tsx @@ -14,7 +14,8 @@ import React from "react"; import { useDebouncedCallback } from "use-debounce"; import { showImageModal, FullScreen } from "./ui-lib"; import { ArtifactShareButton, HTMLPreview } from "./artifact"; - +import { Plugin } from "../constant"; +import { useChatStore } from "../store"; export function Mermaid(props: { code: string }) { const ref = useRef(null); const [hasError, setHasError] = useState(false); @@ -67,6 +68,9 @@ export function PreCode(props: { children: any }) { const [mermaidCode, setMermaidCode] = useState(""); const [htmlCode, setHtmlCode] = useState(""); const { height } = useWindowSize(); + const chatStore = useChatStore(); + const session = chatStore.currentSession(); + const plugins = session.mask?.plugin; const renderArtifacts = useDebouncedCallback(() => { if (!ref.current) return; @@ -87,6 +91,11 @@ export function PreCode(props: { children: any }) { // eslint-disable-next-line react-hooks/exhaustive-deps }, [refText]); + const enableArtifacts = useMemo( + () => plugins?.includes(Plugin.Artifact), + [plugins], + ); + return ( <>
@@ -104,7 +113,7 @@ export function PreCode(props: { children: any }) {
       {mermaidCode.length > 0 && (
         
       )}
-      {htmlCode.length > 0 && (
+      {htmlCode.length > 0 && enableArtifacts && (