Browse Source

fix nav bar responsiveness

main
Silberengel 4 weeks ago
parent
commit
143eb337da
  1. 20
      src/app.css
  2. 29
      src/lib/components/NavBar.svelte
  3. 19
      src/lib/components/UserBadge.svelte
  4. 18
      src/routes/search/+page.svelte

20
src/app.css

@ -361,8 +361,18 @@ input:disabled, textarea:disabled, select:disabled {
flex: 1; flex: 1;
} }
.search-input, .search-type-select { .search-input {
flex: 1; width: 100%;
padding: 0.75rem;
font-size: 1rem;
border: 1px solid var(--input-border);
border-radius: 4px;
background: var(--input-bg);
color: var(--text-primary);
font-family: 'IBM Plex Serif', serif;
}
.search-type-select {
padding: 0.75rem; padding: 0.75rem;
font-size: 1rem; font-size: 1rem;
border: 1px solid var(--input-border); border: 1px solid var(--input-border);
@ -647,8 +657,14 @@ pre code {
/* Search form */ /* Search form */
.search-form { .search-form {
display: flex; display: flex;
flex-direction: column;
gap: 1rem; gap: 1rem;
margin-bottom: 2rem; margin-bottom: 2rem;
}
.search-controls {
display: flex;
gap: 1rem;
align-items: center; align-items: center;
} }

29
src/lib/components/NavBar.svelte

@ -59,9 +59,6 @@
<img src="/GR_logo.png" alt="GitRepublic Logo" class="main-logo" /> <img src="/GR_logo.png" alt="GitRepublic Logo" class="main-logo" />
<h1>gitrepublic</h1> <h1>gitrepublic</h1>
</a> </a>
<button class="mobile-menu-toggle" onclick={toggleMobileMenu} aria-label="Toggle menu">
<span class="hamburger-icon"></span>
</button>
<nav class:mobile-open={mobileMenuOpen}> <nav class:mobile-open={mobileMenuOpen}>
<div class="nav-links"> <div class="nav-links">
<a href="/" class:active={isActive('/') && $page.url.pathname === '/'} onclick={closeMobileMenu}>Repositories</a> <a href="/" class:active={isActive('/') && $page.url.pathname === '/'} onclick={closeMobileMenu}>Repositories</a>
@ -80,6 +77,9 @@
{isNIP07Available() ? 'Login' : 'NIP-07 Not Available'} {isNIP07Available() ? 'Login' : 'NIP-07 Not Available'}
</button> </button>
{/if} {/if}
<button class="mobile-menu-toggle" onclick={toggleMobileMenu} aria-label="Toggle menu">
<span class="hamburger-icon"></span>
</button>
</div> </div>
</div> </div>
</header> </header>
@ -207,9 +207,17 @@
/* Mobile responsive styles */ /* Mobile responsive styles */
@media (max-width: 768px) { @media (max-width: 768px) {
.header-container { .header-container {
display: flex;
flex-wrap: wrap; flex-wrap: wrap;
padding: 1rem; padding: 1rem;
gap: 1rem; gap: 1rem;
justify-content: space-between;
align-items: center;
}
.header-logo {
flex-shrink: 0;
order: 1;
} }
.header-logo h1 { .header-logo h1 {
@ -223,18 +231,18 @@
.mobile-menu-toggle { .mobile-menu-toggle {
display: block; display: block;
order: 2;
margin-left: auto;
} }
nav { nav {
order: 3; order: 3;
width: 100%; flex: none !important;
width: 100% !important;
max-height: 0; max-height: 0;
overflow: hidden; overflow: hidden;
transition: max-height 0.3s ease; transition: max-height 0.3s ease;
flex-direction: column; flex-direction: column;
align-items: stretch; align-items: stretch;
margin-top: 0;
} }
nav.mobile-open { nav.mobile-open {
@ -271,10 +279,13 @@
} }
.auth-section { .auth-section {
order: 1; order: 2;
width: auto; display: flex !important;
flex-wrap: wrap; align-items: center;
gap: 0.5rem; gap: 0.5rem;
flex-shrink: 0;
margin-left: auto !important;
justify-content: flex-end;
} }
.auth-section button { .auth-section button {

19
src/lib/components/UserBadge.svelte

@ -57,6 +57,12 @@
return `${pubkey.slice(0, 8)}...${pubkey.slice(-4)}`; return `${pubkey.slice(0, 8)}...${pubkey.slice(-4)}`;
} }
} }
function truncateHandle(handle: string | undefined): string {
if (!handle) return getShortNpub();
if (handle.length <= 20) return handle;
return handle.slice(0, 20) + '...';
}
</script> </script>
<div class="user-badge"> <div class="user-badge">
@ -65,7 +71,7 @@
{:else} {:else}
<img src="/favicon.png" alt="Profile" class="user-badge-avatar user-badge-avatar-fallback" /> <img src="/favicon.png" alt="Profile" class="user-badge-avatar user-badge-avatar-fallback" />
{/if} {/if}
<span class="user-badge-name">{userProfile?.name || getShortNpub()}</span> <span class="user-badge-name">{truncateHandle(userProfile?.name)}</span>
</div> </div>
<style> <style>
@ -104,4 +110,15 @@
font-weight: 500; font-weight: 500;
white-space: nowrap; white-space: nowrap;
} }
/* Hide name on narrow screens, show only picture */
@media (max-width: 768px) {
.user-badge-name {
display: none;
}
.user-badge {
padding: 0.25rem;
}
}
</style> </style>

18
src/routes/search/+page.svelte

@ -55,14 +55,16 @@
placeholder="Search repositories or code..." placeholder="Search repositories or code..."
class="search-input" class="search-input"
/> />
<select bind:value={searchType} class="search-type-select"> <div class="search-controls">
<option value="repos">Repositories</option> <select bind:value={searchType} class="search-type-select">
<option value="code">Code</option> <option value="repos">Repositories</option>
<option value="all">All</option> <option value="code">Code</option>
</select> <option value="all">All</option>
<button type="submit" disabled={loading || !query.trim()} class="search-button"> </select>
{loading ? 'Searching...' : 'Search'} <button type="submit" disabled={loading || !query.trim()} class="search-button">
</button> {loading ? 'Searching...' : 'Search'}
</button>
</div>
</form> </form>
{#if error} {#if error}

Loading…
Cancel
Save