diff --git a/apps/client/src/components/layouts/global/app-header.tsx b/apps/client/src/components/layouts/global/app-header.tsx index dd829f9b..cd30c321 100644 --- a/apps/client/src/components/layouts/global/app-header.tsx +++ b/apps/client/src/components/layouts/global/app-header.tsx @@ -1,19 +1,23 @@ import { + ActionIcon, Box, Group, Text, Tooltip, } from "@mantine/core"; +import { IconSparkles } from "@tabler/icons-react"; import classes from "./app-header.module.css"; import { BrandLogo } from "@/components/ui/brand-logo"; import TopMenu from "@/components/layouts/global/top-menu.tsx"; import { Link } from "react-router-dom"; import APP_ROUTE from "@/lib/app-route.ts"; -import { useAtom } from "jotai"; +import { useAtom, useSetAtom } from "jotai"; import { desktopSidebarAtom, mobileSidebarAtom, } from "@/components/layouts/global/hooks/atoms/sidebar-atom.ts"; +import { aiChatWindowOpenAtom } from "@/features/ai-chat/atoms/ai-chat-atom.ts"; +import { workspaceAtom } from "@/features/user/atoms/current-user-atom.ts"; import { useToggleSidebar } from "@/components/layouts/global/hooks/hooks/use-toggle-sidebar.ts"; import SidebarToggle from "@/components/ui/sidebar-toggle-button.tsx"; import { useTranslation } from "react-i18next"; @@ -38,6 +42,11 @@ export function AppHeader() { const [desktopOpened] = useAtom(desktopSidebarAtom); const toggleDesktop = useToggleSidebar(desktopSidebarAtom); + const [workspace] = useAtom(workspaceAtom); + const setAiChatWindowOpen = useSetAtom(aiChatWindowOpenAtom); + // AI chat entry point: only shown when the workspace enables it (A7 gate). + const aiChatEnabled = workspace?.settings?.ai?.chat === true; + const items = links.map((link) => ( {t(link.label)} @@ -105,6 +114,19 @@ export function AppHeader() { + {aiChatEnabled && ( + + setAiChatWindowOpen((v) => !v)} + > + + + + )} diff --git a/apps/client/src/features/page/components/header/page-header-menu.tsx b/apps/client/src/features/page/components/header/page-header-menu.tsx index c802bc44..38281b86 100644 --- a/apps/client/src/features/page/components/header/page-header-menu.tsx +++ b/apps/client/src/features/page/components/header/page-header-menu.tsx @@ -12,7 +12,6 @@ import { IconMarkdown, IconMessage, IconPrinter, - IconSparkles, IconStar, IconStarFilled, IconTrash, @@ -20,8 +19,7 @@ import { } from "@tabler/icons-react"; import React, { useEffect, useRef, useState } from "react"; import { useAsideTriggerProps } from "@/hooks/use-toggle-aside.tsx"; -import { useAtom, useAtomValue, useSetAtom } from "jotai"; -import { aiChatWindowOpenAtom } from "@/features/ai-chat/atoms/ai-chat-atom.ts"; +import { useAtom, useAtomValue } from "jotai"; import { historyAtoms } from "@/features/page-history/atoms/history-atoms.ts"; import { useDisclosure, useHotkeys } from "@mantine/hooks"; import { useClipboard } from "@/hooks/use-clipboard"; @@ -65,7 +63,6 @@ export default function PageHeaderMenu({ readOnly }: PageHeaderMenuProps) { const { t } = useTranslation(); const commentsTriggerProps = useAsideTriggerProps("comments"); const tocTriggerProps = useAsideTriggerProps("toc"); - const setAiChatWindowOpen = useSetAtom(aiChatWindowOpenAtom); const { pageSlug } = useParams(); const { data: page } = usePageQuery({ pageId: extractPageSlugId(pageSlug), @@ -74,8 +71,6 @@ export default function PageHeaderMenu({ readOnly }: PageHeaderMenuProps) { const [workspace] = useAtom(workspaceAtom); // Community public-sharing entry point (replaces the removed EE PageShareModal) const workspaceSharingDisabled = workspace?.settings?.sharing?.disabled === true; - // AI chat entry point: only shown when the workspace enables it (A7 gate). - const aiChatEnabled = workspace?.settings?.ai?.chat === true; useHotkeys( [ @@ -132,19 +127,6 @@ export default function PageHeaderMenu({ readOnly }: PageHeaderMenuProps) { - {aiChatEnabled && ( - - setAiChatWindowOpen((v) => !v)} - > - - - - )} - );