feat: refonte UX du dashboard (coquille, tri/filtre/pagination, ⌘K, toasts)
Refonte front (packages/web) : coquille applicative partagée (sidebar desktop + barre d'onglets mobile + PageHeader, langue/push/logout centralisés) pilotée par route.meta.layout ; design system (BaseButton/BaseBadge/SegmentedControl/EmptyState/ SkeletonRow, anneau de focus, icônes @lucide/vue) ; tri/filtre/recherche/pagination côté client via useListControls (+ synchro URL) sur sessions/worktrees/groupes ; section « À traiter », palette de commandes ⌘K, toasts. Aucune modif serveur/protocole/DB.
This commit is contained in:
21
packages/web/src/components/layout/PageHeader.vue
Normal file
21
packages/web/src/components/layout/PageHeader.vue
Normal file
@@ -0,0 +1,21 @@
|
||||
<template>
|
||||
<header class="flex flex-wrap items-center gap-x-3 gap-y-2">
|
||||
<div class="flex min-w-0 items-center gap-2">
|
||||
<slot name="title">
|
||||
<h1 class="truncate text-lg font-semibold text-zinc-100">{{ title }}</h1>
|
||||
</slot>
|
||||
<span v-if="subtitle" class="truncate font-mono text-xs text-zinc-500" :title="subtitle">{{ subtitle }}</span>
|
||||
</div>
|
||||
<div v-if="$slots.default" class="ml-auto flex flex-wrap items-center gap-2">
|
||||
<slot />
|
||||
</div>
|
||||
<div v-if="$slots.search" class="w-full">
|
||||
<slot name="search" />
|
||||
</div>
|
||||
</header>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
// En-tête de contenu : titre (ou slot #title pour un titre riche) + slot d'actions + slot recherche.
|
||||
defineProps<{ title?: string; subtitle?: string }>();
|
||||
</script>
|
||||
Reference in New Issue
Block a user