ChatPromptSubmitPRO

ButtonGitHub
一个用于提交聊天提示并自动处理状态的按钮。

用法

ChatPromptSubmit 组件用于 ChatPrompt 组件内部,用于提交提示。它自动处理不同的 status 值来控制聊天。

它扩展了 Button 组件,因此你可以传递任何属性,例如 colorvariantsize 等。

<template>
  <UChatPrompt>
    <UChatPromptSubmit />
  </UChatPrompt>
</template>
你也可以在 ChatPrompt 组件的 footer 插槽中使用它。

就绪

当其状态为 ready 时,使用 colorvarianticon 属性来自定义 Button。默认为

  • color="primary"
  • variant="solid"
  • icon="i-lucide-arrow-up"
<template>
  <UChatPromptSubmit color="primary" variant="solid" icon="i-lucide-arrow-up" />
</template>
你可以在 app.config.ts 中的 ui.icons.arrowUp 键下全局自定义此图标。
你可以在 vite.config.ts 中的 ui.icons.arrowUp 键下全局自定义此图标。

已提交

当其状态为 submitted 时,使用 submitted-colorsubmitted-variantsubmitted-icon 属性来自定义 Button。默认为

  • submittedColor="neutral"
  • submittedVariant="subtle"
  • submittedIcon="i-lucide-square"
当用户点击 Button 时,会触发 stop 事件。
<template>
  <UChatPromptSubmit
    submitted-color="neutral"
    submitted-variant="subtle"
    submitted-icon="i-lucide-square"
    status="submitted"
  />
</template>
你可以在 app.config.ts 中的 ui.icons.stop 键下全局自定义此图标。
你可以在 vite.config.ts 中的 ui.icons.stop 键下全局自定义此图标。

流式传输中

当其状态为 streaming 时,使用 streaming-colorstreaming-variantstreaming-icon 属性来自定义 Button。默认为

  • streamingColor="neutral"
  • streamingVariant="subtle"
  • streamingIcon="i-lucide-square"
当用户点击 Button 时,会触发 stop 事件。
<template>
  <UChatPromptSubmit
    streaming-color="neutral"
    streaming-variant="subtle"
    streaming-icon="i-lucide-square"
    status="streaming"
  />
</template>
你可以在 app.config.ts 中的 ui.icons.stop 键下全局自定义此图标。
你可以在 vite.config.ts 中的 ui.icons.stop 键下全局自定义此图标。

错误

当其状态为 error 时,使用 error-colorerror-varianterror-icon 属性来自定义 Button。默认为

  • errorColor="error"
  • errorVariant="soft"
  • errorIcon="i-lucide-rotate-ccw"
当用户点击 Button 时,会触发 reload 事件。
<template>
  <UChatPromptSubmit
    error-color="error"
    error-variant="soft"
    error-icon="i-lucide-rotate-ccw"
    status="error"
  />
</template>
你可以在 app.config.ts 中的 ui.icons.reload 键下全局自定义此图标。
你可以在 vite.config.ts 中的 ui.icons.reload 键下全局自定义此图标。

示例

这些聊天组件设计用于与 Vercel AI SDK 中的 useChat 可组合项一起使用。
请查看 GitHub 上我们 AI 聊天模板的源代码,以获取实际示例。

在页面内

将 ChatPromptSubmit 组件与 useChat 可组合函数一起使用,可在页面中显示聊天提示。

传递 status 属性并监听 stopreload 事件以控制聊天。

pages/[id].vue
<script setup lang="ts">
import { useChat } from '@ai-sdk/vue'

const { messages, input, handleSubmit, reload, stop, status, error } = useChat()
</script>

<template>
  <UDashboardPanel>
    <template #body>
      <UContainer>
        <UChatMessages :messages="messages" :status="status">
          <template #content="{ message }">
            <MDC :value="message.content" :cache-key="message.id" unwrap="p" />
          </template>
        </UChatMessages>
      </UContainer>
    </template>

    <template #footer>
      <UContainer>
        <UChatPrompt v-model="input" :error="error" @submit="handleSubmit">
          <UChatPromptSubmit :status="status" @stop="stop" @reload="reload" />
        </UChatPrompt>
      </UContainer>
    </template>
  </UDashboardPanel>
</template>

API

属性

属性默认值类型
status

'ready'

"error" | "submitted" | "streaming" | "ready"

图标

appConfig.ui.icons.arrowUp

string

当状态为 ready 时,按钮中显示的图标。

color

'primary'

"error" | "primary" | "secondary" | "success" | "info" | "warning" | "neutral"

当状态为 ready 时,按钮的颜色。

variant

'solid'

"link" | "solid" | "outline" | "soft" | "subtle" | "ghost"

当状态为 ready 时,按钮的变体。

streamingIcon

appConfig.ui.icons.stop

string

当状态为 streaming 时,按钮中显示的图标。

streamingColor

'neutral'

"error" | "primary" | "secondary" | "success" | "info" | "warning" | "neutral"

当状态为 streaming 时,按钮的颜色。

streamingVariant

'subtle'

"link" | "solid" | "outline" | "soft" | "subtle" | "ghost"

当状态为 streaming 时,按钮的变体。

submittedIcon

appConfig.ui.icons.stop

string

当状态为 submitted 时,按钮中显示的图标。

submittedColor

'neutral'

"error" | "primary" | "secondary" | "success" | "info" | "warning" | "neutral"

当状态为 submitted 时,按钮的颜色。

submittedVariant

'subtle'

"link" | "solid" | "outline" | "soft" | "subtle" | "ghost"

当状态为 submitted 时,按钮的变体。

errorIcon

appConfig.ui.icons.reload

string

当状态为 error 时,按钮中显示的图标。

errorColor

'error'

"error" | "primary" | "secondary" | "success" | "info" | "warning" | "neutral"

当状态为 error 时,按钮的颜色。

errorVariant

'soft'

"link" | "solid" | "outline" | "soft" | "subtle" | "ghost"

当状态为 error 时,按钮的变体。

label

string

尺寸

'md'

"md" | "xs" | "sm" | "lg" | "xl"

ui

{ base?: ClassNameValue; } & { base?: ClassNameValue; label?: ClassNameValue; leadingIcon?: ClassNameValue; leadingAvatar?: ClassNameValue; leadingAvatarSize?: ClassNameValue; trailingIcon?: ClassNameValue; }

插槽

插槽类型
前置

{}

default

{}

尾部

{}

事件

事件类型
stop

[]

reload

[]

主题

app.config.ts
export default defineAppConfig({
  uiPro: {
    chatPromptSubmit: {
      slots: {
        base: ''
      }
    }
  }
})
vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ui from '@nuxt/ui/vite'

export default defineConfig({
  plugins: [
    vue(),
    ui({
      uiPro: {
        chatPromptSubmit: {
          slots: {
            base: ''
          }
        }
      }
    })
  ]
})
vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import uiPro from '@nuxt/ui-pro/vite'

export default defineConfig({
  plugins: [
    vue(),
    uiPro({
      uiPro: {
        chatPromptSubmit: {
          slots: {
            base: ''
          }
        }
      }
    })
  ]
})