-
-
-
+
);
});
diff --git a/src/components/InvalidAPIKey/__tests__/ComfyUIForm.test.tsx b/src/components/InvalidAPIKey/__tests__/ComfyUIForm.test.tsx
index 58662b068e..0471910c0b 100644
--- a/src/components/InvalidAPIKey/__tests__/ComfyUIForm.test.tsx
+++ b/src/components/InvalidAPIKey/__tests__/ComfyUIForm.test.tsx
@@ -30,7 +30,6 @@ vi.mock('antd-style', async (importOriginal) => {
cssVar: {},
}),
),
- createStyles: vi.fn(() => () => ({ styles: {} })),
useTheme: () => ({
colorTextSecondary: '#999',
}),
diff --git a/src/features/AgentSetting/AgentDocuments/index.tsx b/src/features/AgentSetting/AgentDocuments/index.tsx
index e9dec645ee..f31a5f08bd 100644
--- a/src/features/AgentSetting/AgentDocuments/index.tsx
+++ b/src/features/AgentSetting/AgentDocuments/index.tsx
@@ -1,7 +1,8 @@
'use client';
+import { confirmModal, Select } from '@lobehub/ui/base-ui';
import type { TableColumnsType } from 'antd';
-import { App, Button, Popconfirm, Select, Space, Table, Tag, Typography } from 'antd';
+import { App, Button, Popconfirm, Space, Table, Tag, Typography } from 'antd';
import { memo, useMemo, useState } from 'react';
import { useTranslation } from 'react-i18next';
@@ -28,7 +29,7 @@ const FILE_PREVIEW_LIMIT = 5;
const AgentDocuments = memo(() => {
const { t } = useTranslation(['setting', 'common']);
- const { message, modal } = App.useApp();
+ const { message } = App.useApp();
const agentId = useAgentStore((s) => s.activeAgentId);
const [templateId, setTemplateId] = useState(DEFAULT_TEMPLATE_ID);
const [isInitializingTemplate, setIsInitializingTemplate] = useState(false);
@@ -160,7 +161,7 @@ const AgentDocuments = memo(() => {
const previewFilenames = overwrittenFilenames.slice(0, FILE_PREVIEW_LIMIT);
const remainingCount = overwrittenCount - previewFilenames.length;
- modal.confirm({
+ confirmModal({
content: (
diff --git a/src/features/AgentTasks/AgentTaskDetail/CommentCard.tsx b/src/features/AgentTasks/AgentTaskDetail/CommentCard.tsx
index 78bee3bf80..66026aa531 100644
--- a/src/features/AgentTasks/AgentTaskDetail/CommentCard.tsx
+++ b/src/features/AgentTasks/AgentTaskDetail/CommentCard.tsx
@@ -12,7 +12,7 @@ import {
Markdown,
Text,
} from '@lobehub/ui';
-import { App } from 'antd';
+import { confirmModal } from '@lobehub/ui/base-ui';
import { cssVar } from 'antd-style';
import { MessageCircle, MoreHorizontal, Pencil, Trash } from 'lucide-react';
import { memo, useCallback, useMemo, useState } from 'react';
@@ -29,7 +29,6 @@ interface CommentCardProps {
const CommentCard = memo(({ activity }) => {
const { t } = useTranslation('chat');
- const { modal } = App.useApp();
const deleteComment = useTaskStore((s) => s.deleteComment);
const updateComment = useTaskStore((s) => s.updateComment);
@@ -64,16 +63,14 @@ const CommentCard = memo(({ activity }) => {
const handleDelete = useCallback(() => {
if (!commentId) return;
- modal.confirm({
- centered: true,
+ confirmModal({
content: t('taskDetail.comment.deleteConfirm.content'),
okButtonProps: { danger: true },
okText: t('taskDetail.comment.deleteConfirm.ok'),
onOk: () => deleteComment(commentId),
title: t('taskDetail.comment.deleteConfirm.title'),
- type: 'error',
});
- }, [commentId, deleteComment, modal, t]);
+ }, [commentId, deleteComment, t]);
const menuItems = useMemo(
() => [
diff --git a/src/features/AgentTasks/AgentTaskDetail/TaskArtifacts.tsx b/src/features/AgentTasks/AgentTaskDetail/TaskArtifacts.tsx
index 78c97a62fa..af082c2cac 100644
--- a/src/features/AgentTasks/AgentTaskDetail/TaskArtifacts.tsx
+++ b/src/features/AgentTasks/AgentTaskDetail/TaskArtifacts.tsx
@@ -9,7 +9,7 @@ import {
Tag,
Text,
} from '@lobehub/ui';
-import { App } from 'antd';
+import { confirmModal } from '@lobehub/ui/base-ui';
import { cssVar } from 'antd-style';
import { FileTextIcon, MoreHorizontal, Package, Trash } from 'lucide-react';
import { memo, useCallback, useMemo, useState } from 'react';
@@ -30,7 +30,6 @@ const flattenWorkspace = (nodes: TaskDetailWorkspaceNode[]): TaskDetailWorkspace
const ArtifactCard = memo<{ node: TaskDetailWorkspaceNode }>(({ node }) => {
const { t } = useTranslation('chat');
- const { modal } = App.useApp();
const openDocumentPreview = useDocumentStore((s) => s.openDocumentPreview);
const unpinDocument = useTaskStore((s) => s.unpinDocument);
const activeTaskId = useTaskStore(taskDetailSelectors.activeTaskId);
@@ -41,16 +40,14 @@ const ArtifactCard = memo<{ node: TaskDetailWorkspaceNode }>(({ node }) => {
const handleDelete = useCallback(() => {
const taskId = node.sourceTaskId ?? activeTaskId;
if (!taskId) return;
- modal.confirm({
- centered: true,
+ confirmModal({
content: t('taskDetail.artifactMenu.deleteConfirm.content'),
okButtonProps: { danger: true },
okText: t('taskDetail.artifactMenu.deleteConfirm.ok'),
onOk: () => unpinDocument(taskId, node.documentId),
title: t('taskDetail.artifactMenu.deleteConfirm.title'),
- type: 'error',
});
- }, [activeTaskId, modal, node.documentId, node.sourceTaskId, t, unpinDocument]);
+ }, [activeTaskId, node.documentId, node.sourceTaskId, t, unpinDocument]);
const menuItems = useMemo(
() => [
diff --git a/src/features/AgentTasks/AgentTaskDetail/TaskBriefCard.tsx b/src/features/AgentTasks/AgentTaskDetail/TaskBriefCard.tsx
index 3393ff3786..87726437bc 100644
--- a/src/features/AgentTasks/AgentTaskDetail/TaskBriefCard.tsx
+++ b/src/features/AgentTasks/AgentTaskDetail/TaskBriefCard.tsx
@@ -7,7 +7,7 @@ import {
Icon,
Text,
} from '@lobehub/ui';
-import { App } from 'antd';
+import { confirmModal } from '@lobehub/ui/base-ui';
import { cssVar } from 'antd-style';
import { Check, ChevronDownIcon, ChevronUpIcon, MoreHorizontal, Trash } from 'lucide-react';
import { memo, useCallback, useMemo, useState } from 'react';
@@ -32,15 +32,13 @@ interface TaskBriefCardProps {
const TaskBriefCard = memo(
({ brief, onAfterResolve, onAfterAddComment, onAfterDelete }) => {
const { t } = useTranslation('home');
- const { modal } = App.useApp();
const deleteBrief = useBriefStore((s) => s.deleteBrief);
const isResolved = Boolean(brief.resolvedAction);
const [expanded, setExpanded] = useState(false);
const showFull = !isResolved || expanded;
const handleDelete = useCallback(() => {
- modal.confirm({
- centered: true,
+ confirmModal({
content: t('brief.deleteConfirm.content'),
okButtonProps: { danger: true },
okText: t('brief.deleteConfirm.ok'),
@@ -49,9 +47,8 @@ const TaskBriefCard = memo(
await onAfterDelete?.();
},
title: t('brief.deleteConfirm.title'),
- type: 'error',
});
- }, [brief.id, deleteBrief, modal, onAfterDelete, t]);
+ }, [brief.id, deleteBrief, onAfterDelete, t]);
const menuItems = useMemo(
() => [
diff --git a/src/features/AgentTasks/AgentTaskDetail/TaskDetailHeaderActions.tsx b/src/features/AgentTasks/AgentTaskDetail/TaskDetailHeaderActions.tsx
index 4c83d8e61f..cd7c6e1514 100644
--- a/src/features/AgentTasks/AgentTaskDetail/TaskDetailHeaderActions.tsx
+++ b/src/features/AgentTasks/AgentTaskDetail/TaskDetailHeaderActions.tsx
@@ -1,4 +1,5 @@
import { ActionIcon, copyToClipboard, type DropdownItem, DropdownMenu, Icon } from '@lobehub/ui';
+import { confirmModal } from '@lobehub/ui/base-ui';
import { App } from 'antd';
import { CopyIcon, LinkIcon, MoreHorizontal, Trash } from 'lucide-react';
import { memo, useCallback, useMemo } from 'react';
@@ -13,7 +14,7 @@ import { taskDetailPath } from '../shared/taskDetailPath';
const TaskDetailHeaderActions = memo(() => {
const { t } = useTranslation(['chat', 'common']);
- const { modal, message } = App.useApp();
+ const { message } = App.useApp();
const navigate = useNavigate();
const appOrigin = useAppOrigin();
const taskId = useTaskStore(taskDetailSelectors.activeTaskId);
@@ -22,8 +23,7 @@ const TaskDetailHeaderActions = memo(() => {
const triggerDelete = useCallback(() => {
if (!taskId) return;
- modal.confirm({
- centered: true,
+ confirmModal({
content: t('taskDetail.deleteConfirm.content'),
okButtonProps: { danger: true },
okText: t('taskDetail.deleteConfirm.ok'),
@@ -32,9 +32,8 @@ const TaskDetailHeaderActions = memo(() => {
navigate('/tasks');
},
title: t('taskDetail.deleteConfirm.title'),
- type: 'error',
});
- }, [taskId, modal, t, deleteTask, navigate]);
+ }, [taskId, t, deleteTask, navigate]);
const menuItems = useMemo(() => {
if (!taskId) return [];
diff --git a/src/features/AgentTasks/AgentTaskDetail/TaskSubtasks.test.tsx b/src/features/AgentTasks/AgentTaskDetail/TaskSubtasks.test.tsx
index 85694b0a42..09869d43ae 100644
--- a/src/features/AgentTasks/AgentTaskDetail/TaskSubtasks.test.tsx
+++ b/src/features/AgentTasks/AgentTaskDetail/TaskSubtasks.test.tsx
@@ -81,6 +81,10 @@ vi.mock('antd-style', () => ({
},
}));
+vi.mock('@lobehub/ui/base-ui', () => ({
+ confirmModal: vi.fn(),
+}));
+
vi.mock('react-i18next', () => ({
useTranslation: () => ({ t: (key: string) => key }),
}));
diff --git a/src/features/AgentTasks/AgentTaskDetail/TaskSubtasks.tsx b/src/features/AgentTasks/AgentTaskDetail/TaskSubtasks.tsx
index 41e5682a09..daa67d04b7 100644
--- a/src/features/AgentTasks/AgentTaskDetail/TaskSubtasks.tsx
+++ b/src/features/AgentTasks/AgentTaskDetail/TaskSubtasks.tsx
@@ -1,5 +1,6 @@
import type { TaskDetailSubtask } from '@lobechat/types';
import { ActionIcon, Block, Flexbox, Icon, showContextMenu, Text } from '@lobehub/ui';
+import { confirmModal } from '@lobehub/ui/base-ui';
import { App, ConfigProvider, Tree } from 'antd';
import type { DataNode } from 'antd/es/tree';
import { cssVar } from 'antd-style';
@@ -127,7 +128,7 @@ const toTreeData = (tree: TaskTreeNode[]): DataNode[] => {
const TaskSubtasks = memo(() => {
const { t } = useTranslation('chat');
- const { message, modal } = App.useApp();
+ const { message } = App.useApp();
const navigate = useNavigate();
const agentId = useTaskStore(taskDetailSelectors.activeTaskAgentId);
const subtasks = useTaskStore(taskDetailSelectors.activeTaskSubtasks);
@@ -210,9 +211,8 @@ const TaskSubtasks = memo(() => {
}
const canRun = plan.totalRunnable > 0;
- modal.confirm({
+ confirmModal({
cancelText: t('taskDetail.runAll.cancel'),
- centered: true,
content: ,
okButtonProps: canRun ? undefined : { disabled: true },
okText: t('taskDetail.runAll.confirm', { count: plan.totalRunnable }),
@@ -234,7 +234,6 @@ const TaskSubtasks = memo(() => {
}
},
title: t('taskDetail.runAll.title'),
- width: 520,
});
} catch (error) {
console.error('[TaskSubtasks] Failed to plan subtasks:', error);
@@ -242,7 +241,7 @@ const TaskSubtasks = memo(() => {
} finally {
setIsPlanning(false);
}
- }, [taskId, isPlanning, message, modal, t, runReadySubtasks]);
+ }, [taskId, isPlanning, message, t, runReadySubtasks]);
if (!taskId) return null;
diff --git a/src/features/AgentTasks/features/useTaskItemContextMenu.tsx b/src/features/AgentTasks/features/useTaskItemContextMenu.tsx
index 89c248948e..27dc66e437 100644
--- a/src/features/AgentTasks/features/useTaskItemContextMenu.tsx
+++ b/src/features/AgentTasks/features/useTaskItemContextMenu.tsx
@@ -7,6 +7,7 @@ import {
Icon,
type MenuInfo,
} from '@lobehub/ui';
+import { confirmModal } from '@lobehub/ui/base-ui';
import { App } from 'antd';
import { cssVar } from 'antd-style';
import {
@@ -55,7 +56,7 @@ export interface TaskContextMenuActions {
export const useTaskContextMenuActions = (): TaskContextMenuActions => {
const { t } = useTranslation(['chat', 'common']);
- const { modal, message } = App.useApp();
+ const { message } = App.useApp();
const appOrigin = useAppOrigin();
const updateTaskStatus = useTaskStore((s) => s.updateTaskStatus);
@@ -72,8 +73,7 @@ export const useTaskContextMenuActions = (): TaskContextMenuActions => {
return useMemo(() => {
const triggerDelete = (identifier: string) => {
- modal.confirm({
- centered: true,
+ confirmModal({
content: t('taskDetail.deleteConfirm.content'),
okButtonProps: { danger: true },
okText: t('taskDetail.deleteConfirm.ok'),
@@ -81,7 +81,6 @@ export const useTaskContextMenuActions = (): TaskContextMenuActions => {
await deleteTask(identifier);
},
title: t('taskDetail.deleteConfirm.title'),
- type: 'error',
});
};
@@ -277,7 +276,6 @@ export const useTaskContextMenuActions = (): TaskContextMenuActions => {
return { buildItems, installKeyboardHandlers };
}, [
- modal,
message,
t,
appOrigin,
diff --git a/src/features/AgentTopicManager/BulkActionBar.tsx b/src/features/AgentTopicManager/BulkActionBar.tsx
index c519af2c8c..906c89eb5c 100644
--- a/src/features/AgentTopicManager/BulkActionBar.tsx
+++ b/src/features/AgentTopicManager/BulkActionBar.tsx
@@ -1,7 +1,7 @@
'use client';
import { ActionIcon, Flexbox, Text } from '@lobehub/ui';
-import { App } from 'antd';
+import { confirmModal } from '@lobehub/ui/base-ui';
import { createStaticStyles, cssVar } from 'antd-style';
import { Archive, Star, Trash2, X } from 'lucide-react';
import { memo, useCallback } from 'react';
@@ -44,7 +44,6 @@ const styles = createStaticStyles(({ css }) => ({
const BulkActionBar = memo(() => {
const { t } = useTranslation('topic');
- const { modal } = App.useApp();
const selectedIds = useTopicsViewStore((s) => s.selectedIds);
const exitSelectMode = useTopicsViewStore((s) => s.exitSelectMode);
@@ -68,7 +67,7 @@ const BulkActionBar = memo(() => {
}, [selectedIds, updateTopicStatus, exitSelectMode]);
const handleBatchDelete = useCallback(() => {
- modal.confirm({
+ confirmModal({
content: t('management.bulk.deleteConfirm', { count: selectedIds.length }),
okButtonProps: { danger: true },
okText: t('management.bulk.delete'),
@@ -82,7 +81,7 @@ const BulkActionBar = memo(() => {
},
title: t('management.bulk.deleteTitle'),
});
- }, [selectedIds, modal, t, removeTopic, exitSelectMode]);
+ }, [selectedIds, t, removeTopic, exitSelectMode]);
if (selectedIds.length === 0) return null;
diff --git a/src/features/AgentTopicManager/ToolbarActions.tsx b/src/features/AgentTopicManager/ToolbarActions.tsx
index fbc4e8b58c..61467aa719 100644
--- a/src/features/AgentTopicManager/ToolbarActions.tsx
+++ b/src/features/AgentTopicManager/ToolbarActions.tsx
@@ -1,6 +1,7 @@
'use client';
import { ActionIcon, type DropdownItem, DropdownMenu } from '@lobehub/ui';
+import { confirmModal } from '@lobehub/ui/base-ui';
import { App } from 'antd';
import { Archive, MoreHorizontal } from 'lucide-react';
import { memo, useCallback, useMemo } from 'react';
@@ -13,7 +14,7 @@ const THREE_MONTHS_MS = 90 * 24 * 60 * 60 * 1000;
const ToolbarActions = memo(() => {
const { t } = useTranslation('topic');
- const { modal, message } = App.useApp();
+ const { message } = App.useApp();
// Operate on the management page's own bucket — not the sidebar's — since
// the management view is the one the user is acting on here.
@@ -34,7 +35,7 @@ const ToolbarActions = memo(() => {
return;
}
- modal.confirm({
+ confirmModal({
content: t('management.actionsMenu.archiveStale.confirm', { count: stale.length }),
okText: t('management.actionsMenu.archiveStale.confirmOk'),
onOk: async () => {
@@ -47,7 +48,7 @@ const ToolbarActions = memo(() => {
},
title: t('management.actionsMenu.archiveStale.title'),
});
- }, [topics, updateTopicStatus, modal, message, t]);
+ }, [topics, updateTopicStatus, message, t]);
const items: DropdownItem[] = useMemo(
() => [
diff --git a/src/features/Conversation/Messages/AssistantGroup/Tool/Detail/Intervention/Fallback.tsx b/src/features/Conversation/Messages/AssistantGroup/Tool/Detail/Intervention/Fallback.tsx
index 26eaf3d9b0..021f68a561 100644
--- a/src/features/Conversation/Messages/AssistantGroup/Tool/Detail/Intervention/Fallback.tsx
+++ b/src/features/Conversation/Messages/AssistantGroup/Tool/Detail/Intervention/Fallback.tsx
@@ -50,6 +50,7 @@ const styles = createStaticStyles(({ css, cssVar }) => ({
margin-block-start: -4px;
padding-block-end: 8px;
padding-inline: 16px;
+
font-size: ${cssVar.fontSizeSM};
line-height: 1.45;
color: ${cssVar.colorTextSecondary};
diff --git a/src/features/Conversation/Messages/CompressedGroup/index.tsx b/src/features/Conversation/Messages/CompressedGroup/index.tsx
index 9e773a1a68..749902c36a 100644
--- a/src/features/Conversation/Messages/CompressedGroup/index.tsx
+++ b/src/features/Conversation/Messages/CompressedGroup/index.tsx
@@ -10,7 +10,7 @@ import {
Tabs,
type TabsProps,
} from '@lobehub/ui';
-import { App } from 'antd';
+import { confirmModal } from '@lobehub/ui/base-ui';
import { createStaticStyles, cx } from 'antd-style';
import isEqual from 'fast-deep-equal';
import { ChevronDown, ChevronUp, History, Sparkles, Undo2 } from 'lucide-react';
@@ -68,7 +68,6 @@ export interface CompressedGroupMessageProps {
const CompressedGroupMessage = memo(({ id }) => {
const { t } = useTranslation('chat');
- const { modal } = App.useApp();
const [activeTab, setActiveTab] = useState(() => getStoredTab(id));
const handleTabChange = useCallback(
@@ -86,13 +85,12 @@ const CompressedGroupMessage = memo(({ id }) => {
const cancelCompression = useConversationStore((s) => s.cancelCompression);
const handleCancelCompression = useCallback(() => {
- modal.confirm({
- centered: true,
+ confirmModal({
content: t('compression.cancelConfirm'),
onOk: () => cancelCompression(id),
title: t('compression.cancel'),
});
- }, [id, cancelCompression, modal, t]);
+ }, [id, cancelCompression, t]);
const content = message?.content;
const rawCompressedMessages = (message as UIChatMessage)?.compressedMessages;
diff --git a/src/features/CreatePlatformAgent/index.tsx b/src/features/CreatePlatformAgent/index.tsx
index 0ea93ab3bb..deba085395 100644
--- a/src/features/CreatePlatformAgent/index.tsx
+++ b/src/features/CreatePlatformAgent/index.tsx
@@ -5,8 +5,9 @@ import {
type RemoteHeterogeneousAgentType,
} from '@lobechat/heterogeneous-agents';
import { Button, Flexbox, Icon } from '@lobehub/ui';
-import { Alert, Input, Modal, Select, Steps, Tag, Typography } from 'antd';
-import { createStyles } from 'antd-style';
+import { Select } from '@lobehub/ui/base-ui';
+import { Alert, Input, Modal, Steps, Tag, Typography } from 'antd';
+import { createStaticStyles, cssVar } from 'antd-style';
import {
BotIcon,
CheckCircle2,
@@ -23,7 +24,7 @@ import { lambdaClient, lambdaQuery } from '@/libs/trpc/client';
import { useAgentStore } from '@/store/agent';
import { useHomeStore } from '@/store/home';
-const useStyles = createStyles(({ css, token }) => ({
+const styles = createStaticStyles(({ css }) => ({
avatarPreview: css`
display: flex;
align-items: center;
@@ -31,12 +32,12 @@ const useStyles = createStyles(({ css, token }) => ({
width: 48px;
height: 48px;
- border-radius: ${token.borderRadiusLG}px;
+ border-radius: ${cssVar.borderRadiusLG};
font-size: 28px;
line-height: 1;
- background: ${token.colorFillSecondary};
+ background: ${cssVar.colorFillSecondary};
`,
deviceItem: css`
display: flex;
@@ -53,20 +54,20 @@ const useStyles = createStyles(({ css, token }) => ({
padding-block: 12px;
padding-inline: 16px;
- border: 1.5px solid ${token.colorBorderSecondary};
- border-radius: ${token.borderRadiusLG}px;
+ border: 1.5px solid ${cssVar.colorBorderSecondary};
+ border-radius: ${cssVar.borderRadiusLG};
- background: ${token.colorBgContainer};
+ background: ${cssVar.colorBgContainer};
transition: border-color 0.2s;
&:hover {
- border-color: ${token.colorPrimary};
+ border-color: ${cssVar.colorPrimary};
}
&[data-selected='true'] {
- border-color: ${token.colorPrimary};
- background: ${token.colorPrimaryBg};
+ border-color: ${cssVar.colorPrimary};
+ background: ${cssVar.colorPrimaryBg};
}
&[data-disabled='true'] {
@@ -74,18 +75,18 @@ const useStyles = createStyles(({ css, token }) => ({
opacity: 0.5;
&:hover {
- border-color: ${token.colorBorderSecondary};
+ border-color: ${cssVar.colorBorderSecondary};
}
}
`,
platformDesc: css`
font-size: 13px;
- color: ${token.colorTextSecondary};
+ color: ${cssVar.colorTextSecondary};
`,
platformName: css`
font-size: 15px;
font-weight: 500;
- color: ${token.colorText};
+ color: ${cssVar.colorText};
`,
}));
@@ -104,7 +105,6 @@ interface CreatePlatformAgentModalProps {
const CreatePlatformAgentModal = memo(
({ open, onClose, groupId }) => {
const { t } = useTranslation('chat');
- const { styles } = useStyles();
const navigate = useNavigate();
const storeCreateAgent = useAgentStore((s) => s.createAgent);
const refreshAgentList = useHomeStore((s) => s.refreshAgentList);
diff --git a/src/features/EditorModal/index.tsx b/src/features/EditorModal/index.tsx
index b6528c7018..8d8bb82794 100644
--- a/src/features/EditorModal/index.tsx
+++ b/src/features/EditorModal/index.tsx
@@ -1,12 +1,11 @@
import { useEditor } from '@lobehub/editor/react';
-import { type ModalProps } from '@lobehub/ui';
-import { createRawModal, Modal } from '@lobehub/ui';
+import { Modal, type ModalComponentProps } from '@lobehub/ui/base-ui';
import { memo, useState } from 'react';
import { useTranslation } from 'react-i18next';
import EditorCanvas from './EditorCanvas';
-interface EditorModalProps extends ModalProps {
+interface EditorModalProps extends ModalComponentProps {
editorData?: unknown;
onConfirm?: (value: string, editorData?: unknown) => Promise;
value?: string;
@@ -47,5 +46,3 @@ export const EditorModal = memo(
);
},
);
-
-export const createEditorModal = (props: EditorModalProps) => createRawModal(EditorModal, props);
diff --git a/src/features/Messenger/AgentSelect.tsx b/src/features/Messenger/AgentSelect.tsx
index 42d1aca6fe..dc58cac7f5 100644
--- a/src/features/Messenger/AgentSelect.tsx
+++ b/src/features/Messenger/AgentSelect.tsx
@@ -1,6 +1,7 @@
'use client';
-import { Avatar, Flexbox, Select, type SelectProps, Text } from '@lobehub/ui';
+import { Avatar, Flexbox, Text } from '@lobehub/ui';
+import { Select, type SelectProps } from '@lobehub/ui/base-ui';
import { memo, useMemo } from 'react';
import { useTranslation } from 'react-i18next';
import useSWR from 'swr';
@@ -8,21 +9,11 @@ import useSWR from 'swr';
import { DEFAULT_AVATAR } from '@/const/meta';
import { messengerService } from '@/services/messenger';
-interface AgentSelectProps extends Omit<
- SelectProps,
- 'options' | 'showSearch' | 'optionFilterProp' | 'value' | 'onChange'
-> {
+interface AgentSelectProps extends Omit, 'options' | 'value' | 'onChange'> {
onChange?: (agentId: string | undefined) => void;
value?: string;
}
-/**
- * Shared agent picker used wherever the messenger feature asks the user to
- * pick which agent receives messages. Single source of truth for the option
- * shape (avatar + title, locale-aware fallback) so verify-im and the Settings
- * panel render identically. Fetches `messenger.listAgentsForBinding` (which
- * already pins LobeAI to the top and matches the bot's `/agents` ordering).
- */
const AgentSelect = memo(({ value, onChange, ...rest }) => {
const { t: tCommon } = useTranslation('common');
const agentsSWR = useSWR('messenger:agentsForBinding', () =>
@@ -36,7 +27,7 @@ const AgentSelect = memo(({ value, onChange, ...rest }) => {
const title = agent.title || defaultAgentTitle;
return {
label: (
-
+
(({ value, onChange, ...rest }) => {
{title}
),
- searchValue: title,
title,
value: agent.id,
};
@@ -55,10 +45,10 @@ const AgentSelect = memo(({ value, onChange, ...rest }) => {
return (
);
};
-interface ViewCredModalProps {
- cred: UserCredSummary | null;
- onClose: () => void;
- open: boolean;
+export interface ViewCredModalContentProps {
+ cred: UserCredSummary;
}
-const ViewCredModal: FC