Rework the dashboard, environment topology view, header navigation, and status rendering, and standardise selects on a shadcn-vue component. Replace the thin database seeder with a SimulatedEnvironmentSeeder that builds a fully wired, mostly-running organisation (ACTIVE server fleet, managed + GHCR registries, Gitea source provider, ClipBin app with production/staging environments, services, slices, endpoints, managed variables, build artifacts, and a completed/in-progress/failed operations history) so the new UI renders against realistic data.
30 lines
969 B
Vue
30 lines
969 B
Vue
<script setup lang="ts">
|
|
import StatusIndicator from "@/components/StatusIndicator.vue";
|
|
import { Card } from "@/components/ui/card";
|
|
|
|
defineProps<{
|
|
title: string;
|
|
subtitle?: string | null;
|
|
icon?: object | Function;
|
|
status?: string | null;
|
|
}>();
|
|
</script>
|
|
|
|
<template>
|
|
<Card class="overflow-hidden">
|
|
<div class="flex items-center justify-between gap-3 border-b bg-muted/30 px-4 py-3">
|
|
<div class="flex min-w-0 items-center gap-2">
|
|
<component :is="icon" v-if="icon" class="size-4 shrink-0 opacity-70" />
|
|
<span class="truncate font-semibold">{{ title }}</span>
|
|
<span v-if="subtitle" class="truncate text-xs text-muted-foreground">{{
|
|
subtitle
|
|
}}</span>
|
|
</div>
|
|
<StatusIndicator v-if="status" :status="status" />
|
|
</div>
|
|
<div class="grid gap-2.5 p-4">
|
|
<slot />
|
|
</div>
|
|
</Card>
|
|
</template>
|