~ knotless Search/
↑↓ move↵ open⇧↵ all results

johnandersen777.bsky.social/knotless

git that lives in your Atmosphere account

Forked from chadtmiller.com/knotless

0
0
65 lines · 1.9 KB Raw History
<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()}