From 23c568ae897284b4fe4bd08c78ef0198bd86e969 Mon Sep 17 00:00:00 2001 From: curo1305 Date: Sat, 23 May 2026 20:49:07 +0200 Subject: [PATCH] feat(03-05): create QuotaBar.vue; embed in AppSidebar between topics nav and footer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - QuotaBar.vue: new sidebar quota widget — onMounted calls authStore.fetchQuota(); computed pct/barColor/labelColor/label from authStore.quota; color thresholds <80% indigo-500, 80-95% amber-500, >=95% red-500; skeleton loading state (animate-pulse); hides on loadFailed (v-if); role=progressbar with aria-valuenow/aria-valuemin/aria-valuemax/aria-label - AppSidebar.vue: import QuotaBar; insert between and settings footer div - Frontend build exits 0 (verified) --- frontend/src/components/layout/AppSidebar.vue | 4 + frontend/src/components/layout/QuotaBar.vue | 95 +++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 frontend/src/components/layout/QuotaBar.vue diff --git a/frontend/src/components/layout/AppSidebar.vue b/frontend/src/components/layout/AppSidebar.vue index 167cf64..3cf119d 100644 --- a/frontend/src/components/layout/AppSidebar.vue +++ b/frontend/src/components/layout/AppSidebar.vue @@ -54,6 +54,9 @@ + + +
@@ -108,6 +111,7 @@ import { useRouter } from 'vue-router' import { useTopicsStore } from '../../stores/topics.js' import { useAuthStore } from '../../stores/auth.js' +import QuotaBar from './QuotaBar.vue' const topicsStore = useTopicsStore() const authStore = useAuthStore() diff --git a/frontend/src/components/layout/QuotaBar.vue b/frontend/src/components/layout/QuotaBar.vue new file mode 100644 index 0000000..067948d --- /dev/null +++ b/frontend/src/components/layout/QuotaBar.vue @@ -0,0 +1,95 @@ + + +