Newer
Older
navi-1 / webclient / src / components / messages / CompressionNotice.vue
<template>
  <div v-if="msg.type === 'compression_pending'" class="compression-notice compression-pending">
    <i class="ph ph-spinner ph-spin"></i>
    <span>{{ msg.text || 'Compressing context…' }}</span>
  </div>
  <details v-else class="compression-notice" :open="!msg.summary">
    <summary>
      <i class="ph ph-arrows-in"></i>
      Context compressed
      <span v-if="msg.before != null && msg.after != null" class="compression-counts">
        ({{ msg.before }} → {{ msg.after }} messages)
      </span>
      <i v-if="msg.summary" class="ph ph-caret-down compression-chevron"></i>
    </summary>
    <div v-if="msg.summary" class="compression-body" v-html="renderMarkdown(msg.summary)" />
  </details>
</template>

<script setup>
import { renderMarkdown } from '@/composables/useMarkdown.js'
defineProps({ msg: { type: Object, required: true } })
</script>

<style scoped>
.compression-pending {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 8px 12px;
  border-radius: 8px;
  background: var(--color-bg-tertiary, #2a2b3d);
  color: var(--color-text-muted, #8b8fa3);
  font-size: 13px;
}
.compression-pending i {
  font-size: 16px;
}
</style>