diff --git a/nostr/commit-signatures.jsonl b/nostr/commit-signatures.jsonl
index 49cf3dd..66e1d7b 100644
--- a/nostr/commit-signatures.jsonl
+++ b/nostr/commit-signatures.jsonl
@@ -40,3 +40,4 @@
{"kind":1640,"pubkey":"573634b648634cbad10f2451776089ea21090d9407f715e83c577b4611ae6edc","created_at":1771668002,"tags":[["author","Silberengel","silberengel7@protonmail.com"],["message","finish profile page"]],"content":"Signed commit: finish profile page","id":"8a5aed2f8ac370f781dca9db96ade991c18b7cc3b0d27149d9e2741e8276f16f","sig":"16e9a9242f7c22dab8e37fd9d618419b4d51d7c0156f52c1289e275d2528312f4006696473c6836b5a661425fe0412fe54127291fb9b0d14777f93c8228cffb0"}
{"kind":1640,"pubkey":"573634b648634cbad10f2451776089ea21090d9407f715e83c577b4611ae6edc","created_at":1771669826,"tags":[["author","Silberengel","silberengel7@protonmail.com"],["message","user badge is a universal hyperlink to the profile page"]],"content":"Signed commit: user badge is a universal hyperlink to the profile page","id":"973a406714e586037d81cca323024ff5e2cc1fbaeda8846f6f2994c3829c4fe0","sig":"e7a58526a3786fc1b9ab1f957c87c13a42d3c2cc95effcf4ce4f4710e01ecc45fcff3ca542c5fa223961d7b99fe336a2851c133aebe3bfc1a591ffe1c34b221a"}
{"kind":1640,"pubkey":"573634b648634cbad10f2451776089ea21090d9407f715e83c577b4611ae6edc","created_at":1771680916,"tags":[["author","Silberengel","silberengel7@protonmail.com"],["message","fix profile feeds"]],"content":"Signed commit: fix profile feeds","id":"33f33d76f6c79e68fdab72c8fdfc7e1f0ecc53a879a7f5aef02481f17384a06f","sig":"8f9056eab081d66edb693eb35a2e400368aa897746b97ca40a216604dc14ee877eb7f4f16dd2eeac257025b3adfe82e23734c7c106b6cec5e8a1ca661c872cc5"}
+{"kind":1640,"pubkey":"573634b648634cbad10f2451776089ea21090d9407f715e83c577b4611ae6edc","created_at":1771681068,"tags":[["author","Silberengel","silberengel7@protonmail.com"],["message","remove landing page search bar"]],"content":"Signed commit: remove landing page search bar","id":"71087b100ce14a1f2eb975be23450c62143ee11a8fd0429ec7440bfea1751741","sig":"695c704503ed1397f6871770ad55822a17a503bcfb71a0db7b3f2477cacb0e767b9f122075b0216f884e41e175c0ac9f9e3d743086a2aa34db4aa1207c900703"}
diff --git a/src/lib/components/NostrLinkRenderer.svelte b/src/lib/components/NostrLinkRenderer.svelte
new file mode 100644
index 0000000..955ce14
--- /dev/null
+++ b/src/lib/components/NostrLinkRenderer.svelte
@@ -0,0 +1,267 @@
+
+
+{#each parts as part}
+ {#if part.type === 'text'}
+ {part.value}
+ {:else if part.type === 'event' && part.event}
+
+
+
+ {part.event.content}
+
+
+ {:else if part.type === 'profile' && part.pubkey}
+
+ {:else if part.type === 'placeholder'}
+ {part.value}
+ {/if}
+{/each}
+
+
diff --git a/src/lib/components/RepoHeader.svelte b/src/lib/components/RepoHeader.svelte
new file mode 100644
index 0000000..1972f6e
--- /dev/null
+++ b/src/lib/components/RepoHeader.svelte
@@ -0,0 +1,312 @@
+
+
+
+
+
diff --git a/src/lib/components/RepoHeaderEnhanced.svelte b/src/lib/components/RepoHeaderEnhanced.svelte
new file mode 100644
index 0000000..a28526d
--- /dev/null
+++ b/src/lib/components/RepoHeaderEnhanced.svelte
@@ -0,0 +1,569 @@
+
+
+
+
+
diff --git a/src/lib/components/RepoTabs.svelte b/src/lib/components/RepoTabs.svelte
new file mode 100644
index 0000000..87063c3
--- /dev/null
+++ b/src/lib/components/RepoTabs.svelte
@@ -0,0 +1,219 @@
+
+
+
+
+
diff --git a/src/routes/repos/[npub]/[repo]/+page.svelte b/src/routes/repos/[npub]/[repo]/+page.svelte
index 724d11f..9e27f56 100644
--- a/src/routes/repos/[npub]/[repo]/+page.svelte
+++ b/src/routes/repos/[npub]/[repo]/+page.svelte
@@ -6,6 +6,9 @@
import PRDetail from '$lib/components/PRDetail.svelte';
import UserBadge from '$lib/components/UserBadge.svelte';
import EventCopyButton from '$lib/components/EventCopyButton.svelte';
+ import RepoHeaderEnhanced from '$lib/components/RepoHeaderEnhanced.svelte';
+ import RepoTabs from '$lib/components/RepoTabs.svelte';
+ import NostrLinkRenderer from '$lib/components/NostrLinkRenderer.svelte';
import { getPublicKeyWithNIP07, isNIP07Available, signEventWithNIP07 } from '$lib/services/nostr/nip07-signer.js';
import { NostrClient } from '$lib/services/nostr/nostr-client.js';
import { DEFAULT_NOSTR_RELAYS, DEFAULT_NOSTR_SEARCH_RELAYS, combineRelays } from '$lib/config.js';
@@ -682,6 +685,9 @@
let repoImage = $state(null);
let repoBanner = $state(null);
+ // Repository owner pubkey (decoded from npub)
+ let repoOwnerPubkey = $state(null);
+
// Mobile view toggle for file list/file viewer
let showFileListOnMobile = $state(true);
@@ -1754,17 +1760,17 @@
try {
const decoded = nip19.decode(npub);
if (decoded.type === 'npub') {
- const repoOwnerPubkey = decoded.data as string;
+ repoOwnerPubkey = decoded.data as string;
repoAddress = `${KIND.REPO_ANNOUNCEMENT}:${repoOwnerPubkey}:${repo}`;
}
} catch (err) {
console.warn('Failed to decode npub for bookmark address:', err);
}
- // Close menu when clicking outside
+ // Close menu when clicking outside (handled by RepoHeaderEnhanced component)
function handleClickOutside(event: MouseEvent) {
const target = event.target as HTMLElement;
- if (showRepoMenu && !target.closest('.repo-menu-container')) {
+ if (showRepoMenu && !target.closest('.repo-header')) {
showRepoMenu = false;
}
}
@@ -2833,6 +2839,15 @@
}
}
+ function handleBranchChangeDirect(branch: string) {
+ currentBranch = branch;
+ // Create a synthetic event for the existing handler
+ const syntheticEvent = {
+ target: { value: branch }
+ } as unknown as Event;
+ handleBranchChange(syntheticEvent);
+ }
+
async function handleBranchChange(event: Event) {
const target = event.target as HTMLSelectElement;
currentBranch = target.value;
@@ -3590,205 +3605,110 @@