diff --git a/packages/frontend/core/src/blocksuite/ai/chat-panel/chat-panel-messages.ts b/packages/frontend/core/src/blocksuite/ai/chat-panel/chat-panel-messages.ts index c54872b038..0290317ee9 100644 --- a/packages/frontend/core/src/blocksuite/ai/chat-panel/chat-panel-messages.ts +++ b/packages/frontend/core/src/blocksuite/ai/chat-panel/chat-panel-messages.ts @@ -11,7 +11,6 @@ import type { BaseSelection } from '@blocksuite/affine/store'; import { css, html, nothing } from 'lit'; import { property, query, state } from 'lit/decorators.js'; import { repeat } from 'lit/directives/repeat.js'; -import { styleMap } from 'lit/directives/style-map.js'; import { debounce } from 'lodash-es'; import { @@ -50,7 +49,7 @@ export class ChatPanelMessages extends WithDisposable(ShadowlessElement) { overflow-y: auto; } - .chat-panel-messages-placeholder { + .messages-placeholder { width: 100%; position: absolute; z-index: 1; @@ -63,6 +62,47 @@ export class ChatPanelMessages extends WithDisposable(ShadowlessElement) { gap: 12px; } + .messages-placeholder-title { + font-size: 18px; + font-weight: 600; + color: var(--affine-text-primary-color); + } + + .messages-placeholder-title[data-loading='true'] { + font-size: var(--affine-font-sm); + color: var(--affine-text-secondary-color); + } + + .onboarding-wrapper { + display: flex; + gap: 8px; + flex-direction: column; + margin-top: 16px; + } + + .onboarding-item { + display: flex; + height: 28px; + gap: 8px; + align-items: center; + justify-content: start; + cursor: pointer; + } + + .onboarding-item-icon { + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + } + + .onboarding-item-text { + font-size: var(--affine-font-xs); + font-weight: 400; + color: var(--affine-text-primary-color); + white-space: nowrap; + } + .item-wrapper { margin-left: 32px; } @@ -73,14 +113,14 @@ export class ChatPanelMessages extends WithDisposable(ShadowlessElement) { gap: 10px; margin-bottom: 4px; color: var(--affine-text-primary-color); - font-size: 14px; + font-size: var(--affine-font-sm); font-weight: 500; user-select: none; } .message-info { color: var(--affine-placeholder-color); - font-size: 12px; + font-size: var(--affine-font-xs); font-weight: 400; } @@ -126,7 +166,7 @@ export class ChatPanelMessages extends WithDisposable(ShadowlessElement) { accessor _selectionValue: BaseSelection[] = []; @state() - accessor showDownIndicator = false; + accessor canScrollDown = false; @state() accessor avatarUrl = ''; @@ -156,46 +196,32 @@ export class ChatPanelMessages extends WithDisposable(ShadowlessElement) { return this.messagesContainer; } + get showDownIndicator() { + if (!this.messagesContainer) return false; + const { clientHeight, scrollTop, scrollHeight } = this.messagesContainer; + const canScrollDown = scrollHeight - scrollTop - clientHeight > 200; + const showDownIndicator = + canScrollDown && + this.chatContextValue.items.length > 0 && + this.chatContextValue.status !== 'transmitting'; + return showDownIndicator; + } + private _renderAIOnboarding() { return this.isLoading || !this.host?.doc.get(FeatureFlagService).getFlag('enable_ai_onboarding') ? nothing - : html`