Spaces:
Runtime error
Runtime error
<script lang="ts" setup> | |
import { computed, nextTick } from 'vue' | |
import { HoverButton, SvgIcon } from '@/components/common' | |
import { useAppStore, useChatStore } from '@/store' | |
interface Props { | |
usingContext: boolean | |
} | |
interface Emit { | |
(ev: 'export'): void | |
(ev: 'toggleUsingContext'): void | |
} | |
defineProps<Props>() | |
const emit = defineEmits<Emit>() | |
const appStore = useAppStore() | |
const chatStore = useChatStore() | |
const collapsed = computed(() => appStore.siderCollapsed) | |
const currentChatHistory = computed(() => chatStore.getChatHistoryByCurrentActive) | |
function handleUpdateCollapsed() { | |
appStore.setSiderCollapsed(!collapsed.value) | |
} | |
function onScrollToTop() { | |
const scrollRef = document.querySelector('#scrollRef') | |
if (scrollRef) | |
nextTick(() => scrollRef.scrollTop = 0) | |
} | |
function handleExport() { | |
emit('export') | |
} | |
function toggleUsingContext() { | |
emit('toggleUsingContext') | |
} | |
</script> | |
<template> | |
<header | |
class="sticky top-0 left-0 right-0 z-30 border-b dark:border-neutral-800 bg-white/80 dark:bg-black/20 backdrop-blur" | |
> | |
<div class="relative flex items-center justify-between min-w-0 overflow-hidden h-14"> | |
<div class="flex items-center"> | |
<button | |
class="flex items-center justify-center w-11 h-11" | |
@click="handleUpdateCollapsed" | |
> | |
<SvgIcon v-if="collapsed" class="text-2xl" icon="ri:align-justify" /> | |
<SvgIcon v-else class="text-2xl" icon="ri:align-right" /> | |
</button> | |
</div> | |
<h1 | |
class="flex-1 px-4 pr-6 overflow-hidden cursor-pointer select-none text-ellipsis whitespace-nowrap" | |
@dblclick="onScrollToTop" | |
> | |
{{ currentChatHistory?.title ?? '' }} | |
</h1> | |
<div class="flex items-center space-x-2"> | |
<HoverButton @click="toggleUsingContext"> | |
<span class="text-xl" :class="{ 'text-[#4b9e5f]': usingContext, 'text-[#a8071a]': !usingContext }"> | |
<SvgIcon icon="ri:chat-history-line" /> | |
</span> | |
</HoverButton> | |
<HoverButton @click="handleExport"> | |
<span class="text-xl text-[#4f555e] dark:text-white"> | |
<SvgIcon icon="ri:download-2-line" /> | |
</span> | |
</HoverButton> | |
</div> | |
</div> | |
</header> | |
</template> | |