import cls from 'classnames'; import React, { useCallback, useEffect, useMemo } from 'react'; import { ComponentRegistryInfo, SlotLocation, useAutorun, useContextMenus, useInjectable, } from '@opensumi/ide-core-browser'; import { EDirection } from '@opensumi/ide-core-browser/lib/components'; import { EnhanceIcon, EnhanceIconWithCtxMenu, EnhancePopover, HorizontalVertical, } from '@opensumi/ide-core-browser/lib/components/ai-native'; import { DesignLayoutConfig } from '@opensumi/ide-core-browser/lib/layout/constants'; import { IMenu } from '@opensumi/ide-core-browser/lib/menu/next'; import { localize } from '@opensumi/ide-core-common'; import { DesignLeftTabRenderer, DesignRightTabRenderer } from '@opensumi/ide-design/lib/browser/layout/tabbar.view'; import { IMainLayoutService } from '@opensumi/ide-main-layout'; import { ChatTabbarRenderer2, IconElipses, IconTabView, LeftTabbarRenderer, RightTabbarRenderer, TabbarViewBase, } from '@opensumi/ide-main-layout/lib/browser/tabbar/bar.view'; import { BaseTabPanelView, ContainerView } from '@opensumi/ide-main-layout/lib/browser/tabbar/panel.view'; import { TabRendererBase, TabbarConfig } from '@opensumi/ide-main-layout/lib/browser/tabbar/renderer.view'; import { TabbarService, TabbarServiceFactory } from '@opensumi/ide-main-layout/lib/browser/tabbar/tabbar.service'; import { AI_CHAT_VIEW_ID } from '../../common'; import styles from './layout.module.less'; const ChatTabbarRenderer: React.FC = () => { const { side } = React.useContext(TabbarConfig); const tabbarService: TabbarService = useInjectable(TabbarServiceFactory)(side); useEffect(() => { tabbarService.setIsLatter(true); }, [tabbarService]); return (
); }; export const AIChatTabRenderer = ({ className, components, }: { className: string; components: ComponentRegistryInfo[]; }) => ( } TabpanelView={() => ( )} /> ); export const AIChatTabRendererWithTab = ({ className, components, }: { className: string; components: ComponentRegistryInfo[]; }) => ( } TabpanelView={() => ( )} /> ); export const AILeftTabRenderer = ({ className, components, }: { className: string; components: ComponentRegistryInfo[]; }) => ; const AILeftTabbarRenderer: React.FC = () => { const layoutService = useInjectable(IMainLayoutService); const tabbarService: TabbarService = useInjectable(TabbarServiceFactory)(SlotLocation.right); const currentContainerId = useAutorun(tabbarService.currentContainerId); const extraMenus = React.useMemo(() => layoutService.getExtraMenu(), [layoutService]); const [navMenu] = useContextMenus(extraMenus); const renderOtherVisibleContainers = useCallback( ({ renderContainers }) => { const visibleContainers = tabbarService.visibleContainers.filter((container) => !container.options?.hideTab); return ( <> {visibleContainers.length > 0 && } {visibleContainers.map((component) => renderContainers(component, tabbarService, currentContainerId))} ); }, [currentContainerId, tabbarService], ); return ( {navMenu.length >= 0 ? navMenu.map((menu) => ( )) : null} } /> ); }; export const AIRightTabRenderer = ({ className, components, }: { className: string; components: ComponentRegistryInfo[]; }) => { const tabbarService: TabbarService = useInjectable(TabbarServiceFactory)(SlotLocation.right); const designLayoutConfig = useInjectable(DesignLayoutConfig); const handleClose = useCallback(() => { tabbarService.updateCurrentContainerId(''); }, []); const ContainerViewFn = useCallback((props: { component: ComponentRegistryInfo; side: string; titleMenu: IMenu }) => { const { component } = props; const { options } = component; return ( {options && options.title}
} renderContainerWrap={({ children }) => (
{children}
)} /> ); }, []); const rightTabRenderClassName = useMemo( () => (designLayoutConfig.useMergeRightWithLeftPanel ? styles.right_tab_renderer : ''), [designLayoutConfig], ); return ( } tabpanelView={() => } /> ); };