This repository has no description
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}