diff --git a/frontend/src/components/dashboard/v2/AgentDetailModal.vue b/frontend/src/components/dashboard/v2/AgentDetailModal.vue new file mode 100644 index 0000000..565890a --- /dev/null +++ b/frontend/src/components/dashboard/v2/AgentDetailModal.vue @@ -0,0 +1,780 @@ + + + + + diff --git a/frontend/src/components/dashboard/v2/AgentNode.vue b/frontend/src/components/dashboard/v2/AgentNode.vue index 86afe6d..7d3d992 100644 --- a/frontend/src/components/dashboard/v2/AgentNode.vue +++ b/frontend/src/components/dashboard/v2/AgentNode.vue @@ -114,6 +114,11 @@ defineEmits<{ box-shadow: 0 0 0 1px rgba(52, 214, 245, 0.2), 0 0 26px -6px rgba(52, 214, 245, 0.55); } +.node.is-block .ncard { + border-color: rgba(251, 113, 133, 0.45); + box-shadow: 0 0 0 1px rgba(251, 113, 133, 0.2), 0 0 26px -6px rgba(251, 113, 133, 0.55); +} + .node.is-iris .ncard { border-color: rgba(124, 108, 255, 0.55); box-shadow: var(--glow); diff --git a/frontend/src/components/dashboard/v2/AlertBar.vue b/frontend/src/components/dashboard/v2/AlertBar.vue index 301d9cd..74d61c8 100644 --- a/frontend/src/components/dashboard/v2/AlertBar.vue +++ b/frontend/src/components/dashboard/v2/AlertBar.vue @@ -62,7 +62,7 @@ defineEmits<{ @click="$emit('blockerClick')" > - {{ blockerCount }} {{ blockerCount === 1 ? 'Blocker' : 'Blocker' }} + {{ blockerCount }} Blocker diff --git a/frontend/src/components/dashboard/v2/FlowCanvas.vue b/frontend/src/components/dashboard/v2/FlowCanvas.vue index 9e7e18b..014fb87 100644 --- a/frontend/src/components/dashboard/v2/FlowCanvas.vue +++ b/frontend/src/components/dashboard/v2/FlowCanvas.vue @@ -291,7 +291,7 @@ function handleReset() { Reset - @@ -305,7 +305,6 @@ function handleReset() { > -
diff --git a/frontend/src/components/dashboard/v2/IrisChat.vue b/frontend/src/components/dashboard/v2/IrisChat.vue index 8c13e9d..00424ac 100644 --- a/frontend/src/components/dashboard/v2/IrisChat.vue +++ b/frontend/src/components/dashboard/v2/IrisChat.vue @@ -12,7 +12,7 @@ * send(text) – Nachricht absenden */ -import { ref, nextTick, watch } from 'vue' +import { ref, computed, nextTick, watch } from 'vue' import { icons } from '../../../composables/icons' import type { ChatMessage } from './types' @@ -28,13 +28,13 @@ const emit = defineEmits<{ /* ── Input ────────────────────────────────────────── */ const inputText = ref('') const msgContainer = ref(null) +const inputRef = ref(null) function handleSend() { const text = inputText.value.trim() if (!text) return emit('send', text) inputText.value = '' - // Focus bleibt im Input } function onKeydown(e: KeyboardEvent) { @@ -44,23 +44,20 @@ function onKeydown(e: KeyboardEvent) { } } -/* ── Auto-scroll nach unten ───────────────────────── */ +/* ── Reversed messages (newest first in DOM for column-reverse) ── */ +const reversedMessages = computed(() => [...props.messages].reverse()) + +/* ── Auto-scroll: column-reverse means scrollTop=0 = bottom (newest) ── */ watch( () => props.messages.length, () => { nextTick(() => { if (msgContainer.value) { - msgContainer.value.scrollTop = msgContainer.value.scrollHeight + msgContainer.value.scrollTop = 0 } }) } ) - -/* ── Format timestamp ─────────────────────────────── */ -function formatTs(ts: string): string { - // Expects "HH:MM" or "HH:MM:SS" - return ts -}