@@ -240,15 +240,15 @@ export function AppTopNav({ activeToolSlug, config, onConfigChange, hideHeader =
)}
- onConfigChange("imageModel", model)} fullWidth />
+ updateConfig("imageModel", model)} fullWidth />
- onConfigChange("textModel", model)} fullWidth />
+ updateConfig("textModel", model)} fullWidth />
{effectiveMode === "local" ? (
- onConfigChange("systemPrompt", event.target.value)} />
+ updateConfig("systemPrompt", event.target.value)} />
) : null}
diff --git a/web/src/components/layout/user-status-actions.tsx b/web/src/components/layout/user-status-actions.tsx
index a850c08..e5483c1 100644
--- a/web/src/components/layout/user-status-actions.tsx
+++ b/web/src/components/layout/user-status-actions.tsx
@@ -10,47 +10,44 @@ import { AnimatedThemeToggler } from "@/components/ui/animated-theme-toggler";
import { GitHubLink } from "@/components/layout/github-link";
import { VersionReleaseModal } from "@/components/layout/version-release-modal";
import { cn } from "@/lib/utils";
+import { canvasThemes } from "@/lib/canvas-theme";
import { useConfigStore } from "@/stores/use-config-store";
import { useThemeStore } from "@/stores/use-theme-store";
import { useUserStore } from "@/stores/use-user-store";
type UserStatusActionsProps = {
showConfig?: boolean;
+ variant?: "default" | "canvas";
onOpenShortcuts?: () => void;
accountOpen?: boolean;
onAccountOpenChange?: (open: boolean) => void;
accountRef?: RefObject
;
getPopupContainer?: (node: HTMLElement) => HTMLElement;
- avatarClassName?: string;
- avatarStyle?: CSSProperties;
- gitHubClassName?: string;
- gitHubStyle?: CSSProperties;
- versionStyle?: CSSProperties;
- iconStyle?: CSSProperties;
};
export function UserStatusActions({
showConfig = true,
+ variant = "default",
onOpenShortcuts,
accountOpen,
onAccountOpenChange,
accountRef,
getPopupContainer,
- avatarClassName,
- avatarStyle,
- gitHubClassName,
- gitHubStyle,
- versionStyle,
- iconStyle,
}: UserStatusActionsProps) {
const theme = useThemeStore((state) => state.theme);
const setTheme = useThemeStore((state) => state.setTheme);
const user = useUserStore((state) => state.user);
const logout = useUserStore((state) => state.clearSession);
const openConfigDialog = useConfigStore((state) => state.openConfigDialog);
+ const canvasTheme = canvasThemes[theme];
const userName = user?.username || "用户";
const avatarText = (userName.trim()[0] || "U").toUpperCase();
const naturalIconClass = "inline-flex size-8 shrink-0 items-center justify-center text-stone-600 transition hover:text-stone-950 dark:text-stone-300 dark:hover:text-white [&_svg]:size-4";
+ const iconStyle: CSSProperties | undefined = variant === "canvas" ? { color: canvasTheme.node.text } : undefined;
+ const versionStyle = iconStyle;
+ const gitHubClassName = variant === "canvas" ? "size-11 text-base" : undefined;
+ const gitHubStyle = iconStyle;
+ const avatarStyle: CSSProperties | undefined = variant === "canvas" ? { borderColor: canvasTheme.toolbar.border, color: canvasTheme.node.text } : undefined;
const menuItems: ItemType[] = [
{ key: "user", disabled: true, label: {userName} },
...(user?.role === "admin" ? [{ key: "admin", icon: , label: 管理后台 }] : []),
@@ -95,7 +92,7 @@ export function UserStatusActions({
>