-
Example
+
Example
-
Internetless Mode
-
+
Internetless Mode
+
Block all outbound requests (container icons, external fetches)
@@ -298,17 +298,17 @@ const emit = defineEmits<{
-
Cached Icons
-
+
Cached Icons
+
Common icons are bundled; other icons are cached to disk on first fetch
-
+
{{ props.cacheCleared }} cleared
All Levels
Debug
@@ -105,7 +105,7 @@ function asEntry(entry: unknown): AppLogEntry {
Tail 50
Tail 100
@@ -115,7 +115,7 @@ function asEntry(entry: unknown): AppLogEntry {
{{ opt.label }}
@@ -126,19 +126,19 @@ function asEntry(entry: unknown): AppLogEntry {
v-model="componentFilterModel"
type="text"
placeholder="Filter by component..."
- class="flex-1 min-w-[180px] max-w-[280px] px-2.5 py-1.5 dd-rounded text-[11px] font-medium border outline-none dd-bg dd-text dd-placeholder dd-border-strong"
+ class="flex-1 min-w-[180px] max-w-[280px] px-2.5 py-1.5 dd-rounded text-[0.6875rem] font-medium border outline-none dd-bg dd-text dd-placeholder dd-border-strong"
@keyup.enter="emit('refresh')"
/>
Apply
@@ -152,14 +152,14 @@ function asEntry(entry: unknown): AppLogEntry {
>
-
+
Server Level: {{ props.logLevel }}
-
+
Last fetched: {{ props.formatLastFetched(props.lastFetchedIso) }}
@@ -181,12 +181,12 @@ function asEntry(entry: unknown): AppLogEntry {
Auto-scroll paused
diff --git a/ui/src/components/config/ConfigProfileTab.vue b/ui/src/components/config/ConfigProfileTab.vue
index 52d82d02..a3889607 100644
--- a/ui/src/components/config/ConfigProfileTab.vue
+++ b/ui/src/components/config/ConfigProfileTab.vue
@@ -36,12 +36,12 @@ const props = defineProps<{
{{ props.profileDisplayName }}
-
+
{{ props.profileData.email || props.profileData.username || '—' }}
{{ props.profileData.role }}
@@ -49,41 +49,41 @@ const props = defineProps<{
-
+
{{ props.profileError }}
- Username
- {{ props.profileData.username || '—' }}
+ Username
+ {{ props.profileData.username || '—' }}
- Email
- {{ props.profileData.email || '—' }}
+ Email
+ {{ props.profileData.email || '—' }}
- Role
- {{ props.profileData.role || '—' }}
+ Role
+ {{ props.profileData.role || '—' }}
- Provider
- {{ props.profileData.provider || '—' }}
+ Provider
+ {{ props.profileData.provider || '—' }}
- Last Login
- {{ props.profileData.lastLogin || '—' }}
+ Last Login
+ {{ props.profileData.lastLogin || '—' }}
- Active Sessions
- {{ props.profileData.sessions }}
+ Active Sessions
+ {{ props.profileData.sessions }}
diff --git a/ui/src/components/containers/ContainerFullPageDetail.vue b/ui/src/components/containers/ContainerFullPageDetail.vue
index 3f572513..3a7d5924 100644
--- a/ui/src/components/containers/ContainerFullPageDetail.vue
+++ b/ui/src/components/containers/ContainerFullPageDetail.vue
@@ -34,7 +34,7 @@ const {
@@ -49,11 +49,11 @@ const {
{{ selectedContainer.name }}
-
+
{{ selectedContainer.image }}:{{ selectedContainer.currentTag }}
@@ -186,7 +186,7 @@ const {
{{ error }}
diff --git a/ui/src/components/containers/ContainerFullPageTabContent.vue b/ui/src/components/containers/ContainerFullPageTabContent.vue
index 2cc8e501..2c5d6d97 100644
--- a/ui/src/components/containers/ContainerFullPageTabContent.vue
+++ b/ui/src/components/containers/ContainerFullPageTabContent.vue
@@ -147,19 +147,19 @@ const {
-
Ports
-
{{ selectedContainer.details.ports.length }}
+
Ports
+
{{ selectedContainer.details.ports.length }}
-
No ports exposed
+
No ports exposed
@@ -169,19 +169,19 @@ const {
-
Volumes
-
{{ selectedContainer.details.volumes.length }}
+
Volumes
+
{{ selectedContainer.details.volumes.length }}
-
No volumes mounted
+
No volumes mounted
@@ -192,18 +192,18 @@ const {
-
Compose Files
-
{{ selectedComposePaths.length }}
+
Compose Files
+
{{ selectedComposePaths.length }}
- #{{ index + 1 }}
+ #{{ index + 1 }}
{{ composePath }}
@@ -216,31 +216,31 @@ const {
-
Current:
{{ selectedContainer.currentTag }}
-
Latest:
{{ selectedContainer.newTag }}
-
{{ selectedContainer.updateKind }}
-
@@ -251,37 +251,37 @@ const {
:href="selectedContainer.releaseLink"
target="_blank"
rel="noopener noreferrer"
- class="inline-flex items-center text-[12px] underline hover:no-underline"
+ class="inline-flex items-center text-xs underline hover:no-underline"
style="color: var(--dd-info);"
>
Release notes
-
Tag Filters
-
Tag Filters
+
Include:
{{ selectedContainer.includeTags || 'Not set' }}
-
Exclude:
{{ selectedContainer.excludeTags || 'Not set' }}
-
Transform:
{{ selectedContainer.transformTags || 'Not set' }}
-
Trigger Filters
-
Trigger Filters
+
Include:
{{ selectedContainer.triggerInclude || 'Not set' }}
-
Exclude:
{{ selectedContainer.triggerExclude || 'Not set' }}
@@ -296,19 +296,19 @@ const {
-
-
{{ registryLabel(selectedContainer.registry, selectedContainer.registryUrl, selectedContainer.registryName) }}
{{ selectedContainer.image }}
{{ selectedContainer.registryError }}
@@ -322,28 +322,28 @@ const {
-
Runtime Process
+
Runtime Process
-
Entrypoint
-
{{ runtimeOriginLabel(selectedRuntimeOrigins.entrypoint) }}
-
Cmd
-
{{ runtimeOriginLabel(selectedRuntimeOrigins.cmd) }}
{{ warning }}
@@ -358,30 +358,30 @@ const {
-
Lifecycle Hooks
+
Lifecycle Hooks
-
Pre-update
{{ selectedLifecycleHooks.preUpdate || 'Not configured' }}
-
Post-update
{{ selectedLifecycleHooks.postUpdate || 'Not configured' }}
-
Timeout
{{ selectedLifecycleHooks.timeoutLabel }}
{{ selectedLifecycleHooks.preAbortBehavior }}
-
Template Variables
@@ -401,20 +401,20 @@ const {
-
Auto-Rollback
+
Auto-Rollback
-
Status
{{ selectedAutoRollbackConfig.enabledLabel }}
-
Window
{{ selectedAutoRollbackConfig.windowLabel }}
-
Interval
{{ selectedAutoRollbackConfig.intervalLabel }}
@@ -428,8 +428,8 @@ const {
-
Security
-
Security
+
@@ -438,30 +438,30 @@ const {
Loading vulnerability data...
{{ detailVulnerabilityError }}
-
-
+
critical {{ vulnerabilitySummary.critical }}
-
high {{ vulnerabilitySummary.high }}
-
medium {{ vulnerabilitySummary.medium }}
-
low {{ vulnerabilitySummary.low }}
@@ -469,9 +469,9 @@ const {
- {{ getVulnerabilityPackage(vulnerability) }}
- No vulnerabilities reported for this container.
+ No vulnerabilities reported for this container.
+ class="px-2 py-1 dd-rounded text-[0.625rem] font-semibold uppercase tracking-wide border outline-none cursor-pointer dd-bg dd-text dd-border-strong">
spdx-json
cyclonedx-json
-
@@ -501,17 +501,17 @@ const {
{{ detailSbomError }}
Loading SBOM document...
format:
@@ -526,7 +526,7 @@ const {
{{ formatTimestamp(sbomGeneratedAt) }}
-
SBOM document is not available yet.
+
SBOM document is not available yet.
@@ -540,19 +540,19 @@ const {
style="border-bottom: 1px solid var(--dd-log-divider);">
-
+
Container Logs
- {{ selectedContainer.name }}
+ {{ selectedContainer.name }}
+ class="px-1.5 py-1 dd-rounded text-[0.625rem] font-semibold uppercase tracking-wide border outline-none cursor-pointer dd-bg dd-text dd-border-strong">
{{ opt.label }}
-
+
{{ getContainerLogs(selectedContainer.name).length }} lines
@@ -560,17 +560,17 @@ const {
{{ line.substring(0, 24) }}
{{ line.substring(24) }}
Auto-scroll paused
-
Resume
@@ -586,13 +586,13 @@ const {
-
Environment Variables
-
{{ selectedContainer.details.env.length }}
+
Environment Variables
+
{{ selectedContainer.details.env.length }}
{{ e.key }}
=
@@ -608,7 +608,7 @@ const {
-
No environment variables configured
+
No environment variables configured
-
Volumes
-
{{ selectedContainer.details.volumes.length }}
+
Volumes
+
{{ selectedContainer.details.volumes.length }}
-
No volumes mounted
+
No volumes mounted
@@ -640,13 +640,13 @@ const {
-
Labels
-
{{ selectedContainer.details.labels.length }}
+
Labels
+
{{ selectedContainer.details.labels.length }}
No labels assigned
+ No labels assigned
@@ -667,34 +667,34 @@ const {
-
Update Workflow
+
Update Workflow
-
Actions
+
Actions
-
{{ previewLoading ? 'Previewing...' : 'Preview Update' }}
Force Update
Update Now
-
@@ -704,21 +704,21 @@ const {
-
Skip & Snooze
+
Skip & Snooze
-
Skip This Update
-
Snooze 1d
-
@@ -727,15 +727,15 @@ const {
-
Snooze Until
-
@@ -745,15 +745,15 @@ const {
-
Reset
+
Reset
-
Clear Skips
-
@@ -761,7 +761,7 @@ const {
-
+
Snoozed until:
{{ formatTimestamp(selectedSnoozeUntil) }}
@@ -770,7 +770,7 @@ const {
Skipped tags:
{{ tag }}
{{ digest }}
-
{{ policyMessage }}
-
{{ policyError }}
+
{{ policyMessage }}
+
{{ policyError }}
@@ -811,9 +811,9 @@ const {
-
+
Generating preview...
{{ detailPreview.error }}
@@ -847,7 +847,7 @@ const {
Patch preview:
-
{{ detailComposePreview.patch }}
@@ -855,7 +855,7 @@ const {
Run a preview to inspect the planned update operations.
-
{{ previewError }}
+
{{ previewError }}
@@ -866,19 +866,19 @@ const {
-
Associated Triggers
+
Associated Triggers
-
Loading triggers...
+
Loading triggers...
-
{{ trigger.type }}.{{ trigger.name }}
-
agent: {{ trigger.agent }}
+
{{ trigger.type }}.{{ trigger.name }}
+
agent: {{ trigger.agent }}
-
@@ -886,9 +886,9 @@ const {
-
No triggers associated with this container
-
{{ triggerMessage }}
-
{{ triggerError }}
+
No triggers associated with this container
+
{{ triggerMessage }}
+
{{ triggerError }}
@@ -897,27 +897,27 @@ const {
-
Backups & Rollback
+
Backups & Rollback
-
{{ rollbackInProgress === 'latest' ? 'Rolling back...' : 'Rollback Latest' }}
-
Loading backups...
+
Loading backups...
-
{{ backup.imageName }}:{{ backup.imageTag }}
-
{{ formatTimestamp(backup.timestamp) }}
+
{{ backup.imageName }}:{{ backup.imageTag }}
+
{{ formatTimestamp(backup.timestamp) }}
-
@@ -925,9 +925,9 @@ const {
-
No backups available yet
-
{{ rollbackMessage }}
-
{{ rollbackError }}
+
No backups available yet
+
{{ rollbackMessage }}
+
{{ rollbackError }}
@@ -936,45 +936,45 @@ const {
-
Update Operation History
+
Update Operation History
-
Loading operation history...
+
Loading operation history...
-
{{ operation.id }}
-
{{ operation.id }}
+
{{ formatOperationStatus(operation.status) }}
-
Phase:
+
Phase:
{{ formatOperationPhase(operation.phase) }}
-
+
Version:
{{ operation.fromVersion || '?' }}
→
{{ operation.toVersion || '?' }}
-
+
Rollback reason:
{{ formatRollbackReason(operation.rollbackReason) }}
-
+
Last error:
{{ operation.lastError }}
-
+
{{ formatTimestamp(operation.updatedAt || operation.createdAt) }}
-
No update operations recorded yet
-
{{ updateOperationsError }}
+
No update operations recorded yet
+
{{ updateOperationsError }}
diff --git a/ui/src/components/containers/ContainerSideDetail.vue b/ui/src/components/containers/ContainerSideDetail.vue
index 4226393c..76dd0631 100644
--- a/ui/src/components/containers/ContainerSideDetail.vue
+++ b/ui/src/components/containers/ContainerSideDetail.vue
@@ -111,11 +111,11 @@ const {
-
+
{{ selectedContainer.image }}:{{ selectedContainer.currentTag }}
{{ selectedContainer.server }}
@@ -138,7 +138,7 @@ const {
-
Ports
+
Ports
{{ port }}
@@ -158,10 +158,10 @@ const {
-
Volumes
+
Volumes
{{ vol }}
@@ -171,17 +171,17 @@ const {
-
Compose Files
+
Compose Files
-
#{{ index + 1 }}
+
#{{ index + 1 }}
{{ composePath }}
@@ -189,8 +189,8 @@ const {
-
Version
-
Version
+
Current:
{{ selectedContainer.currentTag }}
@@ -201,7 +201,7 @@ const {
@@ -212,7 +212,7 @@ const {
:href="selectedContainer.releaseLink"
target="_blank"
rel="noopener noreferrer"
- class="mt-2 inline-flex items-center text-[11px] underline hover:no-underline"
+ class="mt-2 inline-flex items-center text-[0.6875rem] underline hover:no-underline"
style="color: var(--dd-info);"
>
Release notes
@@ -221,19 +221,19 @@ const {
-
Tag Filters
+
Tag Filters
-
Include:
{{ selectedContainer.includeTags || 'Not set' }}
-
Exclude:
{{ selectedContainer.excludeTags || 'Not set' }}
-
Transform:
{{ selectedContainer.transformTags || 'Not set' }}
@@ -243,14 +243,14 @@ const {
-
Trigger Filters
+
Trigger Filters
-
Include:
{{ selectedContainer.triggerInclude || 'Not set' }}
-
Exclude:
{{ selectedContainer.triggerExclude || 'Not set' }}
@@ -260,17 +260,17 @@ const {
-
Registry
-
Registry
+
-
{{ registryLabel(selectedContainer.registry, selectedContainer.registryUrl, selectedContainer.registryName) }}
{{ selectedContainer.image }}
{{ selectedContainer.registryError }}
@@ -279,20 +279,20 @@ const {
-
Runtime Process
+
Runtime Process
-
Entrypoint
-
{{ runtimeOriginLabel(selectedRuntimeOrigins.entrypoint) }}
-
Cmd
-
{{ runtimeOriginLabel(selectedRuntimeOrigins.cmd) }}
@@ -300,7 +300,7 @@ const {
{{ warning }}
@@ -310,30 +310,30 @@ const {
-
Lifecycle Hooks
+
Lifecycle Hooks
-
Pre-update
{{ selectedLifecycleHooks.preUpdate || 'Not configured' }}
-
Post-update
{{ selectedLifecycleHooks.postUpdate || 'Not configured' }}
-
Timeout
{{ selectedLifecycleHooks.timeoutLabel }}
{{ selectedLifecycleHooks.preAbortBehavior }}
-
Template Variables
@@ -348,19 +348,19 @@ const {
-
Auto-Rollback
+
Auto-Rollback
-
Status
{{ selectedAutoRollbackConfig.enabledLabel }}
-
Window
{{ selectedAutoRollbackConfig.windowLabel }}
-
Interval
{{ selectedAutoRollbackConfig.intervalLabel }}
@@ -370,26 +370,26 @@ const {
-
Image Metadata
+
Image Metadata
-
Architecture
{{ selectedImageMetadata.architecture || 'Unknown' }}
-
OS
{{ selectedImageMetadata.os || 'Unknown' }}
-
Digest
{{ selectedImageMetadata.digest || 'Unknown' }}
-
Created
@@ -402,8 +402,8 @@ const {
+
@@ -412,41 +412,41 @@ const {
Loading vulnerability data...
{{ detailVulnerabilityError }}
-
-
+
critical {{ vulnerabilitySummary.critical }}
-
high {{ vulnerabilitySummary.high }}
-
medium {{ vulnerabilitySummary.medium }}
-
low {{ vulnerabilitySummary.low }}
- {{ vulnerabilityTotal }} total
+ {{ vulnerabilityTotal }} total
- {{ getVulnerabilityPackage(vulnerability) }}
-
No vulnerabilities reported for this container.
@@ -466,11 +466,11 @@ const {
+ class="px-2 py-1 dd-rounded text-[0.625rem] font-semibold uppercase tracking-wide border outline-none cursor-pointer dd-bg dd-text dd-border-strong">
spdx-json
cyclonedx-json
-
@@ -478,17 +478,17 @@ const {
{{ detailSbomError }}
Loading SBOM document...
format:
@@ -504,7 +504,7 @@ const {
SBOM document is not available yet.
@@ -518,17 +518,17 @@ const {
:style="{ backgroundColor: 'var(--dd-bg-code)' }">
-
+
Container Logs
+ class="px-1.5 py-1 dd-rounded text-[0.5625rem] font-semibold uppercase tracking-wide border outline-none cursor-pointer dd-bg dd-text dd-border-strong">
{{ opt.label }}
-
+
{{ getContainerLogs(selectedContainer.name).length }} lines
@@ -536,17 +536,17 @@ const {
{{ line.substring(0, 24) }}
{{ line.substring(24) }}
Auto-scroll paused
-
Resume
@@ -558,10 +558,10 @@ const {
-
Environment Variables
+
Environment Variables
{{ e.key }}
=
@@ -577,29 +577,29 @@ const {
-
No environment variables configured
-
{{ envRevealError }}
+
No environment variables configured
+
{{ envRevealError }}
-
Volumes
+
Volumes
-
No volumes mounted
+
No volumes mounted
-
Labels
+
Labels
No labels assigned
+ No labels assigned
-
Update Workflow
+
Update Workflow
-
Actions
+
Actions
-
{{ previewLoading ? 'Previewing...' : 'Preview Update' }}
Force Update
Update Now
-
@@ -648,21 +648,21 @@ const {
-
Skip & Snooze
+
Skip & Snooze
-
Skip This Update
-
Snooze 1d
-
@@ -671,15 +671,15 @@ const {
-
Snooze Until
-
@@ -689,15 +689,15 @@ const {
-
Reset
+
Reset
-
Clear Skips
-
@@ -705,7 +705,7 @@ const {
-
+
Snoozed until:
{{ formatTimestamp(selectedSnoozeUntil) }}
@@ -714,7 +714,7 @@ const {
Skipped tags:
{{ tag }}
{{ digest }}
-
{{ policyMessage }}
-
{{ policyError }}
+
{{ policyMessage }}
+
{{ policyError }}
-
Preview
+
Preview
-
Generating preview...
-
{{ detailPreview.error }}
@@ -789,31 +789,31 @@ const {
Patch preview:
-
{{ detailComposePreview.patch }}
-
Run a preview to see what update actions will be executed.
-
{{ previewError }}
+
{{ previewError }}
-
Associated Triggers
-
Loading triggers...
+
Associated Triggers
+
Loading triggers...
{{ trigger.type }}.{{ trigger.name }}
-
agent: {{ trigger.agent }}
+
agent: {{ trigger.agent }}
-
@@ -821,31 +821,31 @@ const {
-
No triggers associated with this container
-
{{ triggerMessage }}
-
{{ triggerError }}
+
No triggers associated with this container
+
{{ triggerMessage }}
+
{{ triggerError }}
-
Backups & Rollback
+
Backups & Rollback
-
{{ rollbackInProgress === 'latest' ? 'Rolling back...' : 'Rollback Latest' }}
-
Loading backups...
+
Loading backups...
{{ backup.imageName }}:{{ backup.imageTag }}
-
{{ formatTimestamp(backup.timestamp) }}
+
{{ formatTimestamp(backup.timestamp) }}
-
@@ -853,21 +853,21 @@ const {
-
No backups available yet
-
{{ rollbackMessage }}
-
{{ rollbackError }}
+
No backups available yet
+
{{ rollbackMessage }}
+
{{ rollbackError }}
-
Update Operation History
-
Loading operation history...
+
Update Operation History
+
Loading operation history...
-
{{ operation.id }}
-
{{ operation.id }}
+
{{ formatOperationStatus(operation.status) }}
@@ -889,13 +889,13 @@ const {
Last error:
{{ operation.lastError }}
-
+
{{ formatTimestamp(operation.updatedAt || operation.createdAt) }}
-
No update operations recorded yet
-
{{ updateOperationsError }}
+
No update operations recorded yet
+
{{ updateOperationsError }}
diff --git a/ui/src/components/containers/ContainersGroupedViews.vue b/ui/src/components/containers/ContainersGroupedViews.vue
index a3fbde62..0d2fa7cf 100644
--- a/ui/src/components/containers/ContainersGroupedViews.vue
+++ b/ui/src/components/containers/ContainersGroupedViews.vue
@@ -68,15 +68,15 @@ const {
@click="toggleGroupCollapse(group.key)">
-
{{ group.name ?? 'Ungrouped' }}
-
{{ group.containerCount }}
-
{{ group.name ?? 'Ungrouped' }}
+
{{ group.containerCount }}
+
{{ group.updatesAvailable }} update{{ group.updatesAvailable === 1 ? '' : 's' }}
{{ c.name }}
-
{{ c.image }}
+
{{ c.image }}
-
+
{{ c.currentTag }}
{{ c.newTag }}
@@ -138,42 +138,42 @@ const {
{{ c.noUpdateReason }}
-
-
-
-
-
-
@@ -192,12 +192,12 @@ const {
-
{{ c.currentTag }}
+
{{ c.currentTag }}
-
{{ c.newTag }}
+
{{ c.newTag }}
-
{{ c.currentTag }}
+
{{ c.currentTag }}
@@ -228,17 +228,17 @@ const {
-
{{ c.updateKind }}
- —
+ —
-
-
{{ c.server }}
@@ -266,7 +266,7 @@ const {
-
{{ registryLabel(c.registry, c.registryUrl, c.registryName) }}
@@ -283,7 +283,7 @@ const {
-
Actions disabled
+
Actions disabled
-
Blocked
@@ -355,7 +355,7 @@ const {
-
-
Stop
-
Start
-
Restart
-
Scan
@@ -432,7 +432,7 @@ const {
-
Force update
@@ -441,19 +441,19 @@ const {
Force update
-
Skip this update
-
@@ -476,16 +476,16 @@ const {
-
+
{{ c.name }}
-
+
{{ c.image }}:{{ c.currentTag }} · {{ parseServer(c.server).name }} ({{ parseServer(c.server).env }})
-
{{ registryLabel(c.registry, c.registryUrl, c.registryName) }}
@@ -516,13 +516,13 @@ const {
-
Current
-
+ Current
+
{{ c.currentTag }}
- Latest
- Latest
+
{{ c.newTag }}
@@ -531,7 +531,7 @@ const {
@@ -565,11 +565,11 @@ const {
borderTop: '1px solid var(--dd-border-strong)',
backgroundColor: 'var(--dd-bg-elevated)',
}">
-
-
{{ c.status }}
@@ -610,7 +610,7 @@ const {
- Actions disabled
+ Actions disabled
{{ c.name }}
-
{{ c.image }}:{{ c.currentTag }}
+
{{ c.image }}:{{ c.currentTag }}
@@ -648,18 +648,18 @@ const {
-
-
{{ c.updateKind }}
-
-
-
{{ parseServer(c.server).name }}
diff --git a/ui/src/components/containers/ContainersListContent.vue b/ui/src/components/containers/ContainersListContent.vue
index f9cbe47d..b6cb249c 100644
--- a/ui/src/components/containers/ContainersListContent.vue
+++ b/ui/src/components/containers/ContainersListContent.vue
@@ -35,12 +35,12 @@ const {
{{ error }}
-
Loading containers...
+
Loading containers...
+ class="flex-1 min-w-[140px] max-w-[260px] px-2.5 py-1.5 dd-rounded text-[0.6875rem] font-medium border outline-none dd-bg dd-text dd-border-strong dd-placeholder" />
+ class="px-2 py-1.5 dd-rounded text-[0.6875rem] font-semibold uppercase tracking-wide border outline-none cursor-pointer dd-bg dd-text dd-border-strong">
Status
Running
Stopped
+ class="px-2 py-1.5 dd-rounded text-[0.6875rem] font-semibold uppercase tracking-wide border outline-none cursor-pointer dd-bg dd-text dd-border-strong">
Bouncer
Safe
Unsafe
@@ -71,7 +71,7 @@ const {
+ class="px-2 py-1.5 dd-rounded text-[0.6875rem] font-semibold uppercase tracking-wide border outline-none cursor-pointer dd-bg dd-text dd-border-strong">
Registry
Docker Hub
GHCR
@@ -79,7 +79,7 @@ const {
+ class="px-2 py-1.5 dd-rounded text-[0.6875rem] font-semibold uppercase tracking-wide border outline-none cursor-pointer dd-bg dd-text dd-border-strong">
Host
{{ serverName }}
@@ -87,7 +87,7 @@ const {
+ class="px-2 py-1.5 dd-rounded text-[0.6875rem] font-semibold uppercase tracking-wide border outline-none cursor-pointer dd-bg dd-text dd-border-strong">
Update
Has Update
Major
@@ -97,7 +97,7 @@ const {
Clear all
@@ -105,7 +105,7 @@ const {
- Columns
+ Columns
{
+ class="px-2 mb-1 text-[0.625rem] font-semibold uppercase tracking-wider dd-text-muted">
{{ group.label }}
@@ -1154,9 +1154,9 @@ onUnmounted(() => {
]"
style="padding: 6px 12px;">
-
+
-
@@ -1235,7 +1235,7 @@ onUnmounted(() => {
-
+
@@ -1267,17 +1267,17 @@ onUnmounted(() => {
-
{{ currentUser?.username || 'User' }}
-
Profile
-
@@ -1347,24 +1347,24 @@ onUnmounted(() => {
:style="isDark ? { filter: 'invert(1)' } : {}" />
Drydock
- Docker Container Update Manager
- v1.4.0
+ Docker Container Update Manager
+ v1.4.0
{{ scopeOption.label }}
- {{ searchScopeCounts[scopeOption.id] }}
+ {{ searchScopeCounts[scopeOption.id] }}
-
+
{{ searchResults.length }} shown
-
{{ group.label }}
@@ -1441,8 +1441,8 @@ onUnmounted(() => {
-
{{ result.title }}
-
{{ result.subtitle }}
+
{{ result.title }}
+
{{ result.subtitle }}
@@ -1454,7 +1454,7 @@ onUnmounted(() => {
Type to search pages, containers, agents, triggers, watchers, and settings.
-
Prefix scope active; use
@@ -1489,12 +1489,12 @@ onUnmounted(() => {
{{ connectionOverlayTitle }}
-
+
{{ connectionOverlayMessage }}
-
{{ connectionOverlayStatus }}
+
{{ connectionOverlayStatus }}
diff --git a/ui/src/style.css b/ui/src/style.css
index 2b153980..e3b8ed50 100644
--- a/ui/src/style.css
+++ b/ui/src/style.css
@@ -364,7 +364,7 @@ body {
left: 64px;
padding: 4px 10px;
border-radius: var(--dd-radius-sm);
- font-size: 12px;
+ font-size: 0.75rem;
white-space: nowrap;
pointer-events: none;
opacity: 0;
@@ -381,7 +381,7 @@ body {
align-items: center;
padding: 3px 10px;
border-radius: var(--dd-radius-sm);
- font-size: 11px;
+ font-size: 0.6875rem;
font-weight: 600;
letter-spacing: 0.02em;
}
diff --git a/ui/src/views/AgentsView.vue b/ui/src/views/AgentsView.vue
index 88481b8e..651a573d 100644
--- a/ui/src/views/AgentsView.vue
+++ b/ui/src/views/AgentsView.vue
@@ -448,12 +448,12 @@ function getConfigFields(agent: Agent): AgentDetailField[] {
{{ error }}
- Loading agents...
+ Loading agents...
+ class="flex-1 min-w-[120px] max-w-[240px] px-2.5 py-1.5 dd-rounded text-[0.6875rem] font-medium border outline-none dd-bg dd-text dd-border-strong dd-placeholder" />
Clear
-
- Columns
+ Columns
{{ row.name }}
-
{{ row.host }}
+
{{ row.host }}
-
{{ row.status }}
-
+
{{ row.containers.running }}/{{ row.containers.total }}
- {{ row.lastSeen }}
+ {{ row.lastSeen }}
-
-
-
+
v{{ row.version }}
@@ -589,11 +589,11 @@ function getConfigFields(agent: Agent): AgentDetailField[] {
-
{{ agent.name }}
-
{{ agent.host }}
+
{{ agent.name }}
+
{{ agent.host }}
-
-
+
Docker
{{ agent.dockerVersion ?? '—' }}
@@ -628,7 +628,7 @@ function getConfigFields(agent: Agent): AgentDetailField[] {
borderTop: '1px solid var(--dd-border-strong)',
backgroundColor: 'var(--dd-bg-elevated)',
}">
-
+
{{ agent.containers.running }}
running
@@ -638,7 +638,7 @@ function getConfigFields(agent: Agent): AgentDetailField[] {
stopped
-
{{ agent.lastSeen }}
+
{{ agent.lastSeen }}
@@ -653,47 +653,47 @@ function getConfigFields(agent: Agent): AgentDetailField[] {
:style="{ backgroundColor: agent.status === 'connected' ? 'var(--dd-success)' : 'var(--dd-danger)' }" />
{{ agent.name }}
-
{{ agent.host }}
+
{{ agent.host }}
-
{{ agent.status }}
-
+
{{ agent.containers.running }}/{{ agent.containers.total }}
- {{ agent.lastSeen }}
+ {{ agent.lastSeen }}
-
Docker
-
{{ agent.dockerVersion ?? '—' }}
+
Docker
+
{{ agent.dockerVersion ?? '—' }}
-
OS
-
{{ agent.os ?? '—' }}
+
OS
+
{{ agent.os ?? '—' }}
-
Architecture
-
{{ agent.arch ?? '—' }}
+
Architecture
+
{{ agent.arch ?? '—' }}
-
Version
-
{{ agent.version ? `v${agent.version}` : '—' }}
+
Version
+
{{ agent.version ? `v${agent.version}` : '—' }}
-
Uptime
-
{{ agent.uptime ?? '—' }}
+
Uptime
+
{{ agent.uptime ?? '—' }}
-
Containers
-
+
Containers
+
{{ agent.containers.running }}
running /
{{ agent.containers.total }}
@@ -703,7 +703,7 @@ function getConfigFields(agent: Agent): AgentDetailField[] {
-
@@ -734,7 +734,7 @@ function getConfigFields(agent: Agent): AgentDetailField[] {
{{ selectedAgent?.name }}
- {{ selectedAgent?.host }}
+ {{ selectedAgent?.host }}
{{ error }}
- Loading audit log...
+ Loading audit log...
+ class="flex-1 min-w-[120px] max-w-[240px] px-2.5 py-1.5 dd-rounded text-[0.6875rem] font-medium border outline-none dd-bg dd-text dd-border-strong dd-placeholder" />
+ class="min-w-[140px] max-w-[220px] px-2.5 py-1.5 dd-rounded text-[0.6875rem] font-medium border outline-none dd-bg dd-text dd-border-strong dd-placeholder" />
+ class="px-2.5 py-1.5 dd-rounded text-[0.6875rem] font-medium border outline-none dd-bg dd-text dd-border-strong">
All events
{{ actionLabel(a) }}
@@ -246,14 +246,14 @@ onMounted(fetchAudit);
name="from-date"
type="date"
aria-label="From date"
- class="px-2.5 py-1.5 dd-rounded text-[11px] font-medium border outline-none dd-bg dd-text dd-border-strong" />
+ class="px-2.5 py-1.5 dd-rounded text-[0.6875rem] font-medium border outline-none dd-bg dd-text dd-border-strong" />
+ class="px-2.5 py-1.5 dd-rounded text-[0.6875rem] font-medium border outline-none dd-bg dd-text dd-border-strong" />
Clear
@@ -270,30 +270,30 @@ onMounted(fetchAudit);
@row-click="openDetail($event)"
>
- {{ formatTimestamp(row.timestamp) }}
+ {{ formatTimestamp(row.timestamp) }}
-
{{ actionLabel(row.action) }}
+
{{ actionLabel(row.action) }}
- {{ row.containerName }}
+ {{ row.containerName }}
-
{{ row.status }}
-
+
{{ row.fromVersion }}{{ row.fromVersion && row.toVersion ? ' → ' : '' }}{{ row.toVersion }}
- {{ row.details }}
+ {{ row.details }}
—
@@ -311,17 +311,17 @@ onMounted(fetchAudit);
-
{{ actionLabel(entry.action) }}
-
{{ entry.containerName }}
+
{{ actionLabel(entry.action) }}
+
{{ entry.containerName }}
-
{{ entry.status }}
-
+
Time
{{ formatTimestamp(entry.timestamp) }}
@@ -334,7 +334,7 @@ onMounted(fetchAudit);
- {{ formatTimestamp(entry.timestamp) }}
+ {{ formatTimestamp(entry.timestamp) }}
@@ -351,10 +351,10 @@ onMounted(fetchAudit);
{{ actionLabel(entry.action) }}
-
{{ entry.containerName }}
+
{{ entry.containerName }}
-
{{ formatTimestamp(entry.timestamp) }}
-
{{ formatTimestamp(entry.timestamp) }}
+
{{ entry.status }}
@@ -362,28 +362,28 @@ onMounted(fetchAudit);
-
Timestamp
-
{{ formatTimestamp(entry.timestamp) }}
+
Timestamp
+
{{ formatTimestamp(entry.timestamp) }}
-
{{ targetLabel(entry.action) }}
-
{{ entry.containerName }}
+
{{ targetLabel(entry.action) }}
+
{{ entry.containerName }}
-
Image
-
{{ entry.containerImage }}
+
Image
+
{{ entry.containerImage }}
-
From Version
-
{{ entry.fromVersion }}
+
From Version
+
{{ entry.fromVersion }}
-
To Version
-
{{ entry.toVersion }}
+
To Version
+
{{ entry.toVersion }}
-
Details
-
{{ entry.details }}
+
Details
+
{{ entry.details }}
@@ -392,16 +392,16 @@ onMounted(fetchAudit);
-
+
Page {{ page }} of {{ totalPages }} ({{ total }} entries)
-
-
@@ -430,7 +430,7 @@ onMounted(fetchAudit);
{{ selectedEntry ? actionLabel(selectedEntry.action) : '' }}
-
{{ selectedEntry.status }}
@@ -438,42 +438,42 @@ onMounted(fetchAudit);
- {{ selectedEntry?.containerName }}
+ {{ selectedEntry?.containerName }}
-
Timestamp
-
{{ formatTimestamp(selectedEntry.timestamp) }}
+
Timestamp
+
{{ formatTimestamp(selectedEntry.timestamp) }}
-
Event
-
{{ actionLabel(selectedEntry.action) }}
+
Event
+
{{ actionLabel(selectedEntry.action) }}
-
{{ targetLabel(selectedEntry.action) }}
-
{{ selectedEntry.containerName }}
+
{{ targetLabel(selectedEntry.action) }}
+
{{ selectedEntry.containerName }}
-
Image
-
{{ selectedEntry.containerImage }}
+
Image
+
{{ selectedEntry.containerImage }}
-
From Version
-
{{ selectedEntry.fromVersion }}
+
From Version
+
{{ selectedEntry.fromVersion }}
-
To Version
-
{{ selectedEntry.toVersion }}
+
To Version
+
{{ selectedEntry.toVersion }}
-
Trigger
-
{{ selectedEntry.triggerName }}
+
Trigger
+
{{ selectedEntry.triggerName }}
-
Details
-
{{ selectedEntry.details }}
+
Details
+
{{ selectedEntry.details }}
diff --git a/ui/src/views/AuthView.vue b/ui/src/views/AuthView.vue
index 89f86ac4..bf3ee1c6 100644
--- a/ui/src/views/AuthView.vue
+++ b/ui/src/views/AuthView.vue
@@ -122,12 +122,12 @@ onMounted(async () => {
{{ error }}
-
+
Loading authentication providers...
@@ -142,9 +142,9 @@ onMounted(async () => {
+ class="flex-1 min-w-[120px] max-w-[240px] px-2.5 py-1.5 dd-rounded text-[0.6875rem] font-medium border outline-none dd-bg dd-text dd-border-strong dd-placeholder" />
Clear
@@ -163,7 +163,7 @@ onMounted(async () => {
{{ row.name }}
-
{{ authTypeBadge(row.type).label }}
@@ -171,7 +171,7 @@ onMounted(async () => {
-
-
{{ auth.name }}
+
{{ auth.name }}
-
{{ authTypeBadge(auth.type).label }}
-
+
{{ key }}
-
{{ val }}
+
{{ val }}
@@ -213,7 +213,7 @@ onMounted(async () => {
:style="{ borderTop: '1px solid var(--dd-border-strong)', backgroundColor: 'var(--dd-bg-elevated)' }">
-
{{ auth.name }}
-
{{ authTypeBadge(auth.type).label }}
@@ -242,12 +242,12 @@ onMounted(async () => {
-
{{ key }}
-
{{ val }}
+
{{ key }}
+
{{ val }}
+
{{ selectedAuth?.name }}
-
{{ authTypeBadge(selectedAuth.type).label }}
@@ -284,7 +284,7 @@ onMounted(async () => {
-
-
+
Refreshing authentication details...
{{ detailError }}
-
{{ key }}
-
{{ val }}
+
{{ key }}
+
{{ val }}
-
No configuration properties
+
No configuration properties
diff --git a/ui/src/views/ConfigView.vue b/ui/src/views/ConfigView.vue
index c674f9c4..77e334a9 100644
--- a/ui/src/views/ConfigView.vue
+++ b/ui/src/views/ConfigView.vue
@@ -363,7 +363,7 @@ function handleSelectIconLibrary(library: string) {
diff --git a/ui/src/views/DashboardView.vue b/ui/src/views/DashboardView.vue
index 6ef26cae..ebf3dc7f 100644
--- a/ui/src/views/DashboardView.vue
+++ b/ui/src/views/DashboardView.vue
@@ -79,7 +79,7 @@ const {
Failed to load dashboard
{{ error }}
Retry
@@ -116,7 +116,7 @@ const {
@drop="onWidgetDrop(stat.id, $event)"
@dragend="onWidgetDragEnd">
-
+
{{ stat.label }}
{{ stat.value }}
-
+
{{ stat.detail }}
@@ -161,7 +161,7 @@ const {
Updates Available
- View all →
@@ -176,9 +176,9 @@ const {
- Container
- Version
-
+ Container
+ Version
+
Type
@@ -205,8 +205,8 @@ const {
{{ row.name }}
- {{ row.image }}
-
+
{{ row.image }}
+
{{ row.registryError }}
Release notes
@@ -223,28 +223,28 @@ const {
-
+
{{ row.oldVer }}
-
{{ row.newVer }}
-
+
{{ row.oldVer }}
-
{{ row.newVer }}
-
-
+
No updates available
@@ -298,7 +298,7 @@ const {
Security Overview
- View all →
@@ -323,7 +323,7 @@ const {
{{ securityTotalCount }}
- images
+ images
@@ -332,15 +332,15 @@ const {
-
{{ securityCleanCount }} Clean
+
{{ securityCleanCount }} Clean
-
{{ securityIssueCount }} Issues
+
{{ securityIssueCount }} Issues
-
+
{{ securityNotScannedCount }} Not Scanned
@@ -349,31 +349,31 @@ const {
-
+
Severity Breakdown
-
+
{{ securitySeverityTotals.critical }} Critical
-
+
{{ securitySeverityTotals.high }} High
-
+
{{ securitySeverityTotals.medium }} Medium
-
+
{{ securitySeverityTotals.low }} Low
@@ -383,7 +383,7 @@ const {
-
+
Top Vulnerabilities
@@ -391,7 +391,7 @@ const {
class="flex items-start gap-3 p-2.5 dd-rounded"
:style="{ backgroundColor: 'var(--dd-bg-inset)' }">
-
-
-
+
{{ vuln.id }}
-
+
{{ vuln.package }} · {{ vuln.image }}
No vulnerabilities reported
@@ -453,7 +453,7 @@ const {
Host Status
-
View all →
@@ -462,7 +462,7 @@ const {
class="flex items-center gap-3 p-3 dd-rounded cursor-pointer transition-colors hover:dd-bg-elevated"
:style="{ backgroundColor: 'var(--dd-bg-inset)' }"
@click="navigateTo(ROUTES.SERVERS)">
-
-
{{ server.name }}
-
+
{{ server.name }}
+
{{ server.host }}
-
{{ server.containers.running }}/{{ server.containers.total }} containers
+
{{ server.containers.running }}/{{ server.containers.total }} containers
-
-
View all →
No updates to categorize
@@ -538,7 +538,7 @@ const {
{{ kind.count }}
-
{{ kind.label }}
+
{{ kind.label }}
diff --git a/ui/src/views/NotificationsView.vue b/ui/src/views/NotificationsView.vue
index 046a8e44..7d0ad4f8 100644
--- a/ui/src/views/NotificationsView.vue
+++ b/ui/src/views/NotificationsView.vue
@@ -283,13 +283,13 @@ onMounted(async () => {
{{ error }}
{{ saveError }}
@@ -304,16 +304,16 @@ onMounted(async () => {
+ class="flex-1 min-w-[120px] max-w-[320px] px-2.5 py-1.5 dd-rounded text-[0.6875rem] font-medium border outline-none dd-bg dd-text dd-border-strong dd-placeholder" />
Clear
-
Loading notification rules...
+
Loading notification rules...
{
{{ row.name }}
- {{ row.description }}
+ {{ row.description }}
{{ triggerNameById(triggerId) }}
- None
+ None
@@ -366,8 +366,8 @@ onMounted(async () => {
-
{{ notif.name }}
-
{{ notif.description }}
+
{{ notif.name }}
+
{{ notif.description }}
{
{{ triggerNameById(triggerId) }}
-
+
No triggers
@@ -416,15 +416,15 @@ onMounted(async () => {
{{ notif.name }}
{{ triggerNameById(triggerId) }}
- No triggers
+ No triggers
- {{ notif.description }}
+ {{ notif.description }}
@@ -451,22 +451,22 @@ onMounted(async () => {
{{ selectedRule.enabled ? 'enabled' : 'disabled' }}
- {{ selectedRule.id }}
+ {{ selectedRule.id }}
-
{{ selectedRule.description }}
+
{{ selectedRule.description }}
-
Rule status
+
Rule status
{
off-color="var(--dd-border-strong)"
@update:model-value="detailEnabled = $event"
/>
-
+
{{ detailEnabled ? 'Enabled: notifications can fire for this event.' : 'Disabled: notifications are suppressed for this event.' }}
-
+
Assigned Triggers
-
+
No triggers configured. Add triggers on the Triggers page .
@@ -497,10 +497,10 @@ onMounted(async () => {
:disabled="detailSaving"
@change="toggleDetailTrigger(trigger.id)" />
-
{{ trigger.name }}
-
{{ trigger.id }}
+
{{ trigger.name }}
+
{{ trigger.id }}
-
{{ triggerTypeBadge(trigger.type).label }}
@@ -509,14 +509,14 @@ onMounted(async () => {
-
{{ detailSaving ? 'Saving...' : 'Save changes' }}
-
Reset
diff --git a/ui/src/views/RegistriesView.vue b/ui/src/views/RegistriesView.vue
index 7c72fccb..8f54279e 100644
--- a/ui/src/views/RegistriesView.vue
+++ b/ui/src/views/RegistriesView.vue
@@ -157,12 +157,12 @@ onMounted(async () => {
{{ error }}
- Loading registries...
+ Loading registries...
{
+ class="flex-1 min-w-[120px] max-w-[240px] px-2.5 py-1.5 dd-rounded text-[0.6875rem] font-medium border outline-none dd-bg dd-text dd-border-strong dd-placeholder" />
Clear
@@ -195,21 +195,21 @@ onMounted(async () => {
{{ registryTypeBadge(row.type).label }}
-
Private
-
Public
-
-
+
+
-
-
+
{{ resolveUrl(row) }}
@@ -239,16 +239,16 @@ onMounted(async () => {
-
{{ reg.name }}
-
{{ resolveUrl(reg) }}
+
{{ reg.name }}
+
{{ resolveUrl(reg) }}
-
{{ registryTypeBadge(reg.type).label }}
-
+
Auth
@@ -265,7 +265,7 @@ onMounted(async () => {
- {{ resolveUrl(reg) }}
+ {{ resolveUrl(reg) }}
@@ -277,23 +277,23 @@ onMounted(async () => {
:selected-key="selectedRegistry?.id"
@item-click="openDetail($event)">
-
{{ registryTypeBadge(reg.type).label }}
{{ reg.name }}
-
{{ resolveUrl(reg) }}
+
{{ resolveUrl(reg) }}
-
+
{{ isPrivate(reg) ? 'Private' : 'Public' }}
-
-
+
+
-
-
{{ selectedRegistry ? registryTypeBadge(selectedRegistry.type).label : '' }}
@@ -330,22 +330,22 @@ onMounted(async () => {
- {{ selectedRegistry ? resolveUrl(selectedRegistry) : '' }}
+ {{ selectedRegistry ? resolveUrl(selectedRegistry) : '' }}
-
Refreshing registry details...
+
Refreshing registry details...
{{ detailError }}
+
Authentication
-
+
Authentication
+
{{ isPrivate(selectedRegistry) ? 'Private' : 'Public' }}
@@ -366,14 +366,14 @@ onMounted(async () => {
-
URL
-
{{ resolveUrl(selectedRegistry) }}
+
URL
+
{{ resolveUrl(selectedRegistry) }}
-
{{ key }}
-
{{ val }}
+
{{ key }}
+
{{ val }}
diff --git a/ui/src/views/SecurityView.vue b/ui/src/views/SecurityView.vue
index 99b9b0fb..f010ba29 100644
--- a/ui/src/views/SecurityView.vue
+++ b/ui/src/views/SecurityView.vue
@@ -204,12 +204,12 @@ onUnmounted(() => {
{{ error }}
- Loading vulnerability data...
+ Loading vulnerability data...
{
:count-label="displayCountLabel">
+ class="px-2 py-1.5 dd-rounded text-[0.6875rem] font-semibold uppercase tracking-wide border outline-none cursor-pointer dd-bg dd-text dd-border-strong">
Severity
Critical
High
@@ -229,13 +229,13 @@ onUnmounted(() => {
Low
+ class="px-2 py-1.5 dd-rounded text-[0.6875rem] font-semibold uppercase tracking-wide border outline-none cursor-pointer dd-bg dd-text dd-border-strong">
Fix Available
Yes
No
Clear all
@@ -244,7 +244,7 @@ onUnmounted(() => {
@@ -253,17 +253,17 @@ onUnmounted(() => {
-
trivy
-
cosign
-
-
{{ row.image }}
{{ row.delta.fixed }} fixed
{{ row.delta.new }} new
{{ row.delta.fixed }} fixed, {{ row.delta.new }} new
@@ -331,42 +331,42 @@ onUnmounted(() => {
-
{{ row.critical }}
- —
+ —
-
{{ row.high }}
- —
+ —
-
{{ row.medium }}
- —
+ —
-
{{ row.low }}
- —
+ —
-
{{ fixablePercent(row.fixable, row.total) }}%
- 0%
+ 0%
- {{ row.total }}
+ {{ row.total }}
{
-
{{ summary.image }}
-
{{ summary.total }} vulnerabilities
+
{{ summary.image }}
+
{{ summary.total }} vulnerabilities
-
{{ summary.critical }} Critical
-
{{ summary.high }} High
-
{{ summary.medium }} Medium
-
{{ summary.low }} Low
@@ -426,26 +426,26 @@ onUnmounted(() => {
class="px-4 py-2 flex items-center gap-1.5"
:style="{ borderTop: '1px solid var(--dd-border)' }">
{{ summary.delta.fixed }} fixed
{{ summary.delta.new }} new
- vs update
+ vs update
-
{{ fixablePercent(summary.fixable, summary.total) }}% fixable
-
No fixes available
-
{{ summary.total }} total
+
No fixes available
+
{{ summary.total }} total
@@ -478,28 +478,28 @@ onUnmounted(() => {
:style="{ color: severityColor(highestSeverity(summary)).text }" />
{{ summary.image }}
-
{{ summary.total }} vulnerabilities
+
{{ summary.total }} vulnerabilities
-
{{ summary.critical }}C
-
{{ summary.high }}H
-
{{ summary.fixable }} fix
{{ summary.delta.fixed }} fixed
{{ summary.delta.new }} new
@@ -542,23 +542,23 @@ onUnmounted(() => {
-
{{ selectedImage.critical }} Critical
-
{{ selectedImage.high }} High
-
{{ selectedImage.medium }} Medium
-
{{ selectedImage.low }} Low
- {{ selectedImage?.total }} total
+ {{ selectedImage?.total }} total
@@ -570,30 +570,30 @@ onUnmounted(() => {
-
{{ vuln.severity }}
-
{{ vuln.id }}
+
{{ vuln.id }}
-
+
{{ vuln.package }}
{{ vuln.version }}
-
{{ vuln.fixedIn }}
-
No fix
+
No fix
-
+
{{ vuln.title }}
-
+
Target:
{{ vuln.target }}
@@ -602,7 +602,7 @@ onUnmounted(() => {
:href="vuln.primaryUrl"
target="_blank"
rel="noopener noreferrer"
- class="inline-flex text-[10px] underline hover:no-underline break-all"
+ class="inline-flex text-[0.625rem] underline hover:no-underline break-all"
style="color: var(--dd-info);"
>
{{ vuln.primaryUrl }}
@@ -613,26 +613,26 @@ onUnmounted(() => {