message 组件开发
This commit is contained in:
parent
2f3a5eb968
commit
6a1fed8513
@ -104,18 +104,17 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="bottom">
|
<div class="bottom">
|
||||||
<div class="input-box" :class="{ 'wide-screen': meta.wideScreen }">
|
<div class="message-input-wrapper">
|
||||||
<div class="input-area">
|
<MessageInputComponent
|
||||||
<a-textarea
|
v-model="conv.inputText"
|
||||||
class="user-input"
|
:is-loading="isStreaming"
|
||||||
v-model:value="conv.inputText"
|
:send-button-disabled="!conv.inputText && !isStreaming"
|
||||||
@keydown="handleKeyDown"
|
|
||||||
placeholder="输入问题……"
|
|
||||||
:auto-size="{ minRows: 2, maxRows: 10 }"
|
:auto-size="{ minRows: 2, maxRows: 10 }"
|
||||||
/>
|
:custom-classes="{ 'wide-screen': meta.wideScreen }"
|
||||||
</div>
|
@send="sendMessage"
|
||||||
<div class="input-options">
|
@keydown="handleKeyDown"
|
||||||
<div class="options__left">
|
>
|
||||||
|
<template #options-left>
|
||||||
<div
|
<div
|
||||||
:class="{'switch': true, 'opt-item': true, 'active': meta.use_web}"
|
:class="{'switch': true, 'opt-item': true, 'active': meta.use_web}"
|
||||||
v-if="configStore.config.enable_web_search"
|
v-if="configStore.config.enable_web_search"
|
||||||
@ -151,17 +150,12 @@
|
|||||||
</a-menu>
|
</a-menu>
|
||||||
</template>
|
</template>
|
||||||
</a-dropdown>
|
</a-dropdown>
|
||||||
</div>
|
</template>
|
||||||
<div class="options__right">
|
</MessageInputComponent>
|
||||||
<a-button size="large" @click="sendMessage" :disabled="(!conv.inputText && !isStreaming)" type="link">
|
|
||||||
<template #icon> <ArrowUpOutlined v-if="!isStreaming" /> <LoadingOutlined v-else/> </template>
|
|
||||||
</a-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<p class="note">请注意辨别内容的可靠性 By {{ configStore.config?.model_provider }}: {{ configStore.config?.model_name }}</p>
|
<p class="note">请注意辨别内容的可靠性 By {{ configStore.config?.model_provider }}: {{ configStore.config?.model_name }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
@ -197,6 +191,7 @@ import { message } from 'ant-design-vue'
|
|||||||
import RefsComponent from '@/components/RefsComponent.vue'
|
import RefsComponent from '@/components/RefsComponent.vue'
|
||||||
import hljs from 'highlight.js';
|
import hljs from 'highlight.js';
|
||||||
import 'highlight.js/styles/github.css';
|
import 'highlight.js/styles/github.css';
|
||||||
|
import MessageInputComponent from '@/components/MessageInputComponent.vue'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
conv: Object,
|
conv: Object,
|
||||||
@ -618,7 +613,7 @@ watch(
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
background: white;
|
background: var(--main-light-6);
|
||||||
position: relative;
|
position: relative;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
flex: 5 5 200px;
|
flex: 5 5 200px;
|
||||||
@ -629,7 +624,8 @@ watch(
|
|||||||
position: sticky;
|
position: sticky;
|
||||||
top: 0;
|
top: 0;
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
background-color: white;
|
background-color: rgba(255, 255, 255, 0.9);
|
||||||
|
backdrop-filter: blur(10px);
|
||||||
height: var(--header-height);
|
height: var(--header-height);
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
@ -872,124 +868,29 @@ watch(
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
padding: 4px 2rem 0 2rem;
|
padding: 4px 2rem 0 2rem;
|
||||||
background: white;
|
|
||||||
|
|
||||||
.input-box {
|
.message-input-wrapper {
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: auto;
|
|
||||||
max-width: 800px;
|
max-width: 800px;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
padding: 0.25rem 0.5rem;
|
background-color: white;
|
||||||
border: 2px solid var(--gray-200);
|
|
||||||
border-radius: 1rem;
|
|
||||||
background: var(--gray-50);
|
|
||||||
transition: background, border 0.3s, box-shadow 0.3s, max-width 0.3s ease;
|
|
||||||
|
|
||||||
&.wide-screen {
|
&.wide-screen {
|
||||||
max-width: 1200px;
|
max-width: 1200px;
|
||||||
}
|
}
|
||||||
|
|
||||||
&:focus-within {
|
|
||||||
border: 2px solid var(--main-500);
|
|
||||||
background: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
.input-options {
|
|
||||||
display: flex;
|
|
||||||
padding: 4px 8px;
|
|
||||||
|
|
||||||
.options__left,
|
|
||||||
.options__right {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.options__left {
|
|
||||||
flex: 1;
|
|
||||||
|
|
||||||
.opt-item {
|
|
||||||
border-radius: 12px;
|
|
||||||
border: 1px solid var(--gray-300);
|
|
||||||
padding: 4px 8px;
|
|
||||||
cursor: pointer;
|
|
||||||
font-size: 12px;
|
|
||||||
color: var(--gray-700);
|
|
||||||
|
|
||||||
&.active {
|
|
||||||
color: var(--main-600);
|
|
||||||
border: 1px solid var(--main-500);
|
|
||||||
background-color: var(--main-10);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.input-area {
|
|
||||||
display: flex;
|
|
||||||
align-items: flex-end;
|
|
||||||
gap: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
textarea.user-input {
|
|
||||||
flex: 1;
|
|
||||||
height: 40px;
|
|
||||||
padding: 0.5rem 0.5rem;
|
|
||||||
background-color: transparent;
|
|
||||||
border: none;
|
|
||||||
margin: 0 0;
|
|
||||||
color: #111111;
|
|
||||||
font-size: 16px;
|
|
||||||
font-variation-settings: 'wght' 400, 'opsz' 10.5;
|
|
||||||
outline: none;
|
|
||||||
resize: none;
|
|
||||||
&:focus {
|
|
||||||
outline: none;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:active {
|
|
||||||
outline: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
button.ant-btn-icon-only {
|
|
||||||
height: 32px;
|
|
||||||
width: 32px;
|
|
||||||
cursor: pointer;
|
|
||||||
background-color: var(--main-color);
|
|
||||||
border-radius: 50%;
|
|
||||||
border: none;
|
|
||||||
transition: color 0.3s;
|
|
||||||
box-shadow: none;
|
|
||||||
color: white;
|
|
||||||
padding: 0;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
background-color: var(--main-800);
|
|
||||||
}
|
|
||||||
|
|
||||||
&:disabled {
|
|
||||||
background-color: var(--gray-400);
|
|
||||||
cursor: not-allowed;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.note {
|
.note {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
font-size: small;
|
font-size: small;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding: 0rem;
|
padding: 0;
|
||||||
color: #ccc;
|
color: #ccc;
|
||||||
margin: 4px 0;
|
margin: 4px 0;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.ant-dropdown-link {
|
.ant-dropdown-link {
|
||||||
color: var(--gray-900);
|
color: var(--gray-900);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|||||||
247
web/src/components/MessageInputComponent.vue
Normal file
247
web/src/components/MessageInputComponent.vue
Normal file
@ -0,0 +1,247 @@
|
|||||||
|
<template>
|
||||||
|
<div class="input-box" :class="customClasses">
|
||||||
|
<div class="input-area">
|
||||||
|
<a-textarea
|
||||||
|
class="user-input"
|
||||||
|
v-model:value="inputValue"
|
||||||
|
@keydown="handleKeyPress"
|
||||||
|
:placeholder="placeholder"
|
||||||
|
:disabled="disabled"
|
||||||
|
:auto-size="autoSize"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="input-options">
|
||||||
|
<div class="options__left">
|
||||||
|
<slot name="options-left"></slot>
|
||||||
|
</div>
|
||||||
|
<div class="options__right">
|
||||||
|
<a-button @click="handleSend" :disabled="sendButtonDisabled" type="link">
|
||||||
|
<template #icon>
|
||||||
|
<component :is="getIcon" />
|
||||||
|
</template>
|
||||||
|
</a-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref, computed, toRefs } from 'vue';
|
||||||
|
import {
|
||||||
|
SendOutlined,
|
||||||
|
ArrowUpOutlined,
|
||||||
|
LoadingOutlined
|
||||||
|
} from '@ant-design/icons-vue';
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
modelValue: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
placeholder: {
|
||||||
|
type: String,
|
||||||
|
default: '输入问题...'
|
||||||
|
},
|
||||||
|
isLoading: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
disabled: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
sendButtonDisabled: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
autoSize: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({ minRows: 2, maxRows: 6 })
|
||||||
|
},
|
||||||
|
sendIcon: {
|
||||||
|
type: String,
|
||||||
|
default: 'ArrowUpOutlined'
|
||||||
|
},
|
||||||
|
customClasses: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({})
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const emit = defineEmits(['update:modelValue', 'send', 'keydown']);
|
||||||
|
|
||||||
|
// 图标映射
|
||||||
|
const iconComponents = {
|
||||||
|
'SendOutlined': SendOutlined,
|
||||||
|
'ArrowUpOutlined': ArrowUpOutlined,
|
||||||
|
'LoadingOutlined': LoadingOutlined
|
||||||
|
};
|
||||||
|
|
||||||
|
// 根据传入的图标名动态获取组件
|
||||||
|
const getIcon = computed(() => {
|
||||||
|
if (props.isLoading) {
|
||||||
|
return LoadingOutlined;
|
||||||
|
}
|
||||||
|
return iconComponents[props.sendIcon] || ArrowUpOutlined;
|
||||||
|
});
|
||||||
|
|
||||||
|
// 创建本地引用以进行双向绑定
|
||||||
|
const inputValue = computed({
|
||||||
|
get: () => props.modelValue,
|
||||||
|
set: (val) => emit('update:modelValue', val)
|
||||||
|
});
|
||||||
|
|
||||||
|
// 处理键盘事件
|
||||||
|
const handleKeyPress = (e) => {
|
||||||
|
emit('keydown', e);
|
||||||
|
};
|
||||||
|
|
||||||
|
// 处理发送按钮点击
|
||||||
|
const handleSend = () => {
|
||||||
|
emit('send');
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.input-box {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
max-width: 800px;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 0.4rem 0.75rem;
|
||||||
|
border: 2px solid var(--gray-200);
|
||||||
|
border-radius: 0.8rem;
|
||||||
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
|
||||||
|
&:focus-within {
|
||||||
|
border-color: var(--main-500);
|
||||||
|
background: white;
|
||||||
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.wide-screen {
|
||||||
|
max-width: 1200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-area {
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-end;
|
||||||
|
gap: 8px;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-input {
|
||||||
|
flex: 1;
|
||||||
|
min-height: 44px;
|
||||||
|
padding: 0.5rem 0;
|
||||||
|
background-color: transparent;
|
||||||
|
border: none;
|
||||||
|
margin: 0;
|
||||||
|
color: #222222;
|
||||||
|
font-size: 14px;
|
||||||
|
outline: none;
|
||||||
|
resize: none;
|
||||||
|
line-height: 1.6;
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
outline: none;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:active {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
&::placeholder {
|
||||||
|
color: #888888;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-options {
|
||||||
|
display: flex;
|
||||||
|
padding: 8px 0 0;
|
||||||
|
margin-top: 6px;
|
||||||
|
border-top: 1px solid var(--gray-100);
|
||||||
|
|
||||||
|
.options__left,
|
||||||
|
.options__right {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.options__right {
|
||||||
|
width: fit-content;
|
||||||
|
}
|
||||||
|
|
||||||
|
.options__left {
|
||||||
|
flex: 1;
|
||||||
|
|
||||||
|
:deep(.opt-item) {
|
||||||
|
border-radius: 12px;
|
||||||
|
border: 1px solid var(--gray-300);
|
||||||
|
padding: 5px 10px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 12px;
|
||||||
|
color: var(--gray-700);
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: var(--main-10);
|
||||||
|
color: var(--main-600);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.active {
|
||||||
|
color: var(--main-600);
|
||||||
|
border: 1px solid var(--main-500);
|
||||||
|
background-color: var(--main-10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
button.ant-btn-icon-only {
|
||||||
|
height: 32px;
|
||||||
|
width: 32px;
|
||||||
|
cursor: pointer;
|
||||||
|
background-color: var(--main-500);
|
||||||
|
border-radius: 50%;
|
||||||
|
border: none;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
|
||||||
|
color: white;
|
||||||
|
padding: 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
font-size: 14px;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: var(--main-600);
|
||||||
|
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:active {
|
||||||
|
transform: translateY(0);
|
||||||
|
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:disabled {
|
||||||
|
background-color: var(--gray-400);
|
||||||
|
cursor: not-allowed;
|
||||||
|
transform: none;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 520px) {
|
||||||
|
.input-box {
|
||||||
|
border-radius: 15px;
|
||||||
|
padding: 0.625rem 0.875rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -90,28 +90,20 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="bottom">
|
<div class="bottom">
|
||||||
<div class="input-box">
|
<div class="message-input-wrapper">
|
||||||
<div class="input-area">
|
<MessageInputComponent
|
||||||
<a-textarea
|
v-model="userInput"
|
||||||
class="user-input"
|
:is-loading="isProcessing"
|
||||||
v-model:value="userInput"
|
|
||||||
@keydown="handleKeyDown"
|
|
||||||
placeholder="输入问题..."
|
|
||||||
:disabled="!currentAgent || isProcessing"
|
:disabled="!currentAgent || isProcessing"
|
||||||
:auto-size="{ minRows: 2, maxRows: 6 }"
|
:send-button-disabled="!userInput || !currentAgent || isProcessing"
|
||||||
|
:placeholder="'输入问题...'"
|
||||||
|
@send="sendMessage"
|
||||||
|
@keydown="handleKeyDown"
|
||||||
/>
|
/>
|
||||||
</div>
|
|
||||||
<div class="input-options">
|
|
||||||
<div class="options__right">
|
|
||||||
<a-button size="large" @click="sendMessage" :disabled="!userInput || !currentAgent || isProcessing" type="link">
|
|
||||||
<template #icon> <SendOutlined v-if="!isProcessing" /> <LoadingOutlined v-else/> </template>
|
|
||||||
</a-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<p class="note">请注意辨别内容的可靠性</p>
|
<p class="note">请注意辨别内容的可靠性</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- 右侧侧边栏 -->
|
<!-- 右侧侧边栏 -->
|
||||||
<div class="right-sidebar" :class="{ 'is-open': state.isRightSidebarOpen }">
|
<div class="right-sidebar" :class="{ 'is-open': state.isRightSidebarOpen }">
|
||||||
@ -167,6 +159,7 @@ import { markedHighlight } from 'marked-highlight';
|
|||||||
import { onClickOutside } from '@vueuse/core';
|
import { onClickOutside } from '@vueuse/core';
|
||||||
import 'highlight.js/styles/github.css';
|
import 'highlight.js/styles/github.css';
|
||||||
import hljs from 'highlight.js';
|
import hljs from 'highlight.js';
|
||||||
|
import MessageInputComponent from '@/components/MessageInputComponent.vue'
|
||||||
|
|
||||||
// ==================== 初始化配置 ====================
|
// ==================== 初始化配置 ====================
|
||||||
|
|
||||||
@ -1232,90 +1225,21 @@ const toggleToolCall = (toolCallId) => {
|
|||||||
padding: 4px 2rem 0 2rem;
|
padding: 4px 2rem 0 2rem;
|
||||||
background: white;
|
background: white;
|
||||||
|
|
||||||
.input-box {
|
.message-input-wrapper {
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: auto;
|
|
||||||
max-width: 800px;
|
max-width: 800px;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
padding: 0.25rem 0.5rem;
|
|
||||||
border: 2px solid var(--gray-200);
|
|
||||||
border-radius: 1rem;
|
|
||||||
background: var(--gray-50);
|
|
||||||
transition: background, border 0.3s, box-shadow 0.3s;
|
|
||||||
|
|
||||||
&:focus-within {
|
|
||||||
border: 2px solid var(--main-500);
|
|
||||||
background: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
.input-options {
|
|
||||||
display: flex;
|
|
||||||
padding: 4px 8px;
|
|
||||||
justify-content: flex-end;
|
|
||||||
}
|
|
||||||
|
|
||||||
.input-area {
|
|
||||||
display: flex;
|
|
||||||
align-items: flex-end;
|
|
||||||
gap: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.user-input {
|
|
||||||
flex: 1;
|
|
||||||
height: 40px;
|
|
||||||
padding: 0.5rem 0.5rem;
|
|
||||||
background-color: transparent;
|
|
||||||
border: none;
|
|
||||||
margin: 0;
|
|
||||||
color: var(--gray-900);
|
|
||||||
font-size: 16px;
|
|
||||||
outline: none;
|
|
||||||
resize: none;
|
|
||||||
|
|
||||||
&:focus {
|
|
||||||
outline: none;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:active {
|
|
||||||
outline: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
button.ant-btn-icon-only {
|
|
||||||
height: 32px;
|
|
||||||
width: 32px;
|
|
||||||
cursor: pointer;
|
|
||||||
background-color: var(--main-color);
|
|
||||||
border-radius: 50%;
|
|
||||||
border: none;
|
|
||||||
transition: color 0.3s;
|
|
||||||
box-shadow: none;
|
|
||||||
color: white;
|
|
||||||
padding: 0;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
background-color: var(--main-800);
|
|
||||||
}
|
|
||||||
|
|
||||||
&:disabled {
|
|
||||||
background-color: var(--gray-400);
|
|
||||||
cursor: not-allowed;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.note {
|
.note {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
font-size: small;
|
font-size: small;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding: 0rem;
|
padding: 0;
|
||||||
color: #ccc;
|
color: #ccc;
|
||||||
margin: 4px 0;
|
margin: 4px 0;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.conversation-list::-webkit-scrollbar,
|
.conversation-list::-webkit-scrollbar,
|
||||||
@ -1481,15 +1405,6 @@ const toggleToolCall = (toolCallId) => {
|
|||||||
|
|
||||||
.bottom {
|
.bottom {
|
||||||
padding: 0.5rem 0.5rem;
|
padding: 0.5rem 0.5rem;
|
||||||
|
|
||||||
.input-box {
|
|
||||||
border-radius: 8px;
|
|
||||||
padding: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.note {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user