Files
Void-Homelab/public/components/topbar.js
root 59ad86425d feat(ui): static shell + router + api wrapper
Three-column grid (sidebar / main / right rail) with Cradle aesthetic:
blackflame accent on Cinzel display headings + Cormorant Garamond body
in cards, system UI for chrome. Hash-based router covers all entity
routes plus search, inbox, sacred-valley. api.js stores OWNER_TOKEN in
localStorage and prompts via a modal on 401. dom.js provides safe el()
+ mount() builders so no component ever assigns innerHTML from API data
(the only exception is an explicit, scary-named html: opt-in for
sanitizer output, used later by the markdown editor).

state.js is a tiny event bus for shared chrome state (pending count).
Components and views are loaded as ES modules — sidebar / topbar /
rightrail + 9 view stubs that the later Phase E tasks fill in.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-01 02:12:18 +10:00

21 lines
581 B
JavaScript

// T17 stub — full implementation lands in T18.
import { el, mount } from '../dom.js';
import { navigate } from '../router.js';
export function renderTopbar(root) {
const search = el('input', {
type: 'text',
placeholder: 'Search …',
onkeydown: (e) => {
if (e.key === 'Enter' && e.target.value.trim()) {
navigate('/search?q=' + encodeURIComponent(e.target.value.trim()));
}
}
});
mount(root,
el('div', { class: 'brand' }, 'VOID'),
el('div', { class: 'topbar-search' }, search),
el('div', { class: 'topbar-spacer' })
);
}