From a7bf302f9a523dce3e946b0b1980135e781a1e89 Mon Sep 17 00:00:00 2001 From: Pawan Kumar Date: Mon, 14 Oct 2024 11:20:21 +0530 Subject: [PATCH] chore: Update markdown component + create avatar component + refactor (#36832) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit /ok-to-test tags="@tag.Anvil" ## Summary by CodeRabbit - **New Features** - Introduced the `Avatar` component for displaying user avatars. - Added the `Markdown` component for rendering Markdown content with GitHub Flavored Markdown support. - Enhanced `AIChat` component with a new modular input system and improved message display. - **Bug Fixes** - Updated CSS for better styling consistency across components. - **Refactor** - Removed outdated components (`ChatDescriptionModal` and `ThreadMessage`) to streamline the codebase. - Simplified the structure of `AIChat` by incorporating new components. - **Documentation** - Updated Storybook stories for `AIChat`, `Avatar`, and `Markdown` components to showcase new features. > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: > Commit: db2bc5c9a0a0a65b3d9dd4f53e9f100beb3af3a7 > Cypress dashboard. > Tags: `@tag.Anvil` > Spec: >
Mon, 14 Oct 2024 04:42:54 UTC --- .../design-system/widgets/jest.config.js | 5 + .../design-system/widgets/package.json | 3 +- .../src/components/AIChat/src/AIChat.tsx | 108 ++------- .../ChatDescriptionModal.tsx | 17 -- .../AIChat/src/ChatDescriptionModal/index.ts | 2 - .../AIChat/src/ChatDescriptionModal/types.ts | 3 - .../src/components/AIChat/src/ChatHeader.tsx | 62 +++++ .../AIChat/src/ChatInputSection.tsx | 48 ++++ .../src/components/AIChat/src/ChatThread.tsx | 53 +++++ .../AIChat/src/ChatTitle/ChatTitle.tsx | 17 -- .../components/AIChat/src/ChatTitle/index.ts | 2 - .../AIChat/src/ChatTitle/styles.module.css | 22 -- .../components/AIChat/src/ChatTitle/types.ts | 5 - .../src/ThreadMessage/ThreadMessage.tsx | 86 ------- .../AIChat/src/ThreadMessage/index.ts | 2 - .../src/ThreadMessage/styles.module.css | 27 --- .../AIChat/src/ThreadMessage/types.ts | 9 - .../AIChat/src/UserAvatar/UserAvatar.tsx | 27 --- .../components/AIChat/src/UserAvatar/index.ts | 2 - .../AIChat/src/UserAvatar/styles.module.css | 13 - .../components/AIChat/src/UserAvatar/types.ts | 5 - .../components/AIChat/src/styles.module.css | 27 +-- .../AIChat/stories/AIChat.stories.tsx | 23 ++ .../components/AIChat/tests/AIChat.test.tsx | 113 --------- .../widgets/src/components/Avatar/index.ts | 1 + .../src/components/Avatar/src/Avatar.tsx | 37 +++ .../src/components/Avatar/src/index.ts | 2 + .../components/Avatar/src/styles.module.css | 31 +++ .../src/components/Avatar/src/types.ts | 13 + .../Avatar/stories/Avatar.stories.tsx | 43 ++++ .../components/ChatInput/src/ChatInput.tsx | 15 +- .../src/components/ChatInput/src/types.ts | 3 + .../ChatInput/stories/ChatInput.stories.tsx | 6 + .../widgets/src/components/Link/src/index.ts | 1 + .../components/Link/stories/Link.stories.tsx | 2 +- .../widgets/src/components/Markdown/index.ts | 1 + .../src/components/Markdown/src/Markdown.tsx | 32 +++ .../components/Markdown/src/components.tsx | 22 ++ .../src/components/Markdown/src/index.ts | 2 + .../Markdown/src/mdComponents/Code.tsx | 59 +++++ .../Markdown/src/mdComponents/Heading.tsx | 37 +++ .../Markdown/src/mdComponents/Link.tsx | 17 ++ .../Markdown/src/mdComponents/List.tsx | 28 +++ .../Markdown/src/mdComponents/Paragraph.tsx | 22 ++ .../components/Markdown/src/styles.module.css | 118 ++++++++++ .../src/components/Markdown/src/types.ts | 10 + .../Markdown/stories/Markdown.stories.ts | 62 +++++ .../widgets/src/components/Text/src/Text.tsx | 2 +- .../design-system/widgets/src/index.ts | 2 + .../storybook/.storybook/preview-head.html | 2 +- app/client/test/__mocks__/reactMarkdown.tsx | 3 + app/client/yarn.lock | 222 ++++++++++++++++++ 52 files changed, 1011 insertions(+), 465 deletions(-) delete mode 100644 app/client/packages/design-system/widgets/src/components/AIChat/src/ChatDescriptionModal/ChatDescriptionModal.tsx delete mode 100644 app/client/packages/design-system/widgets/src/components/AIChat/src/ChatDescriptionModal/index.ts delete mode 100644 app/client/packages/design-system/widgets/src/components/AIChat/src/ChatDescriptionModal/types.ts create mode 100644 app/client/packages/design-system/widgets/src/components/AIChat/src/ChatHeader.tsx create mode 100644 app/client/packages/design-system/widgets/src/components/AIChat/src/ChatInputSection.tsx create mode 100644 app/client/packages/design-system/widgets/src/components/AIChat/src/ChatThread.tsx delete mode 100644 app/client/packages/design-system/widgets/src/components/AIChat/src/ChatTitle/ChatTitle.tsx delete mode 100644 app/client/packages/design-system/widgets/src/components/AIChat/src/ChatTitle/index.ts delete mode 100644 app/client/packages/design-system/widgets/src/components/AIChat/src/ChatTitle/styles.module.css delete mode 100644 app/client/packages/design-system/widgets/src/components/AIChat/src/ChatTitle/types.ts delete mode 100644 app/client/packages/design-system/widgets/src/components/AIChat/src/ThreadMessage/ThreadMessage.tsx delete mode 100644 app/client/packages/design-system/widgets/src/components/AIChat/src/ThreadMessage/index.ts delete mode 100644 app/client/packages/design-system/widgets/src/components/AIChat/src/ThreadMessage/styles.module.css delete mode 100644 app/client/packages/design-system/widgets/src/components/AIChat/src/ThreadMessage/types.ts delete mode 100644 app/client/packages/design-system/widgets/src/components/AIChat/src/UserAvatar/UserAvatar.tsx delete mode 100644 app/client/packages/design-system/widgets/src/components/AIChat/src/UserAvatar/index.ts delete mode 100644 app/client/packages/design-system/widgets/src/components/AIChat/src/UserAvatar/styles.module.css delete mode 100644 app/client/packages/design-system/widgets/src/components/AIChat/src/UserAvatar/types.ts delete mode 100644 app/client/packages/design-system/widgets/src/components/AIChat/tests/AIChat.test.tsx create mode 100644 app/client/packages/design-system/widgets/src/components/Avatar/index.ts create mode 100644 app/client/packages/design-system/widgets/src/components/Avatar/src/Avatar.tsx create mode 100644 app/client/packages/design-system/widgets/src/components/Avatar/src/index.ts create mode 100644 app/client/packages/design-system/widgets/src/components/Avatar/src/styles.module.css create mode 100644 app/client/packages/design-system/widgets/src/components/Avatar/src/types.ts create mode 100644 app/client/packages/design-system/widgets/src/components/Avatar/stories/Avatar.stories.tsx create mode 100644 app/client/packages/design-system/widgets/src/components/Markdown/index.ts create mode 100644 app/client/packages/design-system/widgets/src/components/Markdown/src/Markdown.tsx create mode 100644 app/client/packages/design-system/widgets/src/components/Markdown/src/components.tsx create mode 100644 app/client/packages/design-system/widgets/src/components/Markdown/src/index.ts create mode 100644 app/client/packages/design-system/widgets/src/components/Markdown/src/mdComponents/Code.tsx create mode 100644 app/client/packages/design-system/widgets/src/components/Markdown/src/mdComponents/Heading.tsx create mode 100644 app/client/packages/design-system/widgets/src/components/Markdown/src/mdComponents/Link.tsx create mode 100644 app/client/packages/design-system/widgets/src/components/Markdown/src/mdComponents/List.tsx create mode 100644 app/client/packages/design-system/widgets/src/components/Markdown/src/mdComponents/Paragraph.tsx create mode 100644 app/client/packages/design-system/widgets/src/components/Markdown/src/styles.module.css create mode 100644 app/client/packages/design-system/widgets/src/components/Markdown/src/types.ts create mode 100644 app/client/packages/design-system/widgets/src/components/Markdown/stories/Markdown.stories.ts diff --git a/app/client/packages/design-system/widgets/jest.config.js b/app/client/packages/design-system/widgets/jest.config.js index 08272cd0c57..3043cc94294 100644 --- a/app/client/packages/design-system/widgets/jest.config.js +++ b/app/client/packages/design-system/widgets/jest.config.js @@ -1,3 +1,5 @@ +const esModules = ["remark-gfm"].join("|"); + module.exports = { preset: "ts-jest", roots: ["/src"], @@ -6,6 +8,9 @@ module.exports = { moduleNameMapper: { "\\.(css)$": "../../../test/__mocks__/styleMock.js", }, + transformIgnorePatterns: [ + `[/\\\\]node_modules[/\\\\](?!${esModules}).+\\.(js|jsx|mjs|cjs|ts|tsx)$`, + ], globals: { "ts-jest": { useESM: true, diff --git a/app/client/packages/design-system/widgets/package.json b/app/client/packages/design-system/widgets/package.json index 12607a4be39..799d1e31679 100644 --- a/app/client/packages/design-system/widgets/package.json +++ b/app/client/packages/design-system/widgets/package.json @@ -28,7 +28,8 @@ "lodash": "*", "react-aria-components": "^1.2.1", "react-markdown": "^9.0.1", - "react-syntax-highlighter": "^15.5.0" + "react-syntax-highlighter": "^15.5.0", + "remark-gfm": "^4.0.0" }, "devDependencies": { "@types/fs-extra": "^11.0.4", diff --git a/app/client/packages/design-system/widgets/src/components/AIChat/src/AIChat.tsx b/app/client/packages/design-system/widgets/src/components/AIChat/src/AIChat.tsx index 4fbadd4aaad..f952bec2329 100644 --- a/app/client/packages/design-system/widgets/src/components/AIChat/src/AIChat.tsx +++ b/app/client/packages/design-system/widgets/src/components/AIChat/src/AIChat.tsx @@ -1,14 +1,11 @@ -import { Button, Flex, Text, TextArea } from "@appsmith/wds"; -import type { FormEvent, ForwardedRef, KeyboardEvent } from "react"; -import React, { forwardRef, useCallback } from "react"; -import { ChatDescriptionModal } from "./ChatDescriptionModal"; -import { ChatTitle } from "./ChatTitle"; -import styles from "./styles.module.css"; -import { ThreadMessage } from "./ThreadMessage"; -import type { AIChatProps, ChatMessage } from "./types"; -import { UserAvatar } from "./UserAvatar"; +import type { ForwardedRef } from "react"; +import React, { forwardRef } from "react"; -const MIN_PROMPT_LENGTH = 3; +import styles from "./styles.module.css"; +import { ChatHeader } from "./ChatHeader"; +import { ChatThread } from "./ChatThread"; +import type { AIChatProps } from "./types"; +import { ChatInputSection } from "./ChatInputSection"; const _AIChat = (props: AIChatProps, ref: ForwardedRef) => { const { @@ -25,81 +22,28 @@ const _AIChat = (props: AIChatProps, ref: ForwardedRef) => { username, ...rest } = props; - const [isChatDescriptionModalOpen, setIsChatDescriptionModalOpen] = - React.useState(false); - - const handleFormSubmit = useCallback( - (event: FormEvent) => { - event.preventDefault(); - onSubmit?.(); - }, - [onSubmit], - ); - - const handlePromptInputKeyDown = useCallback( - (event: KeyboardEvent) => { - if (event.key === "Enter" && event.shiftKey) { - event.preventDefault(); - onSubmit?.(); - } - }, - [onSubmit], - ); return (
- - setIsChatDescriptionModalOpen(!isChatDescriptionModalOpen) - } - > - {chatDescription} - - -
- - -
- -
    - {thread.map((message: ChatMessage) => ( - - ))} -
- -
-