diff --git a/web/src/assets/locales/en.json b/web/src/assets/locales/en.json
index 325731e1b..577325f57 100644
--- a/web/src/assets/locales/en.json
+++ b/web/src/assets/locales/en.json
@@ -191,7 +191,7 @@
"pipeline": {
"tasks": "Tasks",
"config": "Config",
- "files": "Changed files ({files})",
+ "files": "Changed files",
"no_pipelines": "No pipelines have been started yet.",
"no_pipeline_steps": "No pipeline steps available!",
"step_not_started": "This step hasn't started yet.",
@@ -248,8 +248,8 @@
"failure": "failure",
"killed": "killed"
},
- "errors": "Errors ({count})",
- "warnings": "Warnings ({count})",
+ "errors": "Errors",
+ "warnings": "Warnings",
"show_errors": "Show errors",
"we_got_some_errors": "Oh no, we got some errors!",
"duration": "Pipeline duration",
diff --git a/web/src/components/atomic/CountBadge.vue b/web/src/components/atomic/CountBadge.vue
new file mode 100644
index 000000000..44c96e8b0
--- /dev/null
+++ b/web/src/components/atomic/CountBadge.vue
@@ -0,0 +1,13 @@
+
+
+ {{ value }}
+
+
+
+
diff --git a/web/src/components/layout/scaffold/Tab.vue b/web/src/components/layout/scaffold/Tab.vue
index 3bc833a3e..64ecf1121 100644
--- a/web/src/components/layout/scaffold/Tab.vue
+++ b/web/src/components/layout/scaffold/Tab.vue
@@ -10,6 +10,7 @@ import { useTabsClient } from '~/compositions/useTabs';
const props = defineProps<{
to: RouteLocationRaw;
title: string;
+ count?: number;
icon?: IconNames;
iconClass?: string;
matchChildren?: boolean;
@@ -32,6 +33,7 @@ onMounted(() => {
tabs.value.push({
to: props.to,
title: props.title,
+ count: props.count,
icon: props.icon,
iconClass: props.iconClass,
matchChildren: props.matchChildren,
diff --git a/web/src/components/layout/scaffold/Tabs.vue b/web/src/components/layout/scaffold/Tabs.vue
index 090389800..78f821557 100644
--- a/web/src/components/layout/scaffold/Tabs.vue
+++ b/web/src/components/layout/scaffold/Tabs.vue
@@ -11,15 +11,17 @@
>
-
+
{{ tab.title }}
+