From 18de7a8de80b770dd74de4f8cdc9c8d4393de3c9 Mon Sep 17 00:00:00 2001 From: Konv Suu <2583695112@qq.com> Date: Wed, 16 Apr 2025 17:33:07 +0800 Subject: [PATCH] refactor(desktop): improve shiki highlight component (#3461) * refactor(desktop): improve shiki highlight component * update * update --- .../src/components/ui/button/CopyButton.tsx | 2 +- .../src/components/ui/button/base.tsx | 2 +- .../ui/code-highlighter/constants/index.tsx | 48 +------------------ .../ui/code-highlighter/shiki/Shiki.tsx | 36 ++++++-------- .../ui/code-highlighter/shiki/hooks.ts | 10 ++-- .../src/modules/rsshub/add-modal-content.tsx | 14 ++++-- 6 files changed, 33 insertions(+), 79 deletions(-) diff --git a/apps/desktop/src/renderer/src/components/ui/button/CopyButton.tsx b/apps/desktop/src/renderer/src/components/ui/button/CopyButton.tsx index 6ffbe5a74..7abebc66c 100644 --- a/apps/desktop/src/renderer/src/components/ui/button/CopyButton.tsx +++ b/apps/desktop/src/renderer/src/components/ui/button/CopyButton.tsx @@ -7,7 +7,7 @@ import { AnimatedCommandButton } from "./base" export const CopyButton: Component<{ value: string style?: React.CSSProperties - variant?: "solid" | "outline" + variant?: "solid" | "outline" | "ghost" }> = ({ value, className, style, variant = "solid" }) => { const copiedTimerRef = useRef() const handleCopy = useCallback(() => { diff --git a/apps/desktop/src/renderer/src/components/ui/button/base.tsx b/apps/desktop/src/renderer/src/components/ui/button/base.tsx index a4b8b56d7..d2a5b9ed4 100644 --- a/apps/desktop/src/renderer/src/components/ui/button/base.tsx +++ b/apps/desktop/src/renderer/src/components/ui/button/base.tsx @@ -44,7 +44,7 @@ export const AnimatedCommandButton: FC, typescriptreact: , @@ -62,15 +25,6 @@ const languageToIconMap = { css: , markdown: , } -export const getLanguageColor = (language?: string) => { - if (!language) return - - const alias = LanguageAlias[language] - if (alias) { - return LanguageToColorMap[alias] - } - return LanguageToColorMap[language] -} export const getLanguageIcon = (language?: string) => { if (!language) return null diff --git a/apps/desktop/src/renderer/src/components/ui/code-highlighter/shiki/Shiki.tsx b/apps/desktop/src/renderer/src/components/ui/code-highlighter/shiki/Shiki.tsx index 752c01eb2..86d17d593 100644 --- a/apps/desktop/src/renderer/src/components/ui/code-highlighter/shiki/Shiki.tsx +++ b/apps/desktop/src/renderer/src/components/ui/code-highlighter/shiki/Shiki.tsx @@ -1,4 +1,3 @@ -import { useIsDark } from "@follow/hooks" import { ELECTRON_BUILD } from "@follow/shared/constants" import { cn } from "@follow/utils/utils" import { useIsomorphicLayoutEffect } from "foxact/use-isomorphic-layout-effect" @@ -11,11 +10,12 @@ import type { DynamicImportThemeRegistration, } from "shiki" -import { useUISettingKey, useUISettingSelector } from "~/atoms/settings/ui" +import { useUISettingKey } from "~/atoms/settings/ui" import { tipcClient } from "~/lib/client" import { CopyButton } from "../../button/CopyButton" -import { getLanguageColor, getLanguageIcon } from "../constants" +import { getLanguageIcon } from "../constants" +import { useShikiDefaultTheme } from "./hooks" import { shiki, shikiTransformers } from "./shared" import styles from "./shiki.module.css" @@ -72,10 +72,7 @@ export const ShikiHighLighter: FC = (props) => { const [loaded, setLoaded] = useState(false) - const isDark = useIsDark() - const codeThemeLight = useUISettingSelector((s) => overrideTheme || s.codeHighlightThemeLight) - const codeThemeDark = useUISettingSelector((s) => overrideTheme || s.codeHighlightThemeDark) - const codeTheme = isDark ? codeThemeDark : codeThemeLight + const codeTheme = useShikiDefaultTheme(overrideTheme) useIsomorphicLayoutEffect(() => { let isMounted = true @@ -188,27 +185,22 @@ const ShikiCode: FC< return (
+
+ {language !== "plaintext" && ( + + {getLanguageIcon(language)} + {language} + + )} + +
- - {language !== "plaintext" && ( - - {getLanguageIcon(language)} - {language} - - )}
) } diff --git a/apps/desktop/src/renderer/src/components/ui/code-highlighter/shiki/hooks.ts b/apps/desktop/src/renderer/src/components/ui/code-highlighter/shiki/hooks.ts index e85bd7649..9b57d1b07 100644 --- a/apps/desktop/src/renderer/src/components/ui/code-highlighter/shiki/hooks.ts +++ b/apps/desktop/src/renderer/src/components/ui/code-highlighter/shiki/hooks.ts @@ -1,7 +1,11 @@ import { useIsDark } from "@follow/hooks" -export const useShikiDefaultTheme = () => { - const isDark = useIsDark() +import { useUISettingSelector } from "~/atoms/settings/ui" - return isDark ? "github-dark" : "github-light" +export const useShikiDefaultTheme = (overrideTheme?: string) => { + const isDark = useIsDark() + const codeThemeLight = useUISettingSelector((s) => overrideTheme || s.codeHighlightThemeLight) + const codeThemeDark = useUISettingSelector((s) => overrideTheme || s.codeHighlightThemeDark) + + return isDark ? codeThemeDark : codeThemeLight } diff --git a/apps/desktop/src/renderer/src/modules/rsshub/add-modal-content.tsx b/apps/desktop/src/renderer/src/modules/rsshub/add-modal-content.tsx index 016b5e611..1a6f92279 100644 --- a/apps/desktop/src/renderer/src/modules/rsshub/add-modal-content.tsx +++ b/apps/desktop/src/renderer/src/modules/rsshub/add-modal-content.tsx @@ -66,6 +66,13 @@ export function AddModalContent({ } }, [details.data]) + const codes = [ + `FOLLOW_OWNER_USER_ID=${me?.handle || me?.id} # User id or handle of your follow account`, + `FOLLOW_DESCRIPTION=${instance?.description || `${me?.name}'s instance`} # The description of your instance`, + `FOLLOW_PRICE=${instance?.price || 100} # The monthly price of your instance, set to 0 means free.`, + `FOLLOW_USER_LIMIT=${instance?.userLimit || 1000} # The user limit of your instance, set it to 0 or 1 can make your instance private, leaving it empty means no restriction`, + ] + return (
{t("rsshub.addModal.description")}
@@ -73,11 +80,8 @@ export function AddModalContent({ {details.isLoading ? (