Something went wrong. Try again.
Monorepo for Tangled
Something went wrong. Try again.
Svelte
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455<script lang="ts"> import SquareChartGantt from "$icon/square-chart-gantt"; import CircleDot from "$icon/circle-dot"; import GitPullRequest from "$icon/git-pull-request"; import Layers2 from "$icon/layers-2"; import Settings from "$icon/settings"; import Tabs, { type TabDef } from "$lib/components/ui/Tabs.svelte"; import type { RepoAccess } from "$lib/api/access"; import type { RepoCounts, RepoInfo } from "$lib/components/repo/types";
interface Props { repo: RepoInfo; counts: RepoCounts | Promise<RepoCounts>; access: RepoAccess | Promise<RepoAccess>; active: string; }
let { repo, counts, access: accessField, active }: Props = $props();
const access = $derived(await accessField);
const base = $derived(`/${repo.ownerHandle}/${repo.name}`);
const countFor = (key: keyof RepoCounts) => { if (typeof counts === "object" && counts !== null && "then" in counts) { return (counts as Promise<RepoCounts>).then((c) => c[key]); } return (counts as RepoCounts)[key]; };
const tabs = $derived<TabDef[]>([ { id: "overview", label: "Overview", icon: SquareChartGantt, href: base }, { id: "issues", label: "Issues", icon: CircleDot, count: countFor("issues"), href: `${base}/issues` }, { id: "pulls", label: "Pulls", icon: GitPullRequest, count: countFor("pulls"), href: `${base}/pulls` }, { id: "pipelines", label: "Pipelines", icon: Layers2, href: `${base}/pipelines` }, ...(access.canPush ? [{ id: "settings", label: "Settings", icon: Settings, href: `${base}/settings` }] : []) ]);</script>
<Tabs overlapBottom={true} {tabs} {active} label="repository sections" />