mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-21 20:16:26 +08:00
feat(core): impl AI switch (#8018)
close PD-1658 https://github.com/user-attachments/assets/2f3d1d26-1879-4d95-b80c-7c0965cefbd0
This commit is contained in:
@@ -26,15 +26,15 @@ import { assertInstanceOf } from '@blocksuite/global/utils';
|
||||
import { literal, unsafeStatic } from 'lit/static-html.js';
|
||||
|
||||
import { buildAIPanelConfig } from './ai-panel';
|
||||
import { setupCodeToolbarEntry } from './entries/code-toolbar/setup-code-toolbar';
|
||||
import { setupCodeToolbarAIEntry } from './entries/code-toolbar/setup-code-toolbar';
|
||||
import {
|
||||
setupEdgelessCopilot,
|
||||
setupEdgelessElementToolbarEntry,
|
||||
setupEdgelessElementToolbarAIEntry,
|
||||
} from './entries/edgeless/index';
|
||||
import { setupFormatBarEntry } from './entries/format-bar/setup-format-bar';
|
||||
import { setupImageToolbarEntry } from './entries/image-toolbar/setup-image-toolbar';
|
||||
import { setupSlashMenuEntry } from './entries/slash-menu/setup-slash-menu';
|
||||
import { setupSpaceEntry } from './entries/space/setup-space';
|
||||
import { setupFormatBarAIEntry } from './entries/format-bar/setup-format-bar';
|
||||
import { setupImageToolbarAIEntry } from './entries/image-toolbar/setup-image-toolbar';
|
||||
import { setupSlashMenuAIEntry } from './entries/slash-menu/setup-slash-menu';
|
||||
import { setupSpaceAIEntry } from './entries/space/setup-space';
|
||||
|
||||
class AIPageRootWatcher extends BlockServiceWatcher {
|
||||
static override readonly flavour = 'affine:page';
|
||||
@@ -45,15 +45,15 @@ class AIPageRootWatcher extends BlockServiceWatcher {
|
||||
if (view.component instanceof AffineAIPanelWidget) {
|
||||
view.component.style.width = '630px';
|
||||
view.component.config = buildAIPanelConfig(view.component);
|
||||
setupSpaceEntry(view.component);
|
||||
setupSpaceAIEntry(view.component);
|
||||
}
|
||||
|
||||
if (view.component instanceof AffineFormatBarWidget) {
|
||||
setupFormatBarEntry(view.component);
|
||||
setupFormatBarAIEntry(view.component);
|
||||
}
|
||||
|
||||
if (view.component instanceof AffineSlashMenuWidget) {
|
||||
setupSlashMenuEntry(view.component);
|
||||
setupSlashMenuAIEntry(view.component);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -85,7 +85,7 @@ class AIEdgelessRootWatcher extends BlockServiceWatcher {
|
||||
if (view.component instanceof AffineAIPanelWidget) {
|
||||
view.component.style.width = '430px';
|
||||
view.component.config = buildAIPanelConfig(view.component);
|
||||
setupSpaceEntry(view.component);
|
||||
setupSpaceAIEntry(view.component);
|
||||
}
|
||||
|
||||
if (view.component instanceof EdgelessCopilotWidget) {
|
||||
@@ -93,15 +93,15 @@ class AIEdgelessRootWatcher extends BlockServiceWatcher {
|
||||
}
|
||||
|
||||
if (view.component instanceof EdgelessElementToolbarWidget) {
|
||||
setupEdgelessElementToolbarEntry(view.component);
|
||||
setupEdgelessElementToolbarAIEntry(view.component);
|
||||
}
|
||||
|
||||
if (view.component instanceof AffineFormatBarWidget) {
|
||||
setupFormatBarEntry(view.component);
|
||||
setupFormatBarAIEntry(view.component);
|
||||
}
|
||||
|
||||
if (view.component instanceof AffineSlashMenuWidget) {
|
||||
setupSlashMenuEntry(view.component);
|
||||
setupSlashMenuAIEntry(view.component);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -166,7 +166,7 @@ class AICodeBlockWatcher extends BlockServiceWatcher {
|
||||
const service = this.blockService;
|
||||
service.specSlots.widgetConnected.on(view => {
|
||||
if (view.component instanceof AffineCodeToolbarWidget) {
|
||||
setupCodeToolbarEntry(view.component);
|
||||
setupCodeToolbarAIEntry(view.component);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -184,7 +184,7 @@ class AIImageBlockWatcher extends BlockServiceWatcher {
|
||||
super.mounted();
|
||||
this.blockService.specSlots.widgetConnected.on(view => {
|
||||
if (view.component instanceof AffineImageToolbarWidget) {
|
||||
setupImageToolbarEntry(view.component);
|
||||
setupImageToolbarAIEntry(view.component);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ const buttonOptions: AskAIButtonOptions = {
|
||||
import type { AskAIButtonOptions } from '../../_common/components/ask-ai-button';
|
||||
import { buildAICodeItemGroups } from '../../_common/config';
|
||||
|
||||
export function setupCodeToolbarEntry(codeToolbar: AffineCodeToolbarWidget) {
|
||||
export function setupCodeToolbarAIEntry(codeToolbar: AffineCodeToolbarWidget) {
|
||||
codeToolbar.addPrimaryItems([
|
||||
{
|
||||
type: 'ask-ai',
|
||||
|
||||
@@ -17,7 +17,7 @@ export function setupEdgelessCopilot(widget: EdgelessCopilotWidget) {
|
||||
widget.groups = edgelessActionGroups;
|
||||
}
|
||||
|
||||
export function setupEdgelessElementToolbarEntry(
|
||||
export function setupEdgelessElementToolbarAIEntry(
|
||||
widget: EdgelessElementToolbarWidget
|
||||
) {
|
||||
widget.registerEntry({
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@ import { html, type TemplateResult } from 'lit';
|
||||
|
||||
import { AIItemGroups } from '../../_common/config';
|
||||
|
||||
export function setupFormatBarEntry(formatBar: AffineFormatBarWidget) {
|
||||
export function setupFormatBarAIEntry(formatBar: AffineFormatBarWidget) {
|
||||
toolbarDefaultConfig(formatBar);
|
||||
formatBar.addRawConfigItems(
|
||||
[
|
||||
|
||||
+3
-1
@@ -13,7 +13,9 @@ const buttonOptions: AskAIButtonOptions = {
|
||||
panelWidth: 300,
|
||||
};
|
||||
|
||||
export function setupImageToolbarEntry(imageToolbar: AffineImageToolbarWidget) {
|
||||
export function setupImageToolbarAIEntry(
|
||||
imageToolbar: AffineImageToolbarWidget
|
||||
) {
|
||||
imageToolbar.addPrimaryItems(
|
||||
[
|
||||
{
|
||||
|
||||
+1
-1
@@ -20,7 +20,7 @@ import { AIItemGroups } from '../../_common/config';
|
||||
import { handleInlineAskAIAction } from '../../actions/doc-handler';
|
||||
import { AIProvider } from '../../provider';
|
||||
|
||||
export function setupSlashMenuEntry(slashMenu: AffineSlashMenuWidget) {
|
||||
export function setupSlashMenuAIEntry(slashMenu: AffineSlashMenuWidget) {
|
||||
const AIItems = AIItemGroups.map(group => group.items).flat();
|
||||
|
||||
const iconWrapper = (icon: AIItemConfig['icon']) => {
|
||||
|
||||
@@ -3,7 +3,7 @@ import type { AffineAIPanelWidget } from '@blocksuite/blocks';
|
||||
import { handleInlineAskAIAction } from '../../actions/doc-handler';
|
||||
import { AIProvider } from '../../provider';
|
||||
|
||||
export function setupSpaceEntry(panel: AffineAIPanelWidget) {
|
||||
export function setupSpaceAIEntry(panel: AffineAIPanelWidget) {
|
||||
panel.handleEvent('keyDown', ctx => {
|
||||
const host = panel.host;
|
||||
const keyboardState = ctx.get('keyboardState');
|
||||
|
||||
Reference in New Issue
Block a user