Files
familienarchiv/frontend/src/routes/admin/+layout.svelte
Marcel daea748a20
Some checks failed
CI / Unit & Component Tests (push) Failing after 2m37s
CI / OCR Service Tests (push) Successful in 32s
CI / OCR Service Tests (pull_request) Successful in 30s
CI / Backend Unit Tests (push) Failing after 2m47s
CI / Unit & Component Tests (pull_request) Failing after 2m29s
CI / Backend Unit Tests (pull_request) Failing after 2m46s
feat(frontend): invite-based registration UI
- Add /register route with invite code prefill, password show/hide
- Add /login?registered=1 success banner
- Add /admin/invites page: list, create, revoke, copy link
- Add Einladungen nav section to admin sidebar (ADMIN_USER perm)
- Add invite error codes to errors.ts
- Add 48 i18n keys across de/en/es
- Update hooks.server.ts to allow public access to invite/register API

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 01:01:19 +02:00

35 lines
1002 B
Svelte

<script lang="ts">
import EntityNav from './EntityNav.svelte';
let { data, children } = $props();
</script>
<svelte:head>
<title>Admin · Familienarchiv</title>
</svelte:head>
<!--
-mt-6: cancel the global layout's pt-6 on <main>
Height fills from below the global header (64px) to bottom of viewport.
-->
<div class="-mt-6 -mb-6 flex overflow-hidden" style="height: calc(100vh - 65px)">
<!-- Entity Nav: hidden on mobile, icon strip on tablet, full labels on desktop -->
<div class="hidden md:flex">
<EntityNav
userCount={data.userCount}
groupCount={data.groupCount}
tagCount={data.tagCount}
inviteCount={data.inviteCount}
canManageUsers={data.canManageUsers}
canManageTags={data.canManageTags}
canManagePermissions={data.canManagePermissions}
canRunMaintenance={data.canRunMaintenance}
/>
</div>
<!-- Right side: list panel + detail panel (or full-width for system) -->
<div class="flex min-w-0 flex-1 overflow-hidden">
{@render children()}
</div>
</div>