johnandersen777.bsky.social/knotless
git that lives in your Atmosphere account
Forked from chadtmiller.com/knotless
0
0
<script lang="ts">
import type { RepoViewDetailed } from '#lib/lexicons/dev/knotless/defs.ts';
import type { Snippet } from 'svelte';
import { page } from '$app/state';
import Meta from '#lib/atoms/Meta.svelte';
import { repoHref } from '#lib/format.ts';
import RepoHeader, { type Tab } from '#lib/organisms/RepoHeader.svelte';
import TransferOffer from '#lib/organisms/TransferOffer.svelte';
/**
* A page about a repository: its header and tabs, then the page. It
* unfurls as the repository does, unless it says otherwise. Its owner
* is shown as the page's path names it. `feed`, one of the repository's
* Atom feeds, is named for feed readers to find.
*/
let {
repo,
tab,
title,
about,
card = repo.card,
feed,
children
}: {
repo: RepoViewDetailed;
tab: Tab;
title: string;
about?: string;
card?: string;
feed?: 'commits' | 'tags' | 'releases';
children: Snippet;
} = $props();
const feeds = { commits: 'Commits to', tags: 'Tags of', releases: 'Releases of' };
const authority = $derived(page.params.authority ?? repo.owner.handle);
const viewer = $derived(page.data.viewer?.actor);
const said = $derived(
about ?? repo.description ?? `A git repository in ${authority}'s atmosphere account.`
);
</script>
<Meta
{title}
about={said}
{card}
feed={feed && {
title: `${feeds[feed]} ${authority}/${repo.name}`,
href: repoHref(authority, repo.name, `/${feed}.atom`)
}}
/>
<RepoHeader
{repo}
{authority}
{tab}
in={!!viewer}
me={viewer?.handle}
login={page.data.viewer?.login}
owner={viewer?.did === repo.owner.did}
admin={!!repo.viewer?.admin}
/>
{#if repo.archivedAt}<p class="archived-note" role="status">
This repository is archived and read only. Nobody can push to it, open pulls or issues, or
comment.
</p>{/if}
{#if repo.viewer?.transfer}<TransferOffer {repo} to={repo.viewer.transfer} />{/if}
{@render children()}