diff --git a/packages/frontend/core/src/blocksuite/ai/components/ai-item/ai-item-list.ts b/packages/frontend/core/src/blocksuite/ai/components/ai-item/ai-item-list.ts index 0a23485dc5..0e8ab70f52 100644 --- a/packages/frontend/core/src/blocksuite/ai/components/ai-item/ai-item-list.ts +++ b/packages/frontend/core/src/blocksuite/ai/components/ai-item/ai-item-list.ts @@ -92,7 +92,7 @@ export class AIItemList extends WithDisposable(LitElement) { .onClick=${this.onClick} .abortController=${this._abortController} >`, - positionStrategy: 'fixed', + positionStrategy: 'absolute', computePosition: { referenceElement: aiItemContainer, placement: 'right-start', @@ -104,6 +104,11 @@ export class AIItemList extends WithDisposable(LitElement) { }); }; + override disconnectedCallback() { + super.disconnectedCallback(); + this._closeSubMenu(); + } + override render() { return html`${repeat(this.groups, group => { return html` @@ -114,15 +119,14 @@ export class AIItemList extends WithDisposable(LitElement) { : nothing} ${repeat( group.items, + item => item.name, item => html` { - this._openSubMenu(item); - }} + @mouseenter=${() => this._openSubMenu(item)} >` )} `; diff --git a/packages/frontend/core/src/blocksuite/ai/components/ai-item/ai-sub-item-list.ts b/packages/frontend/core/src/blocksuite/ai/components/ai-item/ai-sub-item-list.ts index ab489a28ce..0bb44b33ad 100644 --- a/packages/frontend/core/src/blocksuite/ai/components/ai-item/ai-sub-item-list.ts +++ b/packages/frontend/core/src/blocksuite/ai/components/ai-item/ai-sub-item-list.ts @@ -3,11 +3,12 @@ import { PropTypes, requiredProperties, } from '@blocksuite/affine/block-std'; -import { EnterIcon } from '@blocksuite/affine/blocks'; +import { EnterIcon, stopPropagation } from '@blocksuite/affine/blocks'; import { WithDisposable } from '@blocksuite/affine/global/lit'; 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 { menuItemStyles } from './styles'; import type { AIItemConfig, AISubItemConfig } from './types'; @@ -54,10 +55,18 @@ export class AISubItemList extends WithDisposable(LitElement) { this.abortController.abort(); }; + override connectedCallback() { + super.connectedCallback(); + + this.disposables.addFromEvent(this, 'pointerdown', stopPropagation); + } + override render() { if (!this.item.subItem || this.item.subItem.length <= 0) return nothing; return html`
- ${this.item.subItem?.map( + ${repeat( + this.item.subItem, + subItem => subItem.type, subItem => html`