diff --git a/app/frontend/package-lock.json b/app/frontend/package-lock.json index e83bfbb520..3e2cf1589f 100644 --- a/app/frontend/package-lock.json +++ b/app/frontend/package-lock.json @@ -15,6 +15,7 @@ "@fluentui/react-icons": "^2.0.221", "@react-spring/web": "^9.7.3", "dompurify": "^3.0.6", + "marked": "^9.1.6", "ndjson-readablestream": "^1.0.7", "react": "^18.2.0", "react-dom": "^18.2.0", @@ -3081,6 +3082,17 @@ "yallist": "^3.0.2" } }, + "node_modules/marked": { + "version": "9.1.6", + "resolved": "https://registry.npmjs.org/marked/-/marked-9.1.6.tgz", + "integrity": "sha512-jcByLnIFkd5gSXZmjNvS1TlmRhCXZjIzHYlaGkPlLIekG55JDR2Z4va9tZwCiP+/RDERiNhMOFu01xd6O5ct1Q==", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 16" + } + }, "node_modules/ms": { "version": "2.1.2", "dev": true, @@ -5554,6 +5566,11 @@ "yallist": "^3.0.2" } }, + "marked": { + "version": "9.1.6", + "resolved": "https://registry.npmjs.org/marked/-/marked-9.1.6.tgz", + "integrity": "sha512-jcByLnIFkd5gSXZmjNvS1TlmRhCXZjIzHYlaGkPlLIekG55JDR2Z4va9tZwCiP+/RDERiNhMOFu01xd6O5ct1Q==" + }, "ms": { "version": "2.1.2", "dev": true diff --git a/app/frontend/package.json b/app/frontend/package.json index 645c6bda60..632d80a0bb 100644 --- a/app/frontend/package.json +++ b/app/frontend/package.json @@ -18,6 +18,7 @@ "@fluentui/react-components": "^9.37.3", "@fluentui/react-icons": "^2.0.221", "@react-spring/web": "^9.7.3", + "marked": "^9.1.6", "dompurify": "^3.0.6", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/app/frontend/src/components/AnalysisPanel/AnalysisPanel.tsx b/app/frontend/src/components/AnalysisPanel/AnalysisPanel.tsx index 89a9ba56b1..4e1360f966 100644 --- a/app/frontend/src/components/AnalysisPanel/AnalysisPanel.tsx +++ b/app/frontend/src/components/AnalysisPanel/AnalysisPanel.tsx @@ -6,6 +6,7 @@ import { SupportingContent } from "../SupportingContent"; import { ChatAppResponse } from "../../api"; import { AnalysisPanelTabs } from "./AnalysisPanelTabs"; import { ThoughtProcess } from "./ThoughtProcess"; +import { MarkdownViewer } from "../MarkdownViewer"; import { useMsal } from "@azure/msal-react"; import { getHeaders } from "../../api"; import { useLogin, getToken } from "../../authConfig"; @@ -53,6 +54,22 @@ export const AnalysisPanel = ({ answer, activeTab, activeCitation, citationHeigh fetchCitation(); }, []); + const renderFileViewer = () => { + if (!activeCitation) { + return null; + } + + const fileExtension = activeCitation.split(".").pop()?.toLowerCase(); + switch (fileExtension) { + case "png": + return Citation Image; + case "md": + return ; + default: + return