This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

core / web / src / lib / components / repo / RepoIndexView.svelte
4.0 kB 140 lines
1<script lang="ts"> 2 import GitBranch from "$icon/git-branch"; 3 import Logs from "$icon/logs"; 4 import Tags from "$icon/tags"; 5 import TriangleAlert from "$icon/triangle-alert"; 6 import BranchList from "./BranchList.svelte"; 7 import CommitList from "./CommitList.svelte"; 8 import EmptyRepo from "./EmptyRepo.svelte"; 9 import FileTree from "./FileTree.svelte"; 10 import LanguageBar from "./LanguageBar.svelte"; 11 import PanelHeader from "./PanelHeader.svelte"; 12 import Readme from "./Readme.svelte"; 13 import RepoToolbar from "./RepoToolbar.svelte"; 14 import TagList from "./TagList.svelte"; 15 import type { loadRepoIndex } from "$lib/api/repoIndex"; 16 import type { RepoInfo } from "./types"; 17 18 interface Props { 19 repo: RepoInfo; 20 data: Awaited<ReturnType<typeof loadRepoIndex>>; 21 bobbinUrl: string; 22 } 23 24 let { repo, data, bobbinUrl }: Props = $props(); 25 26 const base = $derived(`/${repo.ownerHandle}/${repo.name}`); 27 const encodedRef = $derived(encodeURIComponent(data.ref)); 28 const refsCapped = $derived(data.refs.capped); 29</script> 30 31<section 32 class="relative mx-auto w-full rounded bg-background-default px-6 py-4 text-foreground-default" 33> 34 {#if data.needsUpgrade} 35 <div class="flex h-96 items-center justify-center text-center text-foreground-danger"> 36 <div> 37 <span class="flex items-center justify-center gap-2"> 38 <TriangleAlert class="size-5 shrink-0" aria-hidden="true" /> 39 The knot hosting this repository needs an upgrade. 40 </span> 41 <p class="mt-2"> 42 This repository is currently unavailable. 43 <a 44 href="https://docs.tangled.org/migrating-knots-and-spindles.html" 45 rel="external noopener noreferrer" 46 class="underline">Read the upgrade guide</a 47 > 48 </p> 49 </div> 50 </div> 51 {:else if data.knotUnreachable} 52 <div class="flex h-96 items-center justify-center text-center text-foreground-danger"> 53 <span class="flex items-center gap-2"> 54 <TriangleAlert class="size-5 shrink-0" aria-hidden="true" /> 55 The knot hosting this repository is unreachable. 56 </span> 57 </div> 58 {:else if data.isEmpty} 59 <EmptyRepo {repo} /> 60 {:else} 61 {#if data.languages.length > 0} 62 <LanguageBar languages={data.languages} /> 63 {/if} 64 65 <RepoToolbar 66 {repo} 67 ref={data.ref} 68 refs={data.refs} 69 totalCommits={data.totalCommits} 70 totalBranches={data.totalBranches} 71 totalTags={data.totalTags} 72 {bobbinUrl} 73 /> 74 75 <div class="grid grid-cols-1 gap-2 md:grid-cols-2"> 76 <div class="min-w-0 md:border-r md:border-border-default md:pr-2"> 77 <FileTree 78 ownerHandle={repo.ownerHandle} 79 repoName={repo.name} 80 ref={data.ref} 81 entries={data.files} 82 /> 83 </div> 84 85 <div class="hidden md:block"> 86 {#if data.commits.length > 0} 87 <div class="px-2 pb-4"> 88 <PanelHeader 89 title="Commits" 90 icon={Logs} 91 href={`${base}/commits/${encodedRef}`} 92 count={data.totalCommits} 93 /> 94 <CommitList 95 ownerHandle={repo.ownerHandle} 96 repoName={repo.name} 97 commits={data.commits} 98 tagsByCommit={data.tagsByCommit} 99 /> 100 </div> 101 {/if} 102 103 {#if data.branches.length > 0} 104 <div class="border-t border-border-default px-2 py-4"> 105 <PanelHeader 106 title="Branches" 107 icon={GitBranch} 108 href={`${base}/branches`} 109 count={data.totalBranches} 110 approximate={refsCapped} 111 /> 112 <BranchList 113 ownerHandle={repo.ownerHandle} 114 repoName={repo.name} 115 currentRef={data.ref} 116 branches={data.branches} 117 /> 118 </div> 119 {/if} 120 121 {#if data.tags.length > 0} 122 <div class="border-t border-border-default px-2 py-4"> 123 <PanelHeader 124 title="Tags" 125 icon={Tags} 126 href={`${base}/tags`} 127 count={data.totalTags} 128 approximate={refsCapped} 129 /> 130 <TagList ownerHandle={repo.ownerHandle} repoName={repo.name} tags={data.tags} /> 131 </div> 132 {/if} 133 </div> 134 </div> 135 {/if} 136</section> 137 138{#if data.readme} 139 <Readme filename={data.readme.filename} contents={data.readme.contents} html={data.readmeHtml} /> 140{/if}