feat: add transitions and micro-interactions across all views

- Page transitions with slide-up/fade on route changes (App.vue)
- NavRail sliding active indicator with spring-like easing
- List enter/leave/move animations on Entries, Projects, Clients, Timer
- Modal enter/leave transitions with scale+fade on all dialogs
- Dropdown transitions with overshoot on all select/picker components
- Button feedback (scale on hover/active), card hover lift effects
- Timer pulse on start, glow on stop, floating empty state icons
- Content fade-in on Dashboard, Reports, Calendar, Timesheet
- Tag chip enter/leave animations in AppTagInput
- Progress bar smooth width transitions
- Implementation plan document
This commit is contained in:
Your Name
2026-02-18 11:33:58 +02:00
parent bd0dbaf91d
commit 04d4220604
16 changed files with 2115 additions and 144 deletions

View File

@@ -109,7 +109,7 @@ onBeforeUnmount(() => {
<template>
<div ref="triggerRef" class="relative">
<!-- Selected tags + add button -->
<div class="flex flex-wrap items-center gap-1.5">
<TransitionGroup tag="div" name="chip" class="flex flex-wrap items-center gap-1.5">
<span
v-for="tag in selectedTags"
:key="tag.id"
@@ -123,6 +123,7 @@ onBeforeUnmount(() => {
</button>
</span>
<button
key="__add_btn__"
type="button"
@click="isOpen ? close() : open()"
class="inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-[0.6875rem] text-text-tertiary border border-border-subtle hover:text-text-secondary hover:border-border-visible transition-colors"
@@ -130,15 +131,16 @@ onBeforeUnmount(() => {
<Plus class="w-3 h-3" />
Tag
</button>
</div>
</TransitionGroup>
<!-- Dropdown -->
<Teleport to="body">
<Transition name="dropdown">
<div
v-if="isOpen"
ref="panelRef"
:style="panelStyle"
class="bg-bg-surface border border-border-visible rounded-xl shadow-[0_4px_24px_rgba(0,0,0,0.4)] overflow-hidden animate-dropdown-enter"
class="bg-bg-surface border border-border-visible rounded-xl shadow-[0_4px_24px_rgba(0,0,0,0.4)] overflow-hidden"
>
<div class="px-2 pt-2 pb-1">
<input
@@ -172,6 +174,7 @@ onBeforeUnmount(() => {
</div>
</div>
</div>
</Transition>
</Teleport>
</div>
</template>