diff --git a/nostr/commit-signatures.jsonl b/nostr/commit-signatures.jsonl index 23235a2..1257ae4 100644 --- a/nostr/commit-signatures.jsonl +++ b/nostr/commit-signatures.jsonl @@ -100,3 +100,4 @@ {"kind":1640,"pubkey":"573634b648634cbad10f2451776089ea21090d9407f715e83c577b4611ae6edc","created_at":1772110337,"tags":[["author","Silberengel","silberengel7@protonmail.com"],["message","refactor 4"]],"content":"Signed commit: refactor 4","id":"d330d1a096e5f3951e8b2a66160a23c5ac28aa94313ecd0948c7e50baa60bdbb","sig":"febf4088cca3f7223f55ab300ed7fdb7b333c03d2534b05721dfaf9d9284f4599b385ba54379890fa6b846aed02d656a5e45429a6dd571dddbb997be6d8159b2"} {"kind":1640,"pubkey":"573634b648634cbad10f2451776089ea21090d9407f715e83c577b4611ae6edc","created_at":1772111536,"tags":[["author","Silberengel","silberengel7@protonmail.com"],["message","refactor 5"]],"content":"Signed commit: refactor 5","id":"47651ed0aee8072f356fbac30b6168f2c985bcca392f9ed7d7c38d9670d90f16","sig":"2ca5d04d4a619dc3e02962249f7c650e3a561315897b329f4493e87148c5dd89fbcb6694515a72d0d17e64c9930e57bd7761e27b353275bb1ada9449330f4e1c"} {"kind":1640,"pubkey":"573634b648634cbad10f2451776089ea21090d9407f715e83c577b4611ae6edc","created_at":1772112054,"tags":[["author","Silberengel","silberengel7@protonmail.com"],["message","refactor 6"]],"content":"Signed commit: refactor 6","id":"cd9b7e015ee3bd6a4c4ab7d54d90ab411a08c29f249158c4cdea2b12996b6b44","sig":"2a8fd0a3718169df1517c0b939ec9ea9793da4dc07b20d9366f09fe70b5268e94451916f975e2cea1a3741419440189d31f844e79863e84de00c0be7c449e92a"} +{"kind":1640,"pubkey":"573634b648634cbad10f2451776089ea21090d9407f715e83c577b4611ae6edc","created_at":1772112920,"tags":[["author","Silberengel","silberengel7@protonmail.com"],["message","refactor 7"]],"content":"Signed commit: refactor 7","id":"80f54ac61390cfbc8f2496a162d7065c447033a2e085ab5886c8138e337e93f9","sig":"f64bd2c965eff3534ad68e245651c189dc925d9613dd85557d88af8c692361ade13ccdd9deb88ae07eb227aa002af99d525a7fdf6f29eca854b5a02882ef226f"} diff --git a/src/app.css b/src/app.css index 3dfd118..e19172c 100644 --- a/src/app.css +++ b/src/app.css @@ -1221,7 +1221,6 @@ button.theme-option.active img.theme-icon-option, .repo-badge:hover { background: var(--bg-secondary); border-color: var(--accent); - transform: translateY(-1px); box-shadow: 0 2px 4px var(--shadow-color-light); font-size: 0.9rem; /* Preserve font size on hover */ color: var(--text-primary); diff --git a/src/lib/components/PRDetail.svelte b/src/lib/components/PRDetail.svelte index 9b11531..dfc15c8 100644 --- a/src/lib/components/PRDetail.svelte +++ b/src/lib/components/PRDetail.svelte @@ -10,7 +10,16 @@ import { KIND } from '../types/nostr.js'; import { nip19 } from 'nostr-tools'; import CommentRenderer from './CommentRenderer.svelte'; - import type { Comment } from './CommentRenderer.svelte'; + // Define Comment type locally to match CommentRenderer's export + type Comment = { + id: string; + content: string; + author: string; + createdAt: number; + kind: number; + pubkey: string; + replies?: Comment[]; + }; import { loadNostrLinks } from '../utils/nostr-links.js'; import type { NostrEvent } from '../types/nostr.js'; @@ -129,12 +138,14 @@ await loadNostrLinks(comment.content, nostrClient, nostrLinkEvents, nostrLinkProfiles); } for (const highlight of highlights) { - if (highlight.comment) { + if (highlight.comment && typeof highlight.comment === 'string') { await loadNostrLinks(highlight.comment, nostrClient, nostrLinkEvents, nostrLinkProfiles); } if (highlight.comments) { for (const comment of highlight.comments) { - await loadNostrLinks(comment.content, nostrClient, nostrLinkEvents, nostrLinkProfiles); + if (comment.content && typeof comment.content === 'string') { + await loadNostrLinks(comment.content, nostrClient, nostrLinkEvents, nostrLinkProfiles); + } } } } @@ -734,7 +745,7 @@ margin-bottom: 1rem; } - .add-comment-btn, .reply-btn { + .add-comment-btn { padding: 0.4rem 0.8rem; background: var(--button-primary); color: var(--accent-text, #ffffff); @@ -746,11 +757,11 @@ transition: background 0.2s ease; } - .add-comment-btn:hover, .reply-btn:hover { + .add-comment-btn:hover { background: var(--button-primary-hover); } - .highlight-item, .comment-item { + .highlight-item { margin-bottom: 1.5rem; padding: 1rem; background: var(--bg-secondary); @@ -758,22 +769,7 @@ border-left: 3px solid var(--accent); } - .comment-item.nested { - margin-left: 2rem; - margin-top: 0.75rem; - border-left-color: var(--success-text); - background: var(--bg-secondary); - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08); - } - - .comment-item.nested .comment-content { - border-left-color: var(--success-text); - background: var(--card-bg); - margin: 0.5rem 0; - padding: 0.875rem 1rem; - } - - .highlight-header, .comment-header { + .highlight-header { display: flex; gap: 1rem; margin-bottom: 0.5rem; @@ -781,7 +777,7 @@ color: var(--text-muted); } - .highlight-author, .comment-author { + .highlight-author { font-weight: bold; color: var(--text-primary); } @@ -844,17 +840,6 @@ filter: brightness(0) saturate(100%) invert(1); } - .comment-content { - margin: 0.75rem 0; - padding: 1rem 1.25rem; - background: var(--bg-secondary); - border-radius: 6px; - border-left: 4px solid var(--accent); - color: var(--text-primary); - font-size: 1rem; - line-height: 1.6; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); - } .highlight-comments { margin-top: 1rem; @@ -1004,32 +989,6 @@ background: var(--success-hover, #218838); } - .close-btn { - background: var(--error-text, #dc3545); - color: white; - } - - .close-btn:hover:not(:disabled) { - background: var(--error-hover, #c82333); - } - - .reopen-btn { - background: var(--accent, #007bff); - color: white; - } - - .reopen-btn:hover:not(:disabled) { - background: var(--accent-hover, #0056b3); - } - - .draft-btn { - background: var(--bg-tertiary, #6c757d); - color: white; - } - - .draft-btn:hover:not(:disabled) { - background: var(--bg-secondary, #5a6268); - } @media (max-width: 768px) { .pr-actions { diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 64145e4..9b81d0d 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -290,7 +290,7 @@ } async function checkPendingTransfers(userPubkeyHex: string) { - if (!isMounted) return; + if (!isMounted || typeof window === 'undefined') return; try { // Add timeout to prevent hanging @@ -313,14 +313,29 @@ pendingTransfers = data.pendingTransfers.filter( (t: { eventId: string }) => !dismissedTransfers.has(t.eventId) ); + } else if (isMounted) { + // Clear transfers if response is ok but no transfers + pendingTransfers = []; } + } else if (response.status === 404 && isMounted) { + // Endpoint doesn't exist - silently ignore + pendingTransfers = []; } } catch (err) { - // Only log if it's not an abort (timeout) and component is still mounted - if (isMounted && err instanceof Error && err.name !== 'AbortError') { - console.error('Failed to check for pending transfers:', err); + // Only log if it's not an abort (timeout), not a network error, and component is still mounted + if (isMounted && err instanceof Error) { + // Ignore expected errors + if (err.name === 'AbortError') { + // Timeout - silently ignore + return; + } + if (err.name === 'TypeError' && err.message.includes('NetworkError')) { + // Network error (server not available, CORS, etc.) - silently ignore + return; + } + // Log other unexpected errors + console.warn('Failed to check for pending transfers:', err); } - // Silently ignore timeouts - they're expected if the server is slow } } diff --git a/src/routes/api-docs/+page.svelte b/src/routes/api-docs/+page.svelte index 88a4e09..f28bca8 100644 --- a/src/routes/api-docs/+page.svelte +++ b/src/routes/api-docs/+page.svelte @@ -1,28 +1,47 @@ @@ -2414,7 +1911,7 @@
- {#if state.clone.isCloned === true} + {#if state.clone.isCloned === true && $page.data?.gitDomain && !$page.data.gitDomain.startsWith('localhost') && !$page.data.gitDomain.startsWith('127.0.0.1')}