From f8cabe8bb10b7a935723c53cc4f95d05398919ab Mon Sep 17 00:00:00 2001 From: Saul-Mirone Date: Sat, 22 Feb 2025 17:03:07 +0000 Subject: [PATCH] refactor: move ai-item components to frontend core (#10369) ### TL;DR Relocated AI item components from BlockSuite to the frontend codebase and updated related imports. ### What changed? - Moved AI item components from `blocksuite/affine/components/src/ai-item` to `packages/frontend/core/src/blocksuite/presets/ai/_common/components/ai-item` - Updated all imports referencing the old AI item component location to point to the new location - Removed AI item exports from BlockSuite's package.json and effects registration - Added AI item effects registration to frontend presets ### How to test? 1. Verify AI functionality works as expected in: - Chat panels - AI toolbars - Edgeless copilot - Slash menu 2. Confirm no AI-related console errors appear 3. Test error handling scenarios (unauthorized, payment required, network errors) ### Why make this change? This change consolidates AI-related components into the frontend codebase where they are primarily used, rather than keeping them in BlockSuite. This improves code organization by placing components closer to their implementation and usage, while reducing unnecessary coupling between packages. --- blocksuite/affine/components/package.json | 1 - blocksuite/blocks/src/effects.ts | 2 -- blocksuite/blocks/src/index.ts | 11 ----------- .../ai/_common/components}/ai-item/ai-item-list.ts | 6 +++--- .../ai/_common/components}/ai-item/ai-item.ts | 6 +++--- .../_common/components}/ai-item/ai-sub-item-list.ts | 6 +++--- .../presets/ai/_common/components}/ai-item/const.ts | 0 .../presets/ai/_common/components}/ai-item/index.ts | 0 .../ai/_common/components}/ai-item/styles.ts | 0 .../presets/ai/_common/components}/ai-item/types.ts | 8 ++++++-- .../presets/ai/_common/components/ask-ai-button.ts | 7 ++----- .../presets/ai/_common/components/ask-ai-panel.ts | 8 +++----- .../presets/ai/_common/components/ask-ai-toolbar.ts | 6 ++---- .../src/blocksuite/presets/ai/_common/config.ts | 6 ++++-- .../blocksuite/presets/ai/actions/doc-handler.ts | 6 ++++-- .../presets/ai/actions/edgeless-handler.ts | 2 +- .../presets/ai/actions/edgeless-response.ts | 2 +- .../core/src/blocksuite/presets/ai/ai-panel.ts | 2 +- .../presets/ai/chat-panel/chat-context.ts | 3 ++- .../presets/ai/chat-panel/chat-panel-input.ts | 7 ++----- .../presets/ai/chat-panel/chat-panel-messages.ts | 8 +++++--- .../presets/ai/entries/edgeless/actions-config.ts | 2 +- .../blocksuite/presets/ai/entries/edgeless/index.ts | 2 +- .../ai/entries/slash-menu/setup-slash-menu.ts | 2 +- .../src/blocksuite/presets/ai/messages/error.ts | 13 ++++++------- .../presets/ai/peek-view/chat-block-input.ts | 7 ++----- .../presets/ai/peek-view/chat-block-peek-view.ts | 4 ++-- .../src/blocksuite/presets/ai/peek-view/types.ts | 3 +-- .../core/src/blocksuite/presets/ai/provider.ts | 8 ++++---- .../presets/ai/widgets/ai-panel/ai-panel.ts | 2 +- .../ai/widgets/ai-panel/components/state/error.ts | 5 ++++- .../blocksuite/presets/ai/widgets/ai-panel/type.ts | 6 +++++- .../blocksuite/presets/ai/widgets/ai-panel/utils.ts | 3 ++- .../ai/widgets/edgeless-copilot-panel/index.ts | 3 ++- .../widgets/edgeless-copilot-panel/toolbar-entry.ts | 2 +- .../presets/ai/widgets/edgeless-copilot/index.ts | 6 ++---- .../frontend/core/src/blocksuite/presets/effects.ts | 4 +++- .../block-suite-editor/ai/copilot-client.ts | 10 +++++----- 38 files changed, 85 insertions(+), 94 deletions(-) rename {blocksuite/affine/components/src => packages/frontend/core/src/blocksuite/presets/ai/_common/components}/ai-item/ai-item-list.ts (96%) rename {blocksuite/affine/components/src => packages/frontend/core/src/blocksuite/presets/ai/_common/components}/ai-item/ai-item.ts (90%) rename {blocksuite/affine/components/src => packages/frontend/core/src/blocksuite/presets/ai/_common/components}/ai-item/ai-sub-item-list.ts (93%) rename {blocksuite/affine/components/src => packages/frontend/core/src/blocksuite/presets/ai/_common/components}/ai-item/const.ts (100%) rename {blocksuite/affine/components/src => packages/frontend/core/src/blocksuite/presets/ai/_common/components}/ai-item/index.ts (100%) rename {blocksuite/affine/components/src => packages/frontend/core/src/blocksuite/presets/ai/_common/components}/ai-item/styles.ts (100%) rename {blocksuite/affine/components/src => packages/frontend/core/src/blocksuite/presets/ai/_common/components}/ai-item/types.ts (90%) diff --git a/blocksuite/affine/components/package.json b/blocksuite/affine/components/package.json index f0a7d643ec..ca73cc42f0 100644 --- a/blocksuite/affine/components/package.json +++ b/blocksuite/affine/components/package.json @@ -40,7 +40,6 @@ }, "exports": { ".": "./src/index.ts", - "./ai-item": "./src/ai-item/index.ts", "./color-picker": "./src/color-picker/index.ts", "./icons": "./src/icons/index.ts", "./peek": "./src/peek/index.ts", diff --git a/blocksuite/blocks/src/effects.ts b/blocksuite/blocks/src/effects.ts index 6b70844b68..a89928570f 100644 --- a/blocksuite/blocks/src/effects.ts +++ b/blocksuite/blocks/src/effects.ts @@ -16,7 +16,6 @@ import { effects as blockRootEffects } from '@blocksuite/affine-block-root/effec import { effects as blockSurfaceEffects } from '@blocksuite/affine-block-surface/effects'; import { effects as blockSurfaceRefEffects } from '@blocksuite/affine-block-surface-ref/effects'; import { effects as blockTableEffects } from '@blocksuite/affine-block-table/effects'; -import { effects as componentAiItemEffects } from '@blocksuite/affine-components/ai-item'; import { BlockSelection } from '@blocksuite/affine-components/block-selection'; import { BlockZeroWidth } from '@blocksuite/affine-components/block-zero-width'; import { effects as componentCaptionEffects } from '@blocksuite/affine-components/caption'; @@ -82,7 +81,6 @@ export function effects() { componentToolbarEffects(); componentDropIndicatorEffects(); componentToggleButtonEffects(); - componentAiItemEffects(); componentColorPickerEffects(); componentEmbedCardModalEffects(); componentDocTitleEffects(); diff --git a/blocksuite/blocks/src/index.ts b/blocksuite/blocks/src/index.ts index 19a6294ce4..83b5808068 100644 --- a/blocksuite/blocks/src/index.ts +++ b/blocksuite/blocks/src/index.ts @@ -19,17 +19,6 @@ export * from '@blocksuite/affine-block-root'; export * from '@blocksuite/affine-block-surface'; export * from '@blocksuite/affine-block-surface-ref'; export * from '@blocksuite/affine-block-table'; -export { - type AIError, - AIErrorType, - type AIItemConfig, - type AIItemGroupConfig, - AIItemList, - type AISubItemConfig, - GeneralNetworkError, - PaymentRequiredError, - UnauthorizedError, -} from '@blocksuite/affine-components/ai-item'; export { menu, type MenuOptions, diff --git a/blocksuite/affine/components/src/ai-item/ai-item-list.ts b/packages/frontend/core/src/blocksuite/presets/ai/_common/components/ai-item/ai-item-list.ts similarity index 96% rename from blocksuite/affine/components/src/ai-item/ai-item-list.ts rename to packages/frontend/core/src/blocksuite/presets/ai/_common/components/ai-item/ai-item-list.ts index b667198179..a95db5cb72 100644 --- a/blocksuite/affine/components/src/ai-item/ai-item-list.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/_common/components/ai-item/ai-item-list.ts @@ -2,15 +2,15 @@ import { EditorHost, PropTypes, requiredProperties, -} from '@blocksuite/block-std'; -import { WithDisposable } from '@blocksuite/global/utils'; +} from '@blocksuite/affine/block-std'; +import { createLitPortal } from '@blocksuite/affine/blocks'; +import { WithDisposable } from '@blocksuite/affine/global/utils'; import { flip, offset } from '@floating-ui/dom'; import { baseTheme } from '@toeverything/theme'; import { css, html, LitElement, nothing, unsafeCSS } from 'lit'; import { property } from 'lit/decorators.js'; import { repeat } from 'lit/directives/repeat.js'; -import { createLitPortal } from '../portal'; import type { AIItem } from './ai-item'; import { SUBMENU_OFFSET_CROSS_AXIS, SUBMENU_OFFSET_MAIN_AXIS } from './const'; import type { AIItemConfig, AIItemGroupConfig } from './types'; diff --git a/blocksuite/affine/components/src/ai-item/ai-item.ts b/packages/frontend/core/src/blocksuite/presets/ai/_common/components/ai-item/ai-item.ts similarity index 90% rename from blocksuite/affine/components/src/ai-item/ai-item.ts rename to packages/frontend/core/src/blocksuite/presets/ai/_common/components/ai-item/ai-item.ts index db65b927e2..eb8eb7e63a 100644 --- a/blocksuite/affine/components/src/ai-item/ai-item.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/_common/components/ai-item/ai-item.ts @@ -2,12 +2,12 @@ import { EditorHost, PropTypes, requiredProperties, -} from '@blocksuite/block-std'; -import { WithDisposable } from '@blocksuite/global/utils'; +} from '@blocksuite/affine/block-std'; +import { ArrowRightIcon, EnterIcon } from '@blocksuite/affine/blocks'; +import { WithDisposable } from '@blocksuite/affine/global/utils'; import { css, html, LitElement, nothing } from 'lit'; import { property, query } from 'lit/decorators.js'; -import { ArrowRightIcon, EnterIcon } from '../icons'; import { menuItemStyles } from './styles'; import type { AIItemConfig } from './types'; diff --git a/blocksuite/affine/components/src/ai-item/ai-sub-item-list.ts b/packages/frontend/core/src/blocksuite/presets/ai/_common/components/ai-item/ai-sub-item-list.ts similarity index 93% rename from blocksuite/affine/components/src/ai-item/ai-sub-item-list.ts rename to packages/frontend/core/src/blocksuite/presets/ai/_common/components/ai-item/ai-sub-item-list.ts index 4a72db8cf2..487969929e 100644 --- a/blocksuite/affine/components/src/ai-item/ai-sub-item-list.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/_common/components/ai-item/ai-sub-item-list.ts @@ -2,13 +2,13 @@ import { EditorHost, PropTypes, requiredProperties, -} from '@blocksuite/block-std'; -import { WithDisposable } from '@blocksuite/global/utils'; +} from '@blocksuite/affine/block-std'; +import { EnterIcon } from '@blocksuite/affine/blocks'; +import { WithDisposable } from '@blocksuite/affine/global/utils'; import { baseTheme } from '@toeverything/theme'; import { css, html, LitElement, nothing, unsafeCSS } from 'lit'; import { property } from 'lit/decorators.js'; -import { EnterIcon } from '../icons'; import { menuItemStyles } from './styles'; import type { AIItemConfig, AISubItemConfig } from './types'; diff --git a/blocksuite/affine/components/src/ai-item/const.ts b/packages/frontend/core/src/blocksuite/presets/ai/_common/components/ai-item/const.ts similarity index 100% rename from blocksuite/affine/components/src/ai-item/const.ts rename to packages/frontend/core/src/blocksuite/presets/ai/_common/components/ai-item/const.ts diff --git a/blocksuite/affine/components/src/ai-item/index.ts b/packages/frontend/core/src/blocksuite/presets/ai/_common/components/ai-item/index.ts similarity index 100% rename from blocksuite/affine/components/src/ai-item/index.ts rename to packages/frontend/core/src/blocksuite/presets/ai/_common/components/ai-item/index.ts diff --git a/blocksuite/affine/components/src/ai-item/styles.ts b/packages/frontend/core/src/blocksuite/presets/ai/_common/components/ai-item/styles.ts similarity index 100% rename from blocksuite/affine/components/src/ai-item/styles.ts rename to packages/frontend/core/src/blocksuite/presets/ai/_common/components/ai-item/styles.ts diff --git a/blocksuite/affine/components/src/ai-item/types.ts b/packages/frontend/core/src/blocksuite/presets/ai/_common/components/ai-item/types.ts similarity index 90% rename from blocksuite/affine/components/src/ai-item/types.ts rename to packages/frontend/core/src/blocksuite/presets/ai/_common/components/ai-item/types.ts index 151ca21efc..237b56814c 100644 --- a/blocksuite/affine/components/src/ai-item/types.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/_common/components/ai-item/types.ts @@ -1,5 +1,9 @@ -import type { DocMode } from '@blocksuite/affine-model'; -import type { Chain, EditorHost, InitCommandCtx } from '@blocksuite/block-std'; +import type { + Chain, + EditorHost, + InitCommandCtx, +} from '@blocksuite/affine/block-std'; +import type { DocMode } from '@blocksuite/affine/blocks'; import type { TemplateResult } from 'lit'; export interface AIItemGroupConfig { diff --git a/packages/frontend/core/src/blocksuite/presets/ai/_common/components/ask-ai-button.ts b/packages/frontend/core/src/blocksuite/presets/ai/_common/components/ask-ai-button.ts index 4cec93f1fd..f4a6964a72 100644 --- a/packages/frontend/core/src/blocksuite/presets/ai/_common/components/ask-ai-button.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/_common/components/ask-ai-button.ts @@ -1,11 +1,7 @@ import './ask-ai-panel'; import { type EditorHost } from '@blocksuite/affine/block-std'; -import { - type AIItemGroupConfig, - createLitPortal, - HoverController, -} from '@blocksuite/affine/blocks'; +import { createLitPortal, HoverController } from '@blocksuite/affine/blocks'; import { WithDisposable } from '@blocksuite/affine/global/utils'; import { flip, offset } from '@floating-ui/dom'; import { css, html, LitElement, nothing } from 'lit'; @@ -13,6 +9,7 @@ import { property, query } from 'lit/decorators.js'; import { ref } from 'lit/directives/ref.js'; import { styleMap } from 'lit/directives/style-map.js'; +import type { AIItemGroupConfig } from './ai-item/types'; import type { ButtonSize } from './ask-ai-icon'; type toggleType = 'hover' | 'click'; diff --git a/packages/frontend/core/src/blocksuite/presets/ai/_common/components/ask-ai-panel.ts b/packages/frontend/core/src/blocksuite/presets/ai/_common/components/ask-ai-panel.ts index a8fb411082..33ef20e6a1 100644 --- a/packages/frontend/core/src/blocksuite/presets/ai/_common/components/ask-ai-panel.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/_common/components/ask-ai-panel.ts @@ -1,15 +1,13 @@ import { type EditorHost } from '@blocksuite/affine/block-std'; -import { - type AIItemGroupConfig, - DocModeProvider, - scrollbarStyle, -} from '@blocksuite/affine/blocks'; +import { DocModeProvider, scrollbarStyle } from '@blocksuite/affine/blocks'; import { WithDisposable } from '@blocksuite/affine/global/utils'; import { cssVar } from '@toeverything/theme'; import { css, html, LitElement, unsafeCSS } from 'lit'; import { property } from 'lit/decorators.js'; import { styleMap } from 'lit/directives/style-map.js'; +import type { AIItemGroupConfig } from './ai-item/types'; + export class AskAIPanel extends WithDisposable(LitElement) { static override styles = css` :host { diff --git a/packages/frontend/core/src/blocksuite/presets/ai/_common/components/ask-ai-toolbar.ts b/packages/frontend/core/src/blocksuite/presets/ai/_common/components/ask-ai-toolbar.ts index 607fc1952d..b535dc929f 100644 --- a/packages/frontend/core/src/blocksuite/presets/ai/_common/components/ask-ai-toolbar.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/_common/components/ask-ai-toolbar.ts @@ -3,10 +3,7 @@ import { type EditorHost, TextSelection, } from '@blocksuite/affine/block-std'; -import { - type AIItemGroupConfig, - createLitPortal, -} from '@blocksuite/affine/blocks'; +import { createLitPortal } from '@blocksuite/affine/blocks'; import { WithDisposable } from '@blocksuite/affine/global/utils'; import { flip, offset } from '@floating-ui/dom'; import { css, html, LitElement } from 'lit'; @@ -16,6 +13,7 @@ import { AIProvider } from '../../provider'; import { getAIPanelWidget } from '../../utils/ai-widgets'; import { extractSelectedContent } from '../../utils/extract'; import type { AffineAIPanelWidgetConfig } from '../../widgets/ai-panel/type'; +import type { AIItemGroupConfig } from './ai-item/types'; export class AskAIToolbarButton extends WithDisposable(LitElement) { static override styles = css` diff --git a/packages/frontend/core/src/blocksuite/presets/ai/_common/config.ts b/packages/frontend/core/src/blocksuite/presets/ai/_common/config.ts index adb83c93e4..f718299fb3 100644 --- a/packages/frontend/core/src/blocksuite/presets/ai/_common/config.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/_common/config.ts @@ -1,7 +1,5 @@ import type { Chain, InitCommandCtx } from '@blocksuite/affine/block-std'; import { - type AIItemGroupConfig, - type AISubItemConfig, CodeBlockModel, getSelectedModelsCommand, ImageBlockModel, @@ -19,6 +17,10 @@ import { } from '../actions/types'; import { AIProvider } from '../provider'; import { getAIPanelWidget } from '../utils/ai-widgets'; +import type { + AIItemGroupConfig, + AISubItemConfig, +} from './components/ai-item/types'; import { AIDoneIcon, AIImageIcon, diff --git a/packages/frontend/core/src/blocksuite/presets/ai/actions/doc-handler.ts b/packages/frontend/core/src/blocksuite/presets/ai/actions/doc-handler.ts index 12487c73b5..e9e8a5097e 100644 --- a/packages/frontend/core/src/blocksuite/presets/ai/actions/doc-handler.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/actions/doc-handler.ts @@ -1,7 +1,5 @@ import { type EditorHost, TextSelection } from '@blocksuite/affine/block-std'; import { - type AIError, - type AIItemGroupConfig, AIStarIconWithAnimation, createLitPortal, } from '@blocksuite/affine/blocks'; @@ -9,6 +7,10 @@ import { assertExists } from '@blocksuite/affine/global/utils'; import { flip, offset } from '@floating-ui/dom'; import { html, type TemplateResult } from 'lit'; +import type { + AIError, + AIItemGroupConfig, +} from '../_common/components/ai-item/types'; import { buildCopyConfig, buildErrorConfig, diff --git a/packages/frontend/core/src/blocksuite/presets/ai/actions/edgeless-handler.ts b/packages/frontend/core/src/blocksuite/presets/ai/actions/edgeless-handler.ts index 49bf0612ff..79fbd450b4 100644 --- a/packages/frontend/core/src/blocksuite/presets/ai/actions/edgeless-handler.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/actions/edgeless-handler.ts @@ -3,7 +3,6 @@ import { GfxControllerIdentifier, type GfxModel, } from '@blocksuite/affine/block-std/gfx'; -import type { AIError } from '@blocksuite/affine/blocks'; import { CodeBlockModel, EdgelessTextBlockModel, @@ -21,6 +20,7 @@ import type { TemplateResult } from 'lit'; import { AIChatBlockModel } from '../../../blocks'; import { getContentFromSlice } from '../../_common'; +import type { AIError } from '../_common/components/ai-item/types'; import { AIProvider } from '../provider'; import { reportResponse } from '../utils/action-reporter'; import { getAIPanelWidget } from '../utils/ai-widgets'; diff --git a/packages/frontend/core/src/blocksuite/presets/ai/actions/edgeless-response.ts b/packages/frontend/core/src/blocksuite/presets/ai/actions/edgeless-response.ts index 0b3265ddba..f6ea826465 100644 --- a/packages/frontend/core/src/blocksuite/presets/ai/actions/edgeless-response.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/actions/edgeless-response.ts @@ -1,7 +1,6 @@ import type { EditorHost } from '@blocksuite/affine/block-std'; import { GfxControllerIdentifier } from '@blocksuite/affine/block-std/gfx'; import type { - AIItemConfig, EdgelessElementToolbarWidget, MindmapElementModel, ShapeElementModel, @@ -28,6 +27,7 @@ import { html, type TemplateResult } from 'lit'; import { styleMap } from 'lit/directives/style-map.js'; import { insertFromMarkdown } from '../../_common'; +import type { AIItemConfig } from '../_common/components/ai-item/types'; import { AIPenIcon, ChatWithAIIcon } from '../_common/icons'; import { AIProvider } from '../provider'; import { reportResponse } from '../utils/action-reporter'; diff --git a/packages/frontend/core/src/blocksuite/presets/ai/ai-panel.ts b/packages/frontend/core/src/blocksuite/presets/ai/ai-panel.ts index 5df1cb6e3c..c7ef5a61f5 100644 --- a/packages/frontend/core/src/blocksuite/presets/ai/ai-panel.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/ai-panel.ts @@ -2,7 +2,6 @@ import { AINetworkSearchService } from '@affine/core/modules/ai-button/services/ import type { EditorHost } from '@blocksuite/affine/block-std'; import { GfxControllerIdentifier } from '@blocksuite/affine/block-std/gfx'; import { - type AIItemConfig, ImageBlockModel, isInsideEdgelessEditor, matchModels, @@ -14,6 +13,7 @@ import type { FrameworkProvider } from '@toeverything/infra'; import type { TemplateResult } from 'lit'; import { createTextRenderer, insertFromMarkdown } from '../_common'; +import type { AIItemConfig } from './_common/components/ai-item/types'; import { AIPenIcon, AIStarIconWithAnimation, diff --git a/packages/frontend/core/src/blocksuite/presets/ai/chat-panel/chat-context.ts b/packages/frontend/core/src/blocksuite/presets/ai/chat-panel/chat-context.ts index e1c077c8e7..449990dfc0 100644 --- a/packages/frontend/core/src/blocksuite/presets/ai/chat-panel/chat-context.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/chat-panel/chat-context.ts @@ -1,6 +1,7 @@ -import type { AIError } from '@blocksuite/affine/blocks'; import type { Signal } from '@preact/signals-core'; +import type { AIError } from '../_common/components/ai-item/types'; + export type ChatMessage = { id: string; content: string; diff --git a/packages/frontend/core/src/blocksuite/presets/ai/chat-panel/chat-panel-input.ts b/packages/frontend/core/src/blocksuite/presets/ai/chat-panel/chat-panel-input.ts index b668096917..d8256ae41b 100644 --- a/packages/frontend/core/src/blocksuite/presets/ai/chat-panel/chat-panel-input.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/chat-panel/chat-panel-input.ts @@ -1,16 +1,13 @@ import { stopPropagation } from '@affine/core/utils'; import type { EditorHost } from '@blocksuite/affine/block-std'; -import { - type AIError, - openFileOrFiles, - unsafeCSSVarV2, -} from '@blocksuite/affine/blocks'; +import { openFileOrFiles, unsafeCSSVarV2 } from '@blocksuite/affine/blocks'; import { SignalWatcher, WithDisposable } from '@blocksuite/affine/global/utils'; import { ImageIcon, PublishIcon } from '@blocksuite/icons/lit'; import { css, html, LitElement, nothing } from 'lit'; import { property, query, state } from 'lit/decorators.js'; import { repeat } from 'lit/directives/repeat.js'; +import type { AIError } from '../_common/components/ai-item/types'; import { ChatAbortIcon, ChatClearIcon, diff --git a/packages/frontend/core/src/blocksuite/presets/ai/chat-panel/chat-panel-messages.ts b/packages/frontend/core/src/blocksuite/presets/ai/chat-panel/chat-panel-messages.ts index a18c9d2acb..9690206dea 100644 --- a/packages/frontend/core/src/blocksuite/presets/ai/chat-panel/chat-panel-messages.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/chat-panel/chat-panel-messages.ts @@ -1,13 +1,10 @@ import type { EditorHost } from '@blocksuite/affine/block-std'; import { ShadowlessElement } from '@blocksuite/affine/block-std'; import { - type AIError, DocModeProvider, FeatureFlagService, isInsidePageEditor, - PaymentRequiredError, type SpecBuilder, - UnauthorizedError, } from '@blocksuite/affine/blocks'; import { WithDisposable } from '@blocksuite/affine/global/utils'; import type { BaseSelection } from '@blocksuite/affine/store'; @@ -21,6 +18,11 @@ import { EdgelessEditorActions, PageEditorActions, } from '../_common/chat-actions-handle'; +import { + type AIError, + PaymentRequiredError, + UnauthorizedError, +} from '../_common/components/ai-item/types'; import { AffineAvatarIcon, AffineIcon, DownArrowIcon } from '../_common/icons'; import { AIChatErrorRenderer } from '../messages/error'; import { AIProvider } from '../provider'; diff --git a/packages/frontend/core/src/blocksuite/presets/ai/entries/edgeless/actions-config.ts b/packages/frontend/core/src/blocksuite/presets/ai/entries/edgeless/actions-config.ts index 9f0cb59a4d..38e6fa140b 100644 --- a/packages/frontend/core/src/blocksuite/presets/ai/entries/edgeless/actions-config.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/entries/edgeless/actions-config.ts @@ -1,5 +1,4 @@ import { - type AIItemGroupConfig, AIStarIconWithAnimation, MindmapElementModel, ShapeElementModel, @@ -7,6 +6,7 @@ import { TextElementModel, } from '@blocksuite/affine/blocks'; +import type { AIItemGroupConfig } from '../../_common/components/ai-item/types'; import { AIExpandMindMapIcon, AIImageIcon, diff --git a/packages/frontend/core/src/blocksuite/presets/ai/entries/edgeless/index.ts b/packages/frontend/core/src/blocksuite/presets/ai/entries/edgeless/index.ts index 84604418be..d4ccc9953d 100644 --- a/packages/frontend/core/src/blocksuite/presets/ai/entries/edgeless/index.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/entries/edgeless/index.ts @@ -1,5 +1,4 @@ import type { - AIItemGroupConfig, DocMode, EdgelessElementToolbarWidget, EdgelessRootBlockComponent, @@ -7,6 +6,7 @@ import type { import { noop } from '@blocksuite/affine/global/utils'; import { html } from 'lit'; +import type { AIItemGroupConfig } from '../../_common/components/ai-item/types'; import { AIProvider } from '../../provider'; import { getAIPanelWidget } from '../../utils/ai-widgets'; import { getEdgelessCopilotWidget } from '../../utils/edgeless'; diff --git a/packages/frontend/core/src/blocksuite/presets/ai/entries/slash-menu/setup-slash-menu.ts b/packages/frontend/core/src/blocksuite/presets/ai/entries/slash-menu/setup-slash-menu.ts index d68a64a837..0788969298 100644 --- a/packages/frontend/core/src/blocksuite/presets/ai/entries/slash-menu/setup-slash-menu.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/entries/slash-menu/setup-slash-menu.ts @@ -4,7 +4,6 @@ import { type AffineSlashMenuItem, AffineSlashMenuWidget, type AffineSlashSubMenu, - type AIItemConfig, AIStarIcon, DocModeProvider, } from '@blocksuite/affine/blocks'; @@ -12,6 +11,7 @@ import { assertExists } from '@blocksuite/affine/global/utils'; import { MoreHorizontalIcon } from '@blocksuite/icons/lit'; import { html } from 'lit'; +import type { AIItemConfig } from '../../_common/components/ai-item/types'; import { pageAIGroups } from '../../_common/config'; import { handleInlineAskAIAction } from '../../actions/doc-handler'; import { AIProvider } from '../../provider'; diff --git a/packages/frontend/core/src/blocksuite/presets/ai/messages/error.ts b/packages/frontend/core/src/blocksuite/presets/ai/messages/error.ts index 00c51ee996..3f5753fa65 100644 --- a/packages/frontend/core/src/blocksuite/presets/ai/messages/error.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/messages/error.ts @@ -1,11 +1,5 @@ import { type EditorHost } from '@blocksuite/affine/block-std'; -import { - type AIError, - PaymentRequiredError, - scrollbarStyle, - UnauthorizedError, - unsafeCSSVarV2, -} from '@blocksuite/affine/blocks'; +import { scrollbarStyle, unsafeCSSVarV2 } from '@blocksuite/affine/blocks'; import { SignalWatcher, WithDisposable } from '@blocksuite/affine/global/utils'; import { ToggleDownIcon } from '@blocksuite/icons/lit'; import { signal } from '@preact/signals-core'; @@ -13,6 +7,11 @@ import { baseTheme } from '@toeverything/theme'; import { css, html, LitElement, nothing, unsafeCSS } from 'lit'; import { property } from 'lit/decorators.js'; +import { + type AIError, + PaymentRequiredError, + UnauthorizedError, +} from '../_common/components/ai-item/types'; import { ErrorTipIcon } from '../_common/icons'; import { AIProvider } from '../provider'; diff --git a/packages/frontend/core/src/blocksuite/presets/ai/peek-view/chat-block-input.ts b/packages/frontend/core/src/blocksuite/presets/ai/peek-view/chat-block-input.ts index 62d686c815..2869604f8c 100644 --- a/packages/frontend/core/src/blocksuite/presets/ai/peek-view/chat-block-input.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/peek-view/chat-block-input.ts @@ -1,9 +1,5 @@ import type { EditorHost } from '@blocksuite/affine/block-std'; -import { - type AIError, - openFileOrFiles, - unsafeCSSVarV2, -} from '@blocksuite/affine/blocks'; +import { openFileOrFiles, unsafeCSSVarV2 } from '@blocksuite/affine/blocks'; import { SignalWatcher } from '@blocksuite/affine/global/utils'; import { ImageIcon, PublishIcon } from '@blocksuite/icons/lit'; import { css, html, LitElement, nothing } from 'lit'; @@ -11,6 +7,7 @@ import { property, query, state } from 'lit/decorators.js'; import { classMap } from 'lit/directives/class-map.js'; import type { ChatMessage } from '../../../blocks'; +import type { AIError } from '../_common/components/ai-item/types'; import { ChatAbortIcon, ChatClearIcon, ChatSendIcon } from '../_common/icons'; import type { AINetworkSearchConfig } from '../chat-panel/chat-config'; import { diff --git a/packages/frontend/core/src/blocksuite/presets/ai/peek-view/chat-block-peek-view.ts b/packages/frontend/core/src/blocksuite/presets/ai/peek-view/chat-block-peek-view.ts index 89b18a7fc1..b8981b3d60 100644 --- a/packages/frontend/core/src/blocksuite/presets/ai/peek-view/chat-block-peek-view.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/peek-view/chat-block-peek-view.ts @@ -1,6 +1,5 @@ -import { type EditorHost } from '@blocksuite/affine/block-std'; +import type { EditorHost } from '@blocksuite/affine/block-std'; import { - type AIError, CanvasElementType, ConnectorMode, DocModeProvider, @@ -26,6 +25,7 @@ import { constructUserInfoWithMessages, queryHistoryMessages, } from '../_common/chat-actions-handle'; +import type { AIError } from '../_common/components/ai-item/types'; import { SmallHintIcon } from '../_common/icons'; import type { AINetworkSearchConfig } from '../chat-panel/chat-config'; import { AIChatErrorRenderer } from '../messages/error'; diff --git a/packages/frontend/core/src/blocksuite/presets/ai/peek-view/types.ts b/packages/frontend/core/src/blocksuite/presets/ai/peek-view/types.ts index f6ef26edcc..46ff6f0196 100644 --- a/packages/frontend/core/src/blocksuite/presets/ai/peek-view/types.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/peek-view/types.ts @@ -1,6 +1,5 @@ -import type { AIError } from '@blocksuite/affine/blocks'; - import type { ChatMessage } from '../../../blocks'; +import type { AIError } from '../_common/components/ai-item/types'; export type ChatStatus = | 'success' diff --git a/packages/frontend/core/src/blocksuite/presets/ai/provider.ts b/packages/frontend/core/src/blocksuite/presets/ai/provider.ts index 20aedd1973..10be2cbb4c 100644 --- a/packages/frontend/core/src/blocksuite/presets/ai/provider.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/provider.ts @@ -1,11 +1,11 @@ import type { EditorHost } from '@blocksuite/affine/block-std'; -import { - PaymentRequiredError, - UnauthorizedError, -} from '@blocksuite/affine/blocks'; import { Slot } from '@blocksuite/affine/global/utils'; import { captureException } from '@sentry/react'; +import { + PaymentRequiredError, + UnauthorizedError, +} from './_common/components/ai-item/types'; import type { ChatContextValue } from './chat-panel/chat-context'; export interface AIUserInfo { diff --git a/packages/frontend/core/src/blocksuite/presets/ai/widgets/ai-panel/ai-panel.ts b/packages/frontend/core/src/blocksuite/presets/ai/widgets/ai-panel/ai-panel.ts index 16905365be..b6c0e85007 100644 --- a/packages/frontend/core/src/blocksuite/presets/ai/widgets/ai-panel/ai-panel.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/widgets/ai-panel/ai-panel.ts @@ -4,7 +4,6 @@ import { AFFINE_FORMAT_BAR_WIDGET, AFFINE_VIEWPORT_OVERLAY_WIDGET, type AffineViewportOverlayWidget, - type AIError, DocModeProvider, getPageRootByElement, NotificationProvider, @@ -27,6 +26,7 @@ import { css, html, nothing, type PropertyValues } from 'lit'; import { property, query } from 'lit/decorators.js'; import { choose } from 'lit/directives/choose.js'; +import type { AIError } from '../../_common/components/ai-item/types.js'; import type { AIPanelGenerating } from './components/index.js'; import type { AffineAIPanelState, AffineAIPanelWidgetConfig } from './type.js'; diff --git a/packages/frontend/core/src/blocksuite/presets/ai/widgets/ai-panel/components/state/error.ts b/packages/frontend/core/src/blocksuite/presets/ai/widgets/ai-panel/components/state/error.ts index 541b89bbe1..21130eeabe 100644 --- a/packages/frontend/core/src/blocksuite/presets/ai/widgets/ai-panel/components/state/error.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/widgets/ai-panel/components/state/error.ts @@ -1,11 +1,14 @@ import type { EditorHost } from '@blocksuite/affine/block-std'; -import { AIErrorType, type AIItemGroupConfig } from '@blocksuite/affine/blocks'; import { WithDisposable } from '@blocksuite/affine/global/utils'; import { baseTheme } from '@toeverything/theme'; import { css, html, LitElement, nothing, unsafeCSS } from 'lit'; import { property } from 'lit/decorators.js'; import { choose } from 'lit/directives/choose.js'; +import { + AIErrorType, + type AIItemGroupConfig, +} from '../../../../_common/components/ai-item/types.js'; import type { AIPanelErrorConfig, CopyConfig } from '../../type.js'; import { filterAIItemGroup } from '../../utils.js'; diff --git a/packages/frontend/core/src/blocksuite/presets/ai/widgets/ai-panel/type.ts b/packages/frontend/core/src/blocksuite/presets/ai/widgets/ai-panel/type.ts index 5a8b5e3589..a954fd4eac 100644 --- a/packages/frontend/core/src/blocksuite/presets/ai/widgets/ai-panel/type.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/widgets/ai-panel/type.ts @@ -1,7 +1,11 @@ -import type { AIError, AIItemGroupConfig } from '@blocksuite/affine/blocks'; import type { Signal } from '@preact/signals-core'; import type { nothing, TemplateResult } from 'lit'; +import type { + AIError, + AIItemGroupConfig, +} from '../../_common/components/ai-item/types'; + export interface CopyConfig { allowed: boolean; onCopy: () => boolean | Promise; diff --git a/packages/frontend/core/src/blocksuite/presets/ai/widgets/ai-panel/utils.ts b/packages/frontend/core/src/blocksuite/presets/ai/widgets/ai-panel/utils.ts index 1f0adf4792..99b343136c 100644 --- a/packages/frontend/core/src/blocksuite/presets/ai/widgets/ai-panel/utils.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/widgets/ai-panel/utils.ts @@ -1,7 +1,8 @@ import type { EditorHost } from '@blocksuite/affine/block-std'; -import type { AIItemGroupConfig } from '@blocksuite/affine/blocks'; import { isInsidePageEditor } from '@blocksuite/affine/blocks'; +import type { AIItemGroupConfig } from '../../_common/components/ai-item/types'; + export function filterAIItemGroup( host: EditorHost, configs: AIItemGroupConfig[] diff --git a/packages/frontend/core/src/blocksuite/presets/ai/widgets/edgeless-copilot-panel/index.ts b/packages/frontend/core/src/blocksuite/presets/ai/widgets/edgeless-copilot-panel/index.ts index 2e601335e7..756c92ee36 100644 --- a/packages/frontend/core/src/blocksuite/presets/ai/widgets/edgeless-copilot-panel/index.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/widgets/edgeless-copilot-panel/index.ts @@ -1,10 +1,11 @@ import type { EditorHost } from '@blocksuite/affine/block-std'; -import type { AIItemGroupConfig } from '@blocksuite/affine/blocks'; import { on, scrollbarStyle, stopPropagation } from '@blocksuite/affine/blocks'; import { WithDisposable } from '@blocksuite/affine/global/utils'; import { css, html, LitElement, nothing } from 'lit'; import { property } from 'lit/decorators.js'; +import type { AIItemGroupConfig } from '../../_common/components/ai-item/types'; + export class EdgelessCopilotPanel extends WithDisposable(LitElement) { static override styles = css` :host { diff --git a/packages/frontend/core/src/blocksuite/presets/ai/widgets/edgeless-copilot-panel/toolbar-entry.ts b/packages/frontend/core/src/blocksuite/presets/ai/widgets/edgeless-copilot-panel/toolbar-entry.ts index 832760e639..b80323a7b9 100644 --- a/packages/frontend/core/src/blocksuite/presets/ai/widgets/edgeless-copilot-panel/toolbar-entry.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/widgets/edgeless-copilot-panel/toolbar-entry.ts @@ -3,12 +3,12 @@ import { GfxControllerIdentifier, isGfxGroupCompatibleModel, } from '@blocksuite/affine/block-std/gfx'; -import type { AIItemGroupConfig } from '@blocksuite/affine/blocks'; import { AIStarIcon, sortEdgelessElements } from '@blocksuite/affine/blocks'; import { WithDisposable } from '@blocksuite/affine/global/utils'; import { css, html, LitElement } from 'lit'; import { property } from 'lit/decorators.js'; +import type { AIItemGroupConfig } from '../../_common/components/ai-item/types'; import type { CopilotTool } from '../../tool/copilot-tool'; export class EdgelessCopilotToolbarEntry extends WithDisposable(LitElement) { diff --git a/packages/frontend/core/src/blocksuite/presets/ai/widgets/edgeless-copilot/index.ts b/packages/frontend/core/src/blocksuite/presets/ai/widgets/edgeless-copilot/index.ts index c769598434..b1e2d11fcd 100644 --- a/packages/frontend/core/src/blocksuite/presets/ai/widgets/edgeless-copilot/index.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/widgets/edgeless-copilot/index.ts @@ -1,9 +1,6 @@ import { WidgetComponent } from '@blocksuite/affine/block-std'; import { GfxControllerIdentifier } from '@blocksuite/affine/block-std/gfx'; -import type { - AIItemGroupConfig, - RootBlockModel, -} from '@blocksuite/affine/blocks'; +import type { RootBlockModel } from '@blocksuite/affine/blocks'; import { EdgelessLegacySlotIdentifier, MOUSE_BUTTON, @@ -26,6 +23,7 @@ import { css, html, nothing } from 'lit'; import { query, state } from 'lit/decorators.js'; import { styleMap } from 'lit/directives/style-map.js'; +import type { AIItemGroupConfig } from '../../_common/components/ai-item/types.js'; import { AFFINE_AI_PANEL_WIDGET, AffineAIPanelWidget, diff --git a/packages/frontend/core/src/blocksuite/presets/effects.ts b/packages/frontend/core/src/blocksuite/presets/effects.ts index 5dcedf3b8d..fe5fa87e6a 100644 --- a/packages/frontend/core/src/blocksuite/presets/effects.ts +++ b/packages/frontend/core/src/blocksuite/presets/effects.ts @@ -11,6 +11,7 @@ import { import { ImagePlaceholder } from '../blocks/ai-chat-block/components/image-placeholder'; import { UserInfo } from '../blocks/ai-chat-block/components/user-info'; import { TextRenderer } from './_common/components/text-renderer'; +import { effects as componentAiItemEffects } from './ai/_common/components/ai-item'; import { AskAIButton } from './ai/_common/components/ask-ai-button'; import { AskAIIcon } from './ai/_common/components/ask-ai-icon'; import { AskAIPanel } from './ai/_common/components/ask-ai-panel'; @@ -61,9 +62,10 @@ import { } from './ai/widgets/edgeless-copilot'; import { EdgelessCopilotPanel } from './ai/widgets/edgeless-copilot-panel'; import { EdgelessCopilotToolbarEntry } from './ai/widgets/edgeless-copilot-panel/toolbar-entry'; - export function registerBlocksuitePresetsCustomComponents() { registerMiniMindmapBlocks(); + componentAiItemEffects(); + customElements.define('ask-ai-icon', AskAIIcon); customElements.define('ask-ai-button', AskAIButton); customElements.define('ask-ai-toolbar-button', AskAIToolbarButton); diff --git a/packages/frontend/core/src/components/blocksuite/block-suite-editor/ai/copilot-client.ts b/packages/frontend/core/src/components/blocksuite/block-suite-editor/ai/copilot-client.ts index 5ded4c0bcc..6eda8caa4f 100644 --- a/packages/frontend/core/src/components/blocksuite/block-suite-editor/ai/copilot-client.ts +++ b/packages/frontend/core/src/components/blocksuite/block-suite-editor/ai/copilot-client.ts @@ -1,3 +1,8 @@ +import { + GeneralNetworkError, + PaymentRequiredError, + UnauthorizedError, +} from '@affine/core/blocksuite/presets/ai/_common/components/ai-item/types'; import { showAILoginRequiredAtom } from '@affine/core/components/affine/auth/ai-login-required'; import { addContextDocMutation, @@ -20,11 +25,6 @@ import { updateCopilotSessionMutation, UserFriendlyError, } from '@affine/graphql'; -import { - GeneralNetworkError, - PaymentRequiredError, - UnauthorizedError, -} from '@blocksuite/affine/blocks'; import { getCurrentStore } from '@toeverything/infra'; type OptionsField =