Something went wrong. Try again.
Monorepo for Tangled tangled.org
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379import type { RepoDiff, RepoDiffDeps, RepoDiffFile } from "$lib/api/repoDiff";
// every file below inlines `content` on both sides, so `fetchSides` never// falls back to `deps.git`'s blob endpoint -- `deps` itself is never touchedexport const deps = { ctx: {}, git: {} } as unknown as RepoDiffDeps;
const zeroOid = "0".repeat(40);
const changed: RepoDiffFile = { key: "src/lib/components/repo/DiffView.svelte→src/lib/components/repo/DiffView.svelte", name: "src/lib/components/repo/DiffView.svelte", kind: "changed", stat: { insertions: 2, deletions: 1 }, lines: 6, sides: { lhs: { path: "src/lib/components/repo/DiffView.svelte", oid: "1111111111111111111111111111111111111111", isBinary: false, isSubmodule: false, size: 60, content: "let treeOpen = true;\n" }, rhs: { path: "src/lib/components/repo/DiffView.svelte", oid: "2222222222222222222222222222222222222222", isBinary: false, isSubmodule: false, size: 100, content: "let treeOpen = $state(true);\nlet allOpen = $state(true);\n" } }};
const added: RepoDiffFile = { key: "→src/lib/components/repo/pulls/PullFileTree.svelte", name: "src/lib/components/repo/pulls/PullFileTree.svelte", kind: "new", stat: { insertions: 3, deletions: 0 }, lines: 4, sides: { lhs: { path: "", oid: zeroOid, isBinary: false, isSubmodule: false, size: 0 }, rhs: { path: "src/lib/components/repo/pulls/PullFileTree.svelte", oid: "3333333333333333333333333333333333333333", isBinary: false, isSubmodule: false, size: 80, content: "interface Props {\n\tfiles: { name: string }[];\n}\n" } }};
const deleted: RepoDiffFile = { key: "src/lib/components/repo/pulls/PullOldPanel.svelte→", name: "src/lib/components/repo/pulls/PullOldPanel.svelte", kind: "deleted", stat: { insertions: 0, deletions: 4 }, lines: 4, sides: { lhs: { path: "src/lib/components/repo/pulls/PullOldPanel.svelte", oid: "4444444444444444444444444444444444444444", isBinary: false, isSubmodule: false, size: 90, content: "<div>\n\told panel, replaced by PullFileTree\n</div>\n" }, rhs: { path: "", oid: zeroOid, isBinary: false, isSubmodule: false, size: 0 } }};
const renamed: RepoDiffFile = { key: "src/lib/components/repo/PierreDiff.svelte→src/lib/components/repo/DiffFileCard.svelte", name: "src/lib/components/repo/DiffFileCard.svelte", oldName: "src/lib/components/repo/PierreDiff.svelte", kind: "renamed", stat: { insertions: 1, deletions: 1 }, lines: 4, sides: { lhs: { path: "src/lib/components/repo/PierreDiff.svelte", oid: "5555555555555555555555555555555555555555", isBinary: false, isSubmodule: false, size: 70, content: "let diffStyle = 'unified';\n" }, rhs: { path: "src/lib/components/repo/DiffFileCard.svelte", oid: "6666666666666666666666666666666666666666", isBinary: false, isSubmodule: false, size: 80, content: "let diffStyle: DiffStyle = 'unified';\n" } }};
const binary: RepoDiffFile = { key: "assets/diff-icon.png→assets/diff-icon.png", name: "assets/diff-icon.png", kind: "changed", stat: { insertions: 0, deletions: 0 }, lines: 0, note: "This is a binary file and will not be displayed."};
const submodule: RepoDiffFile = { key: "vendor/pierre→vendor/pierre", name: "vendor/pierre", kind: "changed", stat: { insertions: 0, deletions: 0 }, lines: 0, note: "Submodule pointer, not shown."};
const skelFile1: RepoDiffFile = { key: "src/lib/components/timeline/TimelineView.svelte→src/lib/components/timeline/TimelineView.svelte", name: "src/lib/components/timeline/TimelineView.svelte", kind: "changed", stat: { insertions: 14, deletions: 4 }, lines: 24, sides: { lhs: { path: "src/lib/components/timeline/TimelineView.svelte", oid: "1010101010101010101010101010101010101010", isBinary: false, isSubmodule: false, size: 480, content: `// Svelte componentimport Timeline from "./Timeline.svelte";import TimelineSkeleton from "./TimelineSkeleton.svelte";import TrendingRepos from "./TrendingRepos.svelte";
let { feed = [], trending = [], loading = false } = $props();// end script
{#if loading}<TimelineSkeleton />{:else}<Timeline {feed} />{/if}` }, rhs: { path: "src/lib/components/timeline/TimelineView.svelte", oid: "2020202020202020202020202020202020202020", isBinary: false, isSubmodule: false, size: 890, content: `// Svelte componentimport Bones from "$lib/components/ui/Bones.svelte";import Pending from "$lib/components/ui/Pending.svelte";import timelineFixture from "$lib/bones/timeline--skeleton-fixture.bones.json";import Timeline from "./Timeline.svelte";import TrendingRepos from "./TrendingRepos.svelte";
let { feed = [], trending = [], signedIn = false } = $props();// end script
<Pending>{#snippet skeleton()} <Bones capture={timelineFixture} />{/snippet}{@const resolved = await feed}<Timeline feed={resolved} {signedIn} /></Pending>` } }};
const skelFile2: RepoDiffFile = { key: "src/lib/api/timelineFeed.ts→src/lib/api/timelineFeed.ts", name: "src/lib/api/timelineFeed.ts", kind: "changed", stat: { insertions: 8, deletions: 2 }, lines: 14, sides: { lhs: { path: "src/lib/api/timelineFeed.ts", oid: "3030303030303030303030303030303030303030", isBinary: false, isSubmodule: false, size: 260, content: `export const loadFeed = async (ctx: Client) => {const res = await ctx.getTimeline({});return res.feed;};` }, rhs: { path: "src/lib/api/timelineFeed.ts", oid: "4040404040404040404040404040404040404040", isBinary: false, isSubmodule: false, size: 520, content: `import { browser } from "$app/environment";
export const loadFeed = async (ctx: Client) => {if (!browser) return [];try { const res = await ctx.getTimeline({}); return res.feed;} catch { return [];}};` } }};
const skelFile3: RepoDiffFile = { key: "src/lib/components/notifications/NotificationList.svelte→src/lib/components/notifications/NotificationList.svelte", name: "src/lib/components/notifications/NotificationList.svelte", kind: "changed", stat: { insertions: 18, deletions: 6 }, lines: 32, sides: { lhs: { path: "src/lib/components/notifications/NotificationList.svelte", oid: "5050505050505050505050505050505050505050", isBinary: false, isSubmodule: false, size: 680, content: `// Svelte componentimport NotificationItem from "./NotificationItem.svelte";let { notifications = [] } = $props();// end script
<div class="rounded-sm border border-border-default divide-y">{#each notifications as n} <NotificationItem notification={n} />{/each}</div>` }, rhs: { path: "src/lib/components/notifications/NotificationList.svelte", oid: "6060606060606060606060606060606060606060", isBinary: false, isSubmodule: false, size: 1240, content: `// Svelte componentimport Bones from "$lib/components/ui/Bones.svelte";import notifsFixture from "$lib/bones/notifs--skeleton-fixture.bones.json";import NotificationItem from "./NotificationItem.svelte";
interface Props { notifications?: NotificationSummary[]; loading?: boolean; title?: string;}
let { notifications = [], loading = false, title }: Props = $props();// end script
{#if loading}<Bones capture={notifsFixture} />{:else}<div class="rounded-sm border border-border-default divide-y"> {#if title} <div class="bg-background-default p-2">{title}</div> {/if} {#each notifications as n (n.uri)} <NotificationItem notification={n} /> {/each}</div>{/if}` } }};
const skelFile4: RepoDiffFile = { key: "src/routes/+page.svelte→src/routes/+page.svelte", name: "src/routes/+page.svelte", kind: "changed", stat: { insertions: 5, deletions: 2 }, lines: 10, sides: { lhs: { path: "src/routes/+page.svelte", oid: "7070707070707070707070707070707070707070", isBinary: false, isSubmodule: false, size: 200, content: `<TimelineViewfeed={feedState.feed}loading={feedState.loading}/>` }, rhs: { path: "src/routes/+page.svelte", oid: "8080808080808080808080808080808080808080", isBinary: false, isSubmodule: false, size: 340, content: `<TimelineViewfeed={feedState.feed}trending={feedState.trending}signedIn={feedState.signedIn}/>` } }};
const skelFile5: RepoDiffFile = { key: "src/lib/format.ts→src/lib/format.ts", name: "src/lib/format.ts", kind: "changed", stat: { insertions: 10, deletions: 1 }, lines: 16, sides: { lhs: { path: "src/lib/format.ts", oid: "9090909090909090909090909090909090909090", isBinary: false, isSubmodule: false, size: 280, content: `export const formatCount = (n: number): string => {if (n >= 1000) return (n / 1000).toFixed(1) + "k";return String(n);};` }, rhs: { path: "src/lib/format.ts", oid: "a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0", isBinary: false, isSubmodule: false, size: 580, content: `const formatter = new Intl.NumberFormat("en", { notation: "compact" });
export const formatCount = (n: number): string => {if (n < 1000) return String(n);return formatter.format(n);};
export const formatPercent = (ratio: number): string => {return (ratio * 100).toFixed(1) + "%";};` } }};
const skeletonFixtureFiles = [skelFile1, skelFile2, skelFile3, skelFile4, skelFile5];
const stat = (files: RepoDiffFile[]) => ({ insertions: files.reduce((n, f) => n + f.stat.insertions, 0), deletions: files.reduce((n, f) => n + f.stat.deletions, 0), files_changed: files.length});
export const skeletonDiff: RepoDiff = { files: skeletonFixtureFiles, stat: stat(skeletonFixtureFiles), contents: { inlineOld: false, oldRef: "old-ref", newRef: "new-ref" }};
const mixedFiles = [changed, added, deleted, renamed, binary, submodule];
export const diff: RepoDiff = { files: mixedFiles, stat: stat(mixedFiles), contents: { inlineOld: false, oldRef: "old-ref", newRef: "new-ref" }};
export const emptyDiff: RepoDiff = { files: [], stat: stat([]), contents: { inlineOld: false, oldRef: "old-ref", newRef: "new-ref" }};