archy/neode-ui/src/views/Chat.vue

83 lines
2.7 KiB
Vue
Raw Normal View History

<template>
<div class="chat-fullscreen">
<!-- Close button: top-left, glass pill, returns to previous view -->
<div class="chat-mode-pill">
<button class="chat-close-btn" @click="closeChat">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
</svg>
<span class="text-xs font-medium">Close</span>
</button>
</div>
<!-- AIUI iframe -->
<iframe
v-if="aiuiUrl"
ref="aiuiFrame"
:src="aiuiUrl"
class="chat-iframe"
sandbox="allow-scripts allow-same-origin allow-forms"
allow="microphone"
style="background: transparent"
/>
<!-- Fallback when no AIUI URL configured -->
<div v-else class="chat-placeholder">
<div class="chat-placeholder-inner">
<div class="chat-placeholder-icon">
<svg class="w-8 h-8 text-white/40" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" />
</svg>
</div>
<h2 class="text-2xl font-semibold text-white mb-2">AI Assistant</h2>
<p class="text-white/60 mb-4 leading-relaxed">
AIUI is not connected. Configure the AIUI URL in your environment settings.
</p>
<p class="text-xs text-white/30">
Set <code class="text-white/50">VITE_AIUI_URL</code> or deploy the AIUI container.
</p>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { ref, computed, onMounted, onBeforeUnmount } from 'vue'
import { useRouter } from 'vue-router'
import { ContextBroker } from '@/services/contextBroker'
const router = useRouter()
const aiuiFrame = ref<HTMLIFrameElement | null>(null)
let broker: ContextBroker | null = null
const aiuiUrl = computed(() => {
const envUrl = import.meta.env.VITE_AIUI_URL
if (envUrl) return `${envUrl}?embedded=true`
// Production: served from /aiui/ via nginx proxy
if (import.meta.env.PROD) return '/aiui/?embedded=true'
return ''
})
function closeChat() {
// Go back if there's history, otherwise go to dashboard
if (window.history.length > 1) {
router.back()
} else {
router.push('/dashboard')
}
}
onMounted(() => {
// Start context broker if AIUI URL is available
if (aiuiUrl.value) {
broker = new ContextBroker(aiuiFrame, aiuiUrl.value)
broker.start()
}
})
onBeforeUnmount(() => {
broker?.stop()
broker = null
})
</script>