Newer
Older
navi-1 / webclient / src / components / chat / FilePreviewStrip.vue
<template>
  <div class="file-preview-strip">
    <!-- Images -->
    <div
      v-for="(src, i) in chat.pendingImages"
      :key="`img-${i}`"
      class="file-preview-image"
    >
      <img :src="src" alt="attachment" />
      <button class="file-preview-remove" @click="removeImage(i)" title="Remove">
        <i class="ph ph-x"></i>
      </button>
    </div>

    <!-- Files -->
    <div
      v-for="(file, i) in chat.pendingFiles"
      :key="`file-${i}`"
      class="file-preview-pill"
    >
      <i class="ph ph-file"></i>
      <span :title="file.name">{{ file.name }}</span>
      <button class="file-preview-remove" @click="removeFile(i)" title="Remove">
        <i class="ph ph-x"></i>
      </button>
    </div>
  </div>
</template>

<script setup>
import { useChatStore } from '@/stores/chat.js'
import { useFileUpload } from '@/composables/useFileUpload.js'

const chat = useChatStore()
const { removeImage, removeFile } = useFileUpload()
</script>

<style scoped>
.file-preview-image {
  position: relative;

  .file-preview-remove {
    position: absolute;
    top: -4px;
    right: -4px;
    background: var(--surface-panel, #1f2335);
    border: 1px solid var(--border-color-muted);
    width: 18px;
    height: 18px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 10px;
    cursor: pointer;
    color: var(--color-text-dark);

    &:hover { color: var(--color-error); }
  }
}
</style>