11<script setup lang="ts">
2- import type { DevToolsLogEntry , DevToolsLogLevel } from ' @vitejs/devtools-kit'
3- import DockIcon from ' ./DockIcon.vue'
2+ import type { DevToolsLogEntry } from ' @vitejs/devtools-kit'
3+ import { useTimeAgo } from ' @vueuse/core'
4+ import { levels } from ' ./LogItemConstants'
45
5- // @unocss-include
6-
7- defineProps <{
6+ const props = defineProps <{
87 entry: DevToolsLogEntry
98 compact? : boolean
109}>()
1110
12- const levelIcons: Record <DevToolsLogLevel , string > = {
13- info: ' ph:info-duotone' ,
14- warn: ' ph:warning-duotone' ,
15- error: ' ph:x-circle-duotone' ,
16- success: ' ph:check-circle-duotone' ,
17- debug: ' ph:bug-duotone' ,
18- }
19-
20- const levelIndicatorColors: Record <DevToolsLogLevel , string > = {
21- info: ' bg-blue' ,
22- warn: ' bg-amber' ,
23- error: ' bg-red' ,
24- success: ' bg-green' ,
25- debug: ' bg-gray' ,
26- }
27-
28- const levelColors: Record <DevToolsLogLevel , string > = {
29- info: ' text-blue' ,
30- warn: ' text-amber' ,
31- error: ' text-red' ,
32- success: ' text-green' ,
33- debug: ' text-gray' ,
34- }
35-
36- function formatTime(ts : number ): string {
37- return new Date (ts ).toLocaleTimeString ()
38- }
11+ const timeAgo = useTimeAgo (() => props .entry .timestamp )
3912 </script >
4013
4114<template >
4215 <div class =" flex items-start gap-2 relative" >
43- <div class =" w-2px flex-none absolute left-0 top-4px bottom-4px rounded-r" :class =" [levelIndicatorColors [entry.level] || 'bg-gray']" />
16+ <div class =" w-2px flex-none absolute left-0 top-4px bottom-4px rounded-r" :class =" [levels [entry.level]?.bg || 'bg-gray']" />
4417
4518 <div
4619 v-if =" entry.status === 'loading'"
4720 class =" flex-none mt-0.5 border-2 border-current border-t-transparent rounded-full animate-spin op50 w-4 h-4"
4821 />
49- <DockIcon
22+ <div
5023 v-else
51- :icon =" levelIcons[entry.level]"
5224 class =" flex-none mt-0.5 w-4 h-4"
53- :class =" [levelColors [entry.level]]"
25+ :class =" [levels [entry.level]?.icon, levels[entry.level]?.color ]"
5426 />
5527
5628 <div class =" flex-1 min-w-0" >
@@ -69,7 +41,7 @@ function formatTime(ts: number): string {
6941 >{{ label }}</span >
7042 </div >
7143 </div >
72- <span v-if =" !compact" class =" text-xs op40 flex-none" >{{ formatTime (entry.timestamp) }}</span >
44+ <span v-if =" !compact" class =" text-xs op40 flex-none" :title = " new Date (entry.timestamp).toLocaleString() " >{{ timeAgo }}</span >
7345 <slot name =" actions" />
7446 </div >
7547</template >
0 commit comments