11<script setup lang="ts">
2- import type { OsvSeverityLevel , PackageVulnerabilities } from ' #shared/types'
2+ import type { PackageVulnerabilities } from ' #shared/types'
3+ import { SEVERITY_COLORS , SEVERITY_BADGE_COLORS , getHighestSeverity } from ' #shared/utils/severity'
34
45const props = defineProps <{
56 packageName: string
@@ -38,39 +39,11 @@ const { data: vulnData, status } = useLazyAsyncData(
3839)
3940
4041const hasVulnerabilities = computed (() => vulnData .value .counts .total > 0 )
41-
42- // Severity color classes for the banner
43- const severityColors: Record <OsvSeverityLevel , string > = {
44- critical: ' text-red-400 bg-red-500/10 border-red-500/30' ,
45- high: ' text-orange-400 bg-orange-500/10 border-orange-500/30' ,
46- moderate: ' text-yellow-400 bg-yellow-500/10 border-yellow-500/30' ,
47- low: ' text-blue-400 bg-blue-500/10 border-blue-500/30' ,
48- unknown: ' text-fg-muted bg-bg-subtle border-border' ,
49- }
50-
51- // Severity badge styles - greyscale theme matching the design system
52- const severityBadgeColors: Record <OsvSeverityLevel , string > = {
53- critical: ' bg-bg-muted border border-border text-fg' ,
54- high: ' bg-bg-muted border border-border text-fg-muted' ,
55- moderate: ' bg-bg-muted border border-border text-fg-muted' ,
56- low: ' bg-bg-muted border border-border text-fg-subtle' ,
57- unknown: ' bg-bg-muted border border-border text-fg-subtle' ,
58- }
59-
60- // Expand/collapse state
6142const isExpanded = shallowRef (false )
43+ const highestSeverity = computed (() => getHighestSeverity (vulnData .value .counts ))
6244
63- // Get highest severity for banner color
64- const highestSeverity = computed <OsvSeverityLevel >(() => {
65- const counts = vulnData .value .counts
66- if (counts .critical > 0 ) return ' critical'
67- if (counts .high > 0 ) return ' high'
68- if (counts .moderate > 0 ) return ' moderate'
69- if (counts .low > 0 ) return ' low'
70- return ' unknown'
71- })
45+ const { $t } = useNuxtApp ()
7246
73- // Summary text for collapsed view
7447const summaryText = computed (() => {
7548 const counts = vulnData .value .counts
7649 const parts: string [] = []
@@ -90,7 +63,7 @@ const summaryText = computed(() => {
9063 <div
9164 role =" alert"
9265 class =" rounded-lg border overflow-hidden"
93- :class =" severityColors [highestSeverity]"
66+ :class =" SEVERITY_COLORS [highestSeverity]"
9467 >
9568 <!-- Header (always visible, clickable to expand) -->
9669 <button
@@ -147,7 +120,7 @@ const summaryText = computed(() => {
147120 </a >
148121 <span
149122 class =" px-2 py-0.5 text-xs font-mono rounded"
150- :class =" severityBadgeColors [vuln.severity]"
123+ :class =" SEVERITY_BADGE_COLORS [vuln.severity]"
151124 >
152125 {{ vuln.severity }}
153126 </span >
0 commit comments