mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-29 16:19:43 +08:00
refactor(editor): extract ai item component (#9283)
This commit is contained in:
@@ -35,6 +35,7 @@
|
|||||||
},
|
},
|
||||||
"exports": {
|
"exports": {
|
||||||
".": "./src/index.ts",
|
".": "./src/index.ts",
|
||||||
|
"./ai-item": "./src/ai-item/index.ts",
|
||||||
"./icons": "./src/icons/index.ts",
|
"./icons": "./src/icons/index.ts",
|
||||||
"./peek": "./src/peek/index.ts",
|
"./peek": "./src/peek/index.ts",
|
||||||
"./portal": "./src/portal/index.ts",
|
"./portal": "./src/portal/index.ts",
|
||||||
|
|||||||
+4
-7
@@ -1,4 +1,3 @@
|
|||||||
import { createLitPortal } from '@blocksuite/affine-components/portal';
|
|
||||||
import {
|
import {
|
||||||
EditorHost,
|
EditorHost,
|
||||||
PropTypes,
|
PropTypes,
|
||||||
@@ -11,12 +10,10 @@ import { css, html, LitElement, nothing, unsafeCSS } from 'lit';
|
|||||||
import { property } from 'lit/decorators.js';
|
import { property } from 'lit/decorators.js';
|
||||||
import { repeat } from 'lit/directives/repeat.js';
|
import { repeat } from 'lit/directives/repeat.js';
|
||||||
|
|
||||||
import type { AIItem } from './ai-item.js';
|
import { createLitPortal } from '../portal';
|
||||||
import {
|
import type { AIItem } from './ai-item';
|
||||||
SUBMENU_OFFSET_CROSS_AXIS,
|
import { SUBMENU_OFFSET_CROSS_AXIS, SUBMENU_OFFSET_MAIN_AXIS } from './const';
|
||||||
SUBMENU_OFFSET_MAIN_AXIS,
|
import type { AIItemConfig, AIItemGroupConfig } from './types';
|
||||||
} from './const.js';
|
|
||||||
import type { AIItemConfig, AIItemGroupConfig } from './types.js';
|
|
||||||
|
|
||||||
@requiredProperties({ host: PropTypes.instanceOf(EditorHost) })
|
@requiredProperties({ host: PropTypes.instanceOf(EditorHost) })
|
||||||
export class AIItemList extends WithDisposable(LitElement) {
|
export class AIItemList extends WithDisposable(LitElement) {
|
||||||
+3
-3
@@ -1,4 +1,3 @@
|
|||||||
import { ArrowRightIcon, EnterIcon } from '@blocksuite/affine-components/icons';
|
|
||||||
import {
|
import {
|
||||||
EditorHost,
|
EditorHost,
|
||||||
PropTypes,
|
PropTypes,
|
||||||
@@ -8,8 +7,9 @@ import { WithDisposable } from '@blocksuite/global/utils';
|
|||||||
import { css, html, LitElement, nothing } from 'lit';
|
import { css, html, LitElement, nothing } from 'lit';
|
||||||
import { property, query } from 'lit/decorators.js';
|
import { property, query } from 'lit/decorators.js';
|
||||||
|
|
||||||
import { menuItemStyles } from './styles.js';
|
import { ArrowRightIcon, EnterIcon } from '../icons';
|
||||||
import type { AIItemConfig } from './types.js';
|
import { menuItemStyles } from './styles';
|
||||||
|
import type { AIItemConfig } from './types';
|
||||||
|
|
||||||
@requiredProperties({
|
@requiredProperties({
|
||||||
host: PropTypes.instanceOf(EditorHost),
|
host: PropTypes.instanceOf(EditorHost),
|
||||||
+3
-3
@@ -1,4 +1,3 @@
|
|||||||
import { EnterIcon } from '@blocksuite/affine-components/icons';
|
|
||||||
import {
|
import {
|
||||||
EditorHost,
|
EditorHost,
|
||||||
PropTypes,
|
PropTypes,
|
||||||
@@ -9,8 +8,9 @@ import { baseTheme } from '@toeverything/theme';
|
|||||||
import { css, html, LitElement, nothing, unsafeCSS } from 'lit';
|
import { css, html, LitElement, nothing, unsafeCSS } from 'lit';
|
||||||
import { property } from 'lit/decorators.js';
|
import { property } from 'lit/decorators.js';
|
||||||
|
|
||||||
import { menuItemStyles } from './styles.js';
|
import { EnterIcon } from '../icons';
|
||||||
import type { AIItemConfig, AISubItemConfig } from './types.js';
|
import { menuItemStyles } from './styles';
|
||||||
|
import type { AIItemConfig, AISubItemConfig } from './types';
|
||||||
|
|
||||||
@requiredProperties({
|
@requiredProperties({
|
||||||
host: PropTypes.instanceOf(EditorHost),
|
host: PropTypes.instanceOf(EditorHost),
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
import { AIItem } from './ai-item';
|
||||||
|
import { AIItemList } from './ai-item-list';
|
||||||
|
import { AISubItemList } from './ai-sub-item-list';
|
||||||
|
|
||||||
|
export * from './ai-item-list.js';
|
||||||
|
export * from './types.js';
|
||||||
|
|
||||||
|
export function effects() {
|
||||||
|
customElements.define('ai-item-list', AIItemList);
|
||||||
|
customElements.define('ai-item', AIItem);
|
||||||
|
customElements.define('ai-sub-item-list', AISubItemList);
|
||||||
|
}
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
export * from './ai-item-list.js';
|
|
||||||
export * from './types.js';
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
export * from './ai-item/index.js';
|
|
||||||
@@ -2,6 +2,7 @@ import { effects as blockEmbedEffects } from '@blocksuite/affine-block-embed/eff
|
|||||||
import { effects as blockListEffects } from '@blocksuite/affine-block-list/effects';
|
import { effects as blockListEffects } from '@blocksuite/affine-block-list/effects';
|
||||||
import { effects as blockParagraphEffects } from '@blocksuite/affine-block-paragraph/effects';
|
import { effects as blockParagraphEffects } from '@blocksuite/affine-block-paragraph/effects';
|
||||||
import { effects as blockSurfaceEffects } from '@blocksuite/affine-block-surface/effects';
|
import { effects as blockSurfaceEffects } from '@blocksuite/affine-block-surface/effects';
|
||||||
|
import { effects as componentAiItemEffects } from '@blocksuite/affine-components/ai-item';
|
||||||
import { BlockSelection } from '@blocksuite/affine-components/block-selection';
|
import { BlockSelection } from '@blocksuite/affine-components/block-selection';
|
||||||
import { BlockZeroWidth } from '@blocksuite/affine-components/block-zero-width';
|
import { BlockZeroWidth } from '@blocksuite/affine-components/block-zero-width';
|
||||||
import { effects as componentCaptionEffects } from '@blocksuite/affine-components/caption';
|
import { effects as componentCaptionEffects } from '@blocksuite/affine-components/caption';
|
||||||
@@ -23,14 +24,11 @@ import { effects as dataViewEffects } from '@blocksuite/data-view/effects';
|
|||||||
import { effects as inlineEffects } from '@blocksuite/inline/effects';
|
import { effects as inlineEffects } from '@blocksuite/inline/effects';
|
||||||
import type { BlockModel } from '@blocksuite/store';
|
import type { BlockModel } from '@blocksuite/store';
|
||||||
|
|
||||||
import { AIItem } from './_common/components/ai-item/ai-item.js';
|
|
||||||
import { AISubItemList } from './_common/components/ai-item/ai-sub-item-list.js';
|
|
||||||
import { EmbedCardMoreMenu } from './_common/components/embed-card/embed-card-more-menu-popper.js';
|
import { EmbedCardMoreMenu } from './_common/components/embed-card/embed-card-more-menu-popper.js';
|
||||||
import { EmbedCardStyleMenu } from './_common/components/embed-card/embed-card-style-popper.js';
|
import { EmbedCardStyleMenu } from './_common/components/embed-card/embed-card-style-popper.js';
|
||||||
import { EmbedCardEditCaptionEditModal } from './_common/components/embed-card/modal/embed-card-caption-edit-modal.js';
|
import { EmbedCardEditCaptionEditModal } from './_common/components/embed-card/modal/embed-card-caption-edit-modal.js';
|
||||||
import { EmbedCardCreateModal } from './_common/components/embed-card/modal/embed-card-create-modal.js';
|
import { EmbedCardCreateModal } from './_common/components/embed-card/modal/embed-card-create-modal.js';
|
||||||
import { EmbedCardEditModal } from './_common/components/embed-card/modal/embed-card-edit-modal.js';
|
import { EmbedCardEditModal } from './_common/components/embed-card/modal/embed-card-edit-modal.js';
|
||||||
import { AIItemList } from './_common/components/index.js';
|
|
||||||
import { registerSpecs } from './_specs/register-specs.js';
|
import { registerSpecs } from './_specs/register-specs.js';
|
||||||
import { AttachmentEdgelessBlockComponent } from './attachment-block/attachment-edgeless-block.js';
|
import { AttachmentEdgelessBlockComponent } from './attachment-block/attachment-edgeless-block.js';
|
||||||
import {
|
import {
|
||||||
@@ -304,6 +302,7 @@ export function effects() {
|
|||||||
componentToolbarEffects();
|
componentToolbarEffects();
|
||||||
componentDragIndicatorEffects();
|
componentDragIndicatorEffects();
|
||||||
componentToggleButtonEffects();
|
componentToggleButtonEffects();
|
||||||
|
componentAiItemEffects();
|
||||||
|
|
||||||
widgetScrollAnchoringEffects();
|
widgetScrollAnchoringEffects();
|
||||||
widgetMobileToolbarEffects();
|
widgetMobileToolbarEffects();
|
||||||
@@ -421,7 +420,6 @@ export function effects() {
|
|||||||
customElements.define('smooth-corner', SmoothCorner);
|
customElements.define('smooth-corner', SmoothCorner);
|
||||||
customElements.define('toggle-switch', ToggleSwitch);
|
customElements.define('toggle-switch', ToggleSwitch);
|
||||||
customElements.define('ai-panel-answer', AIPanelAnswer);
|
customElements.define('ai-panel-answer', AIPanelAnswer);
|
||||||
customElements.define('ai-item-list', AIItemList);
|
|
||||||
customElements.define(
|
customElements.define(
|
||||||
'edgeless-eraser-tool-button',
|
'edgeless-eraser-tool-button',
|
||||||
EdgelessEraserToolButton
|
EdgelessEraserToolButton
|
||||||
@@ -430,8 +428,6 @@ export function effects() {
|
|||||||
customElements.define('edgeless-frame-tool-button', EdgelessFrameToolButton);
|
customElements.define('edgeless-frame-tool-button', EdgelessFrameToolButton);
|
||||||
customElements.define('ai-panel-input', AIPanelInput);
|
customElements.define('ai-panel-input', AIPanelInput);
|
||||||
customElements.define('ai-panel-generating', AIPanelGenerating);
|
customElements.define('ai-panel-generating', AIPanelGenerating);
|
||||||
customElements.define('ai-item', AIItem);
|
|
||||||
customElements.define('ai-sub-item-list', AISubItemList);
|
|
||||||
customElements.define('edgeless-link-tool-button', EdgelessLinkToolButton);
|
customElements.define('edgeless-link-tool-button', EdgelessLinkToolButton);
|
||||||
customElements.define('embed-card-more-menu', EmbedCardMoreMenu);
|
customElements.define('embed-card-more-menu', EmbedCardMoreMenu);
|
||||||
customElements.define('edgeless-mindmap-menu', EdgelessMindmapMenu);
|
customElements.define('edgeless-mindmap-menu', EdgelessMindmapMenu);
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import { splitElements } from './root-block/edgeless/utils/clipboard-utils.js';
|
|||||||
import { isCanvasElement } from './root-block/edgeless/utils/query.js';
|
import { isCanvasElement } from './root-block/edgeless/utils/query.js';
|
||||||
|
|
||||||
export * from './_common/adapters/index.js';
|
export * from './_common/adapters/index.js';
|
||||||
export * from './_common/components/ai-item/index.js';
|
|
||||||
export { type NavigatorMode } from './_common/edgeless/frame/consts.js';
|
export { type NavigatorMode } from './_common/edgeless/frame/consts.js';
|
||||||
export {
|
export {
|
||||||
ExportManager,
|
ExportManager,
|
||||||
@@ -55,6 +54,16 @@ export * from '@blocksuite/affine-block-embed';
|
|||||||
export * from '@blocksuite/affine-block-list';
|
export * from '@blocksuite/affine-block-list';
|
||||||
export * from '@blocksuite/affine-block-paragraph';
|
export * from '@blocksuite/affine-block-paragraph';
|
||||||
export * from '@blocksuite/affine-block-surface';
|
export * from '@blocksuite/affine-block-surface';
|
||||||
|
export {
|
||||||
|
type AIError,
|
||||||
|
type AIItemConfig,
|
||||||
|
type AIItemGroupConfig,
|
||||||
|
AIItemList,
|
||||||
|
type AISubItemConfig,
|
||||||
|
GeneralNetworkError,
|
||||||
|
PaymentRequiredError,
|
||||||
|
UnauthorizedError,
|
||||||
|
} from '@blocksuite/affine-components/ai-item';
|
||||||
export { type MenuOptions } from '@blocksuite/affine-components/context-menu';
|
export { type MenuOptions } from '@blocksuite/affine-components/context-menu';
|
||||||
export {
|
export {
|
||||||
HoverController,
|
HoverController,
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import type { AIError } from '@blocksuite/affine-components/ai-item';
|
||||||
import {
|
import {
|
||||||
NotificationProvider,
|
NotificationProvider,
|
||||||
ThemeProvider,
|
ThemeProvider,
|
||||||
@@ -23,7 +24,6 @@ import { css, html, nothing, type PropertyValues } from 'lit';
|
|||||||
import { property, query } from 'lit/decorators.js';
|
import { property, query } from 'lit/decorators.js';
|
||||||
import { choose } from 'lit/directives/choose.js';
|
import { choose } from 'lit/directives/choose.js';
|
||||||
|
|
||||||
import type { AIError } from '../../../_common/components/index.js';
|
|
||||||
import type { EdgelessRootService } from '../../edgeless/edgeless-root-service.js';
|
import type { EdgelessRootService } from '../../edgeless/edgeless-root-service.js';
|
||||||
import { PageRootService } from '../../page/page-root-service.js';
|
import { PageRootService } from '../../page/page-root-service.js';
|
||||||
import { AFFINE_FORMAT_BAR_WIDGET } from '../format-bar/format-bar.js';
|
import { AFFINE_FORMAT_BAR_WIDGET } from '../format-bar/format-bar.js';
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
import {
|
||||||
|
AIErrorType,
|
||||||
|
type AIItemGroupConfig,
|
||||||
|
} from '@blocksuite/affine-components/ai-item';
|
||||||
import type { EditorHost } from '@blocksuite/block-std';
|
import type { EditorHost } from '@blocksuite/block-std';
|
||||||
import { WithDisposable } from '@blocksuite/global/utils';
|
import { WithDisposable } from '@blocksuite/global/utils';
|
||||||
import { baseTheme } from '@toeverything/theme';
|
import { baseTheme } from '@toeverything/theme';
|
||||||
@@ -5,10 +9,6 @@ import { css, html, LitElement, nothing, unsafeCSS } from 'lit';
|
|||||||
import { property } from 'lit/decorators.js';
|
import { property } from 'lit/decorators.js';
|
||||||
import { choose } from 'lit/directives/choose.js';
|
import { choose } from 'lit/directives/choose.js';
|
||||||
|
|
||||||
import {
|
|
||||||
AIErrorType,
|
|
||||||
type AIItemGroupConfig,
|
|
||||||
} from '../../../../../_common/components/index.js';
|
|
||||||
import type { AIPanelErrorConfig, CopyConfig } from '../../type.js';
|
import type { AIPanelErrorConfig, CopyConfig } from '../../type.js';
|
||||||
import { filterAIItemGroup } from '../../utils.js';
|
import { filterAIItemGroup } from '../../utils.js';
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
import type { nothing, TemplateResult } from 'lit';
|
|
||||||
|
|
||||||
import type {
|
import type {
|
||||||
AIError,
|
AIError,
|
||||||
AIItemGroupConfig,
|
AIItemGroupConfig,
|
||||||
} from '../../../_common/components/ai-item/types.js';
|
} from '@blocksuite/affine-components/ai-item';
|
||||||
|
import type { nothing, TemplateResult } from 'lit';
|
||||||
|
|
||||||
export interface CopyConfig {
|
export interface CopyConfig {
|
||||||
allowed: boolean;
|
allowed: boolean;
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
|
import type { AIItemGroupConfig } from '@blocksuite/affine-components/ai-item';
|
||||||
import { isInsidePageEditor } from '@blocksuite/affine-shared/utils';
|
import { isInsidePageEditor } from '@blocksuite/affine-shared/utils';
|
||||||
import type { EditorHost } from '@blocksuite/block-std';
|
import type { EditorHost } from '@blocksuite/block-std';
|
||||||
|
|
||||||
import type { AIItemGroupConfig } from '../../../_common/components/ai-item/types.js';
|
|
||||||
|
|
||||||
export function filterAIItemGroup(
|
export function filterAIItemGroup(
|
||||||
host: EditorHost,
|
host: EditorHost,
|
||||||
configs: AIItemGroupConfig[]
|
configs: AIItemGroupConfig[]
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import type { AIItemGroupConfig } from '@blocksuite/affine-components/ai-item';
|
||||||
import { scrollbarStyle } from '@blocksuite/affine-shared/styles';
|
import { scrollbarStyle } from '@blocksuite/affine-shared/styles';
|
||||||
import { on, stopPropagation } from '@blocksuite/affine-shared/utils';
|
import { on, stopPropagation } from '@blocksuite/affine-shared/utils';
|
||||||
import type { EditorHost } from '@blocksuite/block-std';
|
import type { EditorHost } from '@blocksuite/block-std';
|
||||||
@@ -5,7 +6,6 @@ import { WithDisposable } from '@blocksuite/global/utils';
|
|||||||
import { css, html, LitElement, nothing } from 'lit';
|
import { css, html, LitElement, nothing } from 'lit';
|
||||||
import { property } from 'lit/decorators.js';
|
import { property } from 'lit/decorators.js';
|
||||||
|
|
||||||
import type { AIItemGroupConfig } from '../../../_common/components/ai-item/types.js';
|
|
||||||
import type { EdgelessRootBlockComponent } from '../../edgeless/edgeless-root-block.js';
|
import type { EdgelessRootBlockComponent } from '../../edgeless/edgeless-root-block.js';
|
||||||
|
|
||||||
export class EdgelessCopilotPanel extends WithDisposable(LitElement) {
|
export class EdgelessCopilotPanel extends WithDisposable(LitElement) {
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import type { AIItemGroupConfig } from '@blocksuite/affine-components/ai-item';
|
||||||
import { AIStarIcon } from '@blocksuite/affine-components/icons';
|
import { AIStarIcon } from '@blocksuite/affine-components/icons';
|
||||||
import type { EditorHost } from '@blocksuite/block-std';
|
import type { EditorHost } from '@blocksuite/block-std';
|
||||||
import { isGfxGroupCompatibleModel } from '@blocksuite/block-std/gfx';
|
import { isGfxGroupCompatibleModel } from '@blocksuite/block-std/gfx';
|
||||||
@@ -5,7 +6,6 @@ import { WithDisposable } from '@blocksuite/global/utils';
|
|||||||
import { css, html, LitElement } from 'lit';
|
import { css, html, LitElement } from 'lit';
|
||||||
import { property } from 'lit/decorators.js';
|
import { property } from 'lit/decorators.js';
|
||||||
|
|
||||||
import type { AIItemGroupConfig } from '../../../_common/components/ai-item/types.js';
|
|
||||||
import type { EdgelessRootBlockComponent } from '../../edgeless/edgeless-root-block.js';
|
import type { EdgelessRootBlockComponent } from '../../edgeless/edgeless-root-block.js';
|
||||||
import type { CopilotTool } from '../../edgeless/gfx-tool/copilot-tool.js';
|
import type { CopilotTool } from '../../edgeless/gfx-tool/copilot-tool.js';
|
||||||
import { sortEdgelessElements } from '../../edgeless/utils/clone-utils.js';
|
import { sortEdgelessElements } from '../../edgeless/utils/clone-utils.js';
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import type { AIItemGroupConfig } from '@blocksuite/affine-components/ai-item';
|
||||||
import type { RootBlockModel } from '@blocksuite/affine-model';
|
import type { RootBlockModel } from '@blocksuite/affine-model';
|
||||||
import {
|
import {
|
||||||
MOUSE_BUTTON,
|
MOUSE_BUTTON,
|
||||||
@@ -18,7 +19,6 @@ import { css, html, nothing } from 'lit';
|
|||||||
import { query, state } from 'lit/decorators.js';
|
import { query, state } from 'lit/decorators.js';
|
||||||
import { styleMap } from 'lit/directives/style-map.js';
|
import { styleMap } from 'lit/directives/style-map.js';
|
||||||
|
|
||||||
import type { AIItemGroupConfig } from '../../../_common/components/ai-item/types.js';
|
|
||||||
import type { EdgelessRootBlockComponent } from '../../edgeless/edgeless-root-block.js';
|
import type { EdgelessRootBlockComponent } from '../../edgeless/edgeless-root-block.js';
|
||||||
import {
|
import {
|
||||||
AFFINE_AI_PANEL_WIDGET,
|
AFFINE_AI_PANEL_WIDGET,
|
||||||
|
|||||||
Reference in New Issue
Block a user