first commit
linter / quality (push) Canceled after 0s
tests / ci (8.3) (push) Canceled after 0s
tests / ci (8.4) (push) Canceled after 0s
tests / ci (8.5) (push) Canceled after 0s

This commit is contained in:
salam committed 2026-10-06 18:53:03 +02:00
commit e687b4437b
418 files changed
+33577

No files matched your search

+18
View File
@@ -0,0 +1,18 @@
<script lang="ts">
import type { Snippet } from 'svelte';
// import AppLayout from '@/layouts/app/AppSidebarLayout.svelte';
import AppLayout from '@/layouts/app/AppHeaderLayout.svelte';
import type { BreadcrumbItem } from '@/types';
let {
breadcrumbs = [],
children,
}: {
breadcrumbs?: BreadcrumbItem[];
children?: Snippet;
} = $props();
</script>
<AppLayout {breadcrumbs}>
{@render children?.()}
</AppLayout>
+18
View File
@@ -0,0 +1,18 @@
<script lang="ts">
import type { Snippet } from 'svelte';
import AuthLayout from '@/layouts/auth/AuthSimpleLayout.svelte';
let {
title = '',
description = '',
children,
}: {
title?: string;
description?: string;
children?: Snippet;
} = $props();
</script>
<AuthLayout {title} {description}>
{@render children?.()}
</AuthLayout>
@@ -0,0 +1,24 @@
<script lang="ts">
import type { Snippet } from 'svelte';
import AppContent from '@/components/AppContent.svelte';
import AppHeader from '@/components/AppHeader.svelte';
import AppShell from '@/components/AppShell.svelte';
import { Toaster } from '@/components/ui/sonner';
import type { BreadcrumbItem } from '@/types';
let {
breadcrumbs = [],
children,
}: {
breadcrumbs?: BreadcrumbItem[];
children?: Snippet;
} = $props();
</script>
<AppShell variant="header">
<AppHeader {breadcrumbs} />
<AppContent variant="header">
{@render children?.()}
</AppContent>
<Toaster />
</AppShell>
@@ -0,0 +1,26 @@
<script lang="ts">
import type { Snippet } from 'svelte';
import AppContent from '@/components/AppContent.svelte';
import AppShell from '@/components/AppShell.svelte';
import AppSidebar from '@/components/AppSidebar.svelte';
import AppSidebarHeader from '@/components/AppSidebarHeader.svelte';
import { Toaster } from '@/components/ui/sonner';
import type { BreadcrumbItem } from '@/types';
let {
breadcrumbs = [],
children,
}: {
breadcrumbs?: BreadcrumbItem[];
children?: Snippet;
} = $props();
</script>
<AppShell variant="sidebar">
<AppSidebar />
<AppContent variant="sidebar" class="overflow-x-hidden">
<AppSidebarHeader {breadcrumbs} />
{@render children?.()}
</AppContent>
<Toaster />
</AppShell>
@@ -0,0 +1,54 @@
<script lang="ts">
import { Link } from '@inertiajs/svelte';
import type { Snippet } from 'svelte';
import AppLogoIcon from '@/components/AppLogoIcon.svelte';
import {
Card,
CardContent,
CardDescription,
CardHeader,
CardTitle,
} from '@/components/ui/card';
import { home } from '@/routes';
let {
title = '',
description = '',
children,
}: {
title?: string;
description?: string;
children?: Snippet;
} = $props();
</script>
<div
class="flex min-h-svh flex-col items-center justify-center gap-6 bg-muted 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">
{@render children?.()}
</CardContent>
</Card>
</div>
</div>
</div>
@@ -0,0 +1,43 @@
<script lang="ts">
import { Link } from '@inertiajs/svelte';
import type { Snippet } from 'svelte';
import AppLogoIcon from '@/components/AppLogoIcon.svelte';
import { home } from '@/routes';
let {
title = '',
description = '',
children,
}: {
title?: string;
description?: string;
children?: Snippet;
} = $props();
</script>
<div
class="flex min-h-svh flex-col items-center justify-center gap-6 bg-background 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"
>
<AppLogoIcon
class="size-14 fill-current text-foreground dark:text-white"
/>
<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-center text-sm text-muted-foreground">
{description}
</p>
</div>
</div>
{@render children?.()}
</div>
</div>
</div>
@@ -0,0 +1,50 @@
<script lang="ts">
import { Link, page } from '@inertiajs/svelte';
import type { Snippet } from 'svelte';
import AppLogoIcon from '@/components/AppLogoIcon.svelte';
import { home } from '@/routes';
let {
title = '',
description = '',
children,
}: {
title?: string;
description?: string;
children?: Snippet;
} = $props();
const name = $derived(page.props.name);
</script>
<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 hidden h-full flex-col bg-muted p-10 text-white lg:flex dark:border-r"
>
<div class="absolute inset-0 bg-zinc-900"></div>
<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">
{#if title}
<h1 class="text-xl font-medium tracking-tight">{title}</h1>
{/if}
{#if description}
<p class="text-sm text-muted-foreground">{description}</p>
{/if}
</div>
{@render children?.()}
</div>
</div>
</div>
@@ -0,0 +1,79 @@
<script lang="ts">
import { Link } from '@inertiajs/svelte';
import type { Snippet } from 'svelte';
import Heading from '@/components/Heading.svelte';
import { Button } from '@/components/ui/button';
import { Separator } from '@/components/ui/separator';
import { currentUrlState } from '@/lib/currentUrl.svelte';
import { toUrl } from '@/lib/utils';
import { edit as editAppearance } from '@/routes/appearance';
import { edit as editProfile } from '@/routes/profile';
import { edit as editSecurity } from '@/routes/security';
import type { NavItem } from '@/types';
let {
children,
}: {
children?: Snippet;
} = $props();
const sidebarNavItems: NavItem[] = [
{
title: 'Profile',
href: editProfile(),
},
{
title: 'Security',
href: editSecurity(),
},
{
title: 'Appearance',
href: editAppearance(),
},
];
const url = currentUrlState();
</script>
<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"
>
{#each sidebarNavItems as item (toUrl(item.href))}
<Button
variant="ghost"
class="w-full justify-start {url.isCurrentUrl(
item.href,
url.currentUrl,
)
? 'bg-muted'
: ''}"
asChild
>
{#snippet children(props)}
<Link href={toUrl(item.href)} class={props.class}>
{item.title}
</Link>
{/snippet}
</Button>
{/each}
</nav>
</aside>
<Separator class="my-6 lg:hidden" />
<div class="flex-1 md:max-w-2xl">
<section class="max-w-xl space-y-12">
{@render children?.()}
</section>
</div>
</div>
</div>