formatted, added team index, create, show
CI/CD / test_and_check_app (push) Failing after 48s
CI/CD / Publish immutable image (push) Skipped

This commit is contained in:
2026-09-19 01:09:55 +02:00
parent 9a025d6a80
commit b79d93fede
76 changed files with 3290 additions and 3146 deletions
+4 -4
View File
@@ -3,12 +3,12 @@ import AppLayout from '@/layouts/app/AppSidebarLayout.vue';
import type { BreadcrumbItem } from '@/types';
const { breadcrumbs = [] } = defineProps<{
breadcrumbs?: BreadcrumbItem[];
breadcrumbs?: BreadcrumbItem[];
}>();
</script>
<template>
<AppLayout :breadcrumbs="breadcrumbs">
<slot />
</AppLayout>
<AppLayout :breadcrumbs="breadcrumbs">
<slot />
</AppLayout>
</template>
+5 -5
View File
@@ -2,13 +2,13 @@
import AuthLayout from '@/layouts/auth/AuthSimpleLayout.vue';
const { title = '', description = '' } = defineProps<{
title?: string;
description?: string;
title?: string;
description?: string;
}>();
</script>
<template>
<AuthLayout :title="title" :description="description">
<slot />
</AuthLayout>
<AuthLayout :title="title" :description="description">
<slot />
</AuthLayout>
</template>
+9 -9
View File
@@ -6,20 +6,20 @@ import { Toaster } from '@/components/ui/sonner';
import type { BreadcrumbItem } from '@/types';
type Props = {
breadcrumbs?: BreadcrumbItem[];
breadcrumbs?: BreadcrumbItem[];
};
withDefaults(defineProps<Props>(), {
breadcrumbs: () => [],
breadcrumbs: () => [],
});
</script>
<template>
<AppShell variant="header">
<AppHeader :breadcrumbs="breadcrumbs" />
<AppContent variant="header">
<slot />
</AppContent>
<Toaster />
</AppShell>
<AppShell variant="header">
<AppHeader :breadcrumbs="breadcrumbs" />
<AppContent variant="header">
<slot />
</AppContent>
<Toaster />
</AppShell>
</template>
+10 -10
View File
@@ -7,21 +7,21 @@ import { Toaster } from '@/components/ui/sonner';
import type { BreadcrumbItem } from '@/types';
type Props = {
breadcrumbs?: BreadcrumbItem[];
breadcrumbs?: BreadcrumbItem[];
};
withDefaults(defineProps<Props>(), {
breadcrumbs: () => [],
breadcrumbs: () => [],
});
</script>
<template>
<AppShell variant="sidebar">
<AppSidebar />
<AppContent variant="sidebar" class="min-w-0 overflow-x-clip">
<AppSidebarHeader :breadcrumbs="breadcrumbs" />
<slot />
</AppContent>
<Toaster />
</AppShell>
<AppShell variant="sidebar">
<AppSidebar />
<AppContent variant="sidebar" class="min-w-0 overflow-x-clip">
<AppSidebarHeader :breadcrumbs="breadcrumbs" />
<slot />
</AppContent>
<Toaster />
</AppShell>
</template>
+33 -35
View File
@@ -2,49 +2,47 @@
import { Link } from '@inertiajs/vue3';
import AppLogoIcon from '@/components/AppLogoIcon.vue';
import {
Card,
CardContent,
CardDescription,
CardHeader,
CardTitle,
Card,
CardContent,
CardDescription,
CardHeader,
CardTitle,
} from '@/components/ui/card';
import { home } from '@/routes';
defineProps<{
title?: string;
description?: string;
title?: string;
description?: string;
}>();
</script>
<template>
<div
class="bg-muted flex min-h-svh flex-col items-center justify-center gap-6 p-6 md:p-10"
>
<div class="flex w-full max-w-md flex-col gap-6">
<Link
:href="home()"
class="flex items-center gap-2 self-center font-medium"
>
<div class="flex h-9 w-9 items-center justify-center">
<AppLogoIcon
class="size-9 fill-current text-black dark:text-white"
/>
</div>
</Link>
<div class="flex flex-col gap-6">
<Card class="rounded-xl">
<CardHeader class="px-10 pt-8 pb-0 text-center">
<CardTitle class="text-xl">{{ title }}</CardTitle>
<CardDescription>
{{ description }}
</CardDescription>
</CardHeader>
<CardContent class="px-10 py-8">
<slot />
</CardContent>
</Card>
</div>
<div
class="bg-muted flex min-h-svh flex-col items-center justify-center gap-6 p-6 md:p-10"
>
<div class="flex w-full max-w-md flex-col gap-6">
<Link
:href="home()"
class="flex items-center gap-2 self-center font-medium"
>
<div class="flex h-9 w-9 items-center justify-center">
<AppLogoIcon class="size-9 fill-current text-black dark:text-white" />
</div>
</Link>
<div class="flex flex-col gap-6">
<Card class="rounded-xl">
<CardHeader class="px-10 pt-8 pb-0 text-center">
<CardTitle class="text-xl">{{ title }}</CardTitle>
<CardDescription>
{{ description }}
</CardDescription>
</CardHeader>
<CardContent class="px-10 py-8">
<slot />
</CardContent>
</Card>
</div>
</div>
</div>
</template>
+29 -29
View File
@@ -4,40 +4,40 @@ import AppLogoIcon from '@/components/AppLogoIcon.vue';
import { home } from '@/routes';
defineProps<{
title?: string;
description?: string;
title?: string;
description?: string;
}>();
</script>
<template>
<div
class="bg-background flex min-h-svh flex-col items-center justify-center gap-6 p-6 md:p-10"
>
<div class="w-full max-w-sm">
<div class="flex flex-col gap-8">
<div class="flex flex-col items-center gap-4">
<Link
:href="home()"
class="flex flex-col items-center gap-2 font-medium"
>
<div
class="mb-1 flex h-9 w-9 items-center justify-center rounded-md"
>
<AppLogoIcon
class="size-9 fill-current text-[var(--foreground)] dark:text-white"
/>
</div>
<span class="sr-only">{{ title }}</span>
</Link>
<div class="space-y-2 text-center">
<h1 class="text-xl font-medium">{{ title }}</h1>
<p class="text-muted-foreground text-center text-sm">
{{ description }}
</p>
</div>
</div>
<slot />
<div
class="bg-background flex min-h-svh flex-col items-center justify-center gap-6 p-6 md:p-10"
>
<div class="w-full max-w-sm">
<div class="flex flex-col gap-8">
<div class="flex flex-col items-center gap-4">
<Link
:href="home()"
class="flex flex-col items-center gap-2 font-medium"
>
<div
class="mb-1 flex h-9 w-9 items-center justify-center rounded-md"
>
<AppLogoIcon
class="size-9 fill-current text-[var(--foreground)] dark:text-white"
/>
</div>
<span class="sr-only">{{ title }}</span>
</Link>
<div class="space-y-2 text-center">
<h1 class="text-xl font-medium">{{ title }}</h1>
<p class="text-muted-foreground text-center text-sm">
{{ description }}
</p>
</div>
</div>
<slot />
</div>
</div>
</div>
</template>
+30 -30
View File
@@ -7,41 +7,41 @@ const page = usePage();
const name = page.props.name;
defineProps<{
title?: string;
description?: string;
title?: string;
description?: string;
}>();
</script>
<template>
<div
class="relative grid h-dvh flex-col items-center justify-center px-8 sm:px-0 lg:max-w-none lg:grid-cols-2 lg:px-0"
>
<div
class="relative grid h-dvh flex-col items-center justify-center px-8 sm:px-0 lg:max-w-none lg:grid-cols-2 lg:px-0"
class="bg-muted relative hidden h-full flex-col p-10 text-white lg:flex dark:border-r"
>
<div
class="bg-muted relative hidden h-full flex-col p-10 text-white lg:flex dark:border-r"
>
<div class="absolute inset-0 bg-zinc-900" />
<Link
:href="home()"
class="relative z-20 flex items-center text-lg font-medium"
>
<AppLogoIcon class="mr-2 size-8 fill-current text-white" />
{{ name }}
</Link>
</div>
<div class="lg:p-8">
<div
class="mx-auto flex w-full flex-col justify-center space-y-6 sm:w-[350px]"
>
<div class="flex flex-col space-y-2 text-center">
<h1 class="text-xl font-medium tracking-tight" v-if="title">
{{ title }}
</h1>
<p class="text-muted-foreground text-sm" v-if="description">
{{ description }}
</p>
</div>
<slot />
</div>
</div>
<div class="absolute inset-0 bg-zinc-900" />
<Link
:href="home()"
class="relative z-20 flex items-center text-lg font-medium"
>
<AppLogoIcon class="mr-2 size-8 fill-current text-white" />
{{ name }}
</Link>
</div>
<div class="lg:p-8">
<div
class="mx-auto flex w-full flex-col justify-center space-y-6 sm:w-[350px]"
>
<div class="flex flex-col space-y-2 text-center">
<h1 class="text-xl font-medium tracking-tight" v-if="title">
{{ title }}
</h1>
<p class="text-muted-foreground text-sm" v-if="description">
{{ description }}
</p>
</div>
<slot />
</div>
</div>
</div>
</template>
+44 -47
View File
@@ -11,61 +11,58 @@ import { edit as editSecurity } from '@/routes/security';
import type { NavItem } from '@/types';
const sidebarNavItems: NavItem[] = [
{
title: 'Profile',
href: editProfile(),
},
{
title: 'Security',
href: editSecurity(),
},
{
title: 'Appearance',
href: editAppearance(),
},
{
title: 'Profile',
href: editProfile(),
},
{
title: 'Security',
href: editSecurity(),
},
{
title: 'Appearance',
href: editAppearance(),
},
];
const { isCurrentOrParentUrl } = useCurrentUrl();
</script>
<template>
<div class="px-4 py-6">
<Heading
title="Settings"
description="Manage your profile and account settings"
/>
<div class="px-4 py-6">
<Heading
title="Settings"
description="Manage your profile and account settings"
/>
<div class="flex flex-col lg:flex-row lg:space-x-12">
<aside class="w-full max-w-xl lg:w-48">
<nav
class="flex flex-col space-y-1 space-x-0"
aria-label="Settings"
>
<Button
v-for="item in sidebarNavItems"
:key="toUrl(item.href)"
variant="ghost"
:class="[
'w-full justify-start',
{ 'bg-muted': isCurrentOrParentUrl(item.href) },
]"
as-child
>
<Link :href="item.href">
<component :is="item.icon" class="h-4 w-4" />
{{ item.title }}
</Link>
</Button>
</nav>
</aside>
<div class="flex flex-col lg:flex-row lg:space-x-12">
<aside class="w-full max-w-xl lg:w-48">
<nav class="flex flex-col space-y-1 space-x-0" aria-label="Settings">
<Button
v-for="item in sidebarNavItems"
:key="toUrl(item.href)"
variant="ghost"
:class="[
'w-full justify-start',
{ 'bg-muted': isCurrentOrParentUrl(item.href) },
]"
as-child
>
<Link :href="item.href">
<component :is="item.icon" class="h-4 w-4" />
{{ item.title }}
</Link>
</Button>
</nav>
</aside>
<Separator class="my-6 lg:hidden" />
<Separator class="my-6 lg:hidden" />
<div class="flex-1 md:max-w-2xl">
<section class="max-w-xl space-y-12">
<slot />
</section>
</div>
</div>
<div class="flex-1 md:max-w-2xl">
<section class="max-w-xl space-y-12">
<slot />
</section>
</div>
</div>
</div>
</template>