From c401caab6326bcf364695278635079af70e1a59b Mon Sep 17 00:00:00 2001 From: Arswarog Date: Thu, 18 Jun 2026 14:54:22 +0300 Subject: [PATCH] =?UTF-8?q?docuservix/widgets/chat:=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BE=D0=B4?= =?UTF-8?q?=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D0=B8=20markdown?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 4 +- .../entities/markdown/MD.module.css | 59 +++++++++++++++++++ plugins/docuservix/entities/markdown/MD.tsx | 17 ++++++ plugins/docuservix/entities/markdown/index.ts | 1 + plugins/docuservix/pages/chat/ChatPage.tsx | 2 +- plugins/docuservix/widgets/chat/Message.tsx | 6 +- yarn.lock | 24 +++++++- 7 files changed, 109 insertions(+), 4 deletions(-) create mode 100644 plugins/docuservix/entities/markdown/MD.module.css create mode 100644 plugins/docuservix/entities/markdown/MD.tsx create mode 100644 plugins/docuservix/entities/markdown/index.ts diff --git a/package.json b/package.json index 23618f2..ce868b3 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,9 @@ "js-yaml": "^4.2.0", "prism-react-renderer": "^2.3.0", "react": "^19.0.0", - "react-dom": "^19.0.0" + "react-dom": "^19.0.0", + "react-markdown": "^10.1.0", + "remark-gfm": "^4.0.1" }, "devDependencies": { "@docusaurus/module-type-aliases": "3.10.1", diff --git a/plugins/docuservix/entities/markdown/MD.module.css b/plugins/docuservix/entities/markdown/MD.module.css new file mode 100644 index 0000000..94c3868 --- /dev/null +++ b/plugins/docuservix/entities/markdown/MD.module.css @@ -0,0 +1,59 @@ +.MD p:last-child { + margin-bottom: 0; +} + +.MD p:first-child { + margin-top: 0; +} + +.MD code { + padding: 0.15em 0.4em; + border-radius: 4px; + background: var(--ifm-color-emphasis-200); + font-size: 0.85em; +} + +.MD pre { + margin: 0.5em 0; + padding: 0.75em; + overflow-x: auto; + border-radius: 6px; + background: var(--ifm-color-emphasis-100); +} + +.MD pre code { + padding: 0; + background: none; +} + +.MD ul, +.MD ol { + padding-left: 1.5em; + margin: 0.5em 0; +} + +.MD table { + width: 100%; + margin: 0.5em 0; + border-collapse: collapse; + font-size: 0.9em; +} + +.MD th, +.MD td { + padding: 0.4em 0.75em; + border: 1px solid var(--ifm-color-emphasis-300); + text-align: left; +} + +.MD th { + background: var(--ifm-color-emphasis-100); + font-weight: var(--ifm-font-weight-semibold); +} + +.MD blockquote { + margin: 0.5em 0; + padding: 0.25em 1em; + border-left: 3px solid var(--ifm-color-emphasis-300); + color: var(--ifm-color-emphasis-700); +} diff --git a/plugins/docuservix/entities/markdown/MD.tsx b/plugins/docuservix/entities/markdown/MD.tsx new file mode 100644 index 0000000..add0a1d --- /dev/null +++ b/plugins/docuservix/entities/markdown/MD.tsx @@ -0,0 +1,17 @@ +import React, { ReactNode } from 'react'; +import Markdown from 'react-markdown'; +import remarkGfm from 'remark-gfm'; + +import styles from './MD.module.css'; + +interface MDProps { + children: string; +} + +export function MD({ children }: MDProps): ReactNode { + return ( +
+ {children} +
+ ); +} diff --git a/plugins/docuservix/entities/markdown/index.ts b/plugins/docuservix/entities/markdown/index.ts new file mode 100644 index 0000000..3288ffa --- /dev/null +++ b/plugins/docuservix/entities/markdown/index.ts @@ -0,0 +1 @@ +export { MD } from './MD'; diff --git a/plugins/docuservix/pages/chat/ChatPage.tsx b/plugins/docuservix/pages/chat/ChatPage.tsx index 9f9131c..8783705 100644 --- a/plugins/docuservix/pages/chat/ChatPage.tsx +++ b/plugins/docuservix/pages/chat/ChatPage.tsx @@ -12,7 +12,7 @@ const dialog: IChat = { }, { role: 'assistant', - content: "Hello! I'm your AI assistant. How can I help you today?", + content: "Hello! I'm your **AI assistant**. How can I help you today?", }, ], }; diff --git a/plugins/docuservix/widgets/chat/Message.tsx b/plugins/docuservix/widgets/chat/Message.tsx index 9bdcd1a..a09498f 100644 --- a/plugins/docuservix/widgets/chat/Message.tsx +++ b/plugins/docuservix/widgets/chat/Message.tsx @@ -1,6 +1,8 @@ import block from 'bem-css-modules'; import React, { ReactNode } from 'react'; +import { MD } from '@docuservix/entities/markdown'; + import styles from './Message.module.css'; const b = block(styles, 'Message'); @@ -13,7 +15,9 @@ interface MessageProps { export function Message({ role, content }: MessageProps): ReactNode { return (
-
{content}
+
+ {content} +
); } diff --git a/yarn.lock b/yarn.lock index 0fb0dd0..9d77e06 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7308,6 +7308,11 @@ html-tags@^3.3.1: resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce" integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== +html-url-attributes@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/html-url-attributes/-/html-url-attributes-3.0.1.tgz#83b052cd5e437071b756cd74ae70f708870c2d87" + integrity sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ== + html-void-elements@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-3.0.0.tgz#fc9dbd84af9e747249034d4d62602def6517f1d7" @@ -10556,6 +10561,23 @@ react-loadable-ssr-addon-v5-slorber@^1.0.3: dependencies: "@types/react" "*" +react-markdown@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-10.1.0.tgz#e22bc20faddbc07605c15284255653c0f3bad5ca" + integrity sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + hast-util-to-jsx-runtime "^2.0.0" + html-url-attributes "^3.0.0" + mdast-util-to-hast "^13.0.0" + remark-parse "^11.0.0" + remark-rehype "^11.0.0" + unified "^11.0.0" + unist-util-visit "^5.0.0" + vfile "^6.0.0" + react-router-config@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/react-router-config/-/react-router-config-5.1.1.tgz#0f4263d1a80c6b2dc7b9c1902c9526478194a988" @@ -10809,7 +10831,7 @@ remark-frontmatter@^5.0.0: micromark-extension-frontmatter "^2.0.0" unified "^11.0.0" -remark-gfm@^4.0.0: +remark-gfm@^4.0.0, remark-gfm@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-4.0.1.tgz#33227b2a74397670d357bf05c098eaf8513f0d6b" integrity sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==