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