feat: Dashboard-Enhancements – Filter, Checkboxen, Animationen
CI - Build & Test / Backend (.NET) (push) Successful in 25s
CI - Build & Test / Frontend (Vue/TS) (push) Successful in 17s
CI - Build & Test / Security Check (push) Successful in 3s

- IrisPanel: Task-Zahlen aus OperationsStore, Suggestions als Array, Chat via console.log
- OperationsFeed: Filter-Pills filtern Feed-Items, TransitionGroup-Animationen
- AgendaPanel: Checkboxen mit localStorage-Persistenz (nexus-agenda-done)
- ActiveInitiatives: Cards hover-scale, Klick-Handler, Progress-Bars animiert
- RecentlyFinished: Chips klickbar + a11y (role, tabindex, keyup)
- DashboardView: fade-in Animation, Custom-Scrollbar
- VERSION: 0.1.0 initial
- Deploy-Workflow: Version-Bump-Semantik (major=x.0.0, minor=1.x.0, patch=1.0.x)
This commit is contained in:
2026-06-09 19:51:25 +02:00
parent 635e43457d
commit 13d4c2f157
6 changed files with 171 additions and 39 deletions
@@ -81,15 +81,17 @@ const statusColor = (s: FeedStatus): string => {
<div class="feed-list">
<template v-for="group in feedGroups" :key="group.date">
<div class="feed-date-heading">{{ group.date }}</div>
<div
v-for="(item, idx) in group.items"
:key="idx"
class="feed-item"
>
<span class="feed-time">{{ item.time }}</span>
<span class="feed-dot" :style="{ background: statusColor(item.status) }"></span>
<span class="feed-text">{{ item.text }}</span>
</div>
<TransitionGroup name="feed-item" tag="div" class="feed-group-items">
<div
v-for="(item, idx) in group.items"
:key="group.date + '-' + idx"
class="feed-item"
>
<span class="feed-time">{{ item.time }}</span>
<span class="feed-dot" :style="{ background: statusColor(item.status) }"></span>
<span class="feed-text">{{ item.text }}</span>
</div>
</TransitionGroup>
</template>
</div>
</div>
@@ -163,6 +165,9 @@ const statusColor = (s: FeedStatus): string => {
overflow-y: auto;
flex: 1;
}
.feed-group-items {
display: contents;
}
.feed-date-heading {
font-size: 9px;
font-weight: 700;
@@ -202,6 +207,25 @@ const statusColor = (s: FeedStatus): string => {
color: #7e8799;
}
/* TransitionGroup animations */
.feed-item-enter-active {
transition: all 0.3s ease;
}
.feed-item-leave-active {
transition: all 0.3s ease;
}
.feed-item-enter-from {
opacity: 0;
transform: translateX(-12px);
}
.feed-item-leave-to {
opacity: 0;
transform: translateX(12px);
}
.feed-item-move {
transition: all 0.3s ease;
}
@media (max-width: 900px) {
.feed-panel {
order: 2;