| Filename | Latest commit message | Latest commit date |
|---|---|---|
argus's review (reproduced, not speculative): .ui-table-scroll sets overflow-x: auto with overflow-y left unset. Per the CSS overflow spec, an axis left visible computes to auto too once the other axis isn't visible -- so this box silently clips vertically as well as horizontally. The popover was position: absolute; top: 100% under its header <th>, itself inside .ui-table-scroll -- on a table shorter than header-plus-popover (a small hive's roster, or any table narrowed by an existing filter), the popover got cut off at the scroll box's own bottom edge, with a stray vertical scrollbar as the visible symptom. Computes the popover's viewport position from the anchor <th>'s own getBoundingClientRect() and renders it via a portal onto document.body, position: fixed -- escapes .ui-table-scroll's clip the same way any position: fixed element escapes an ancestor's overflow (neither .ui-table-scroll nor .ui-table establishes a new containing block). Recomputes on scroll (capture-phase window listener, the standard technique for detecting scroll on a nested scroll container without binding to every ancestor by hand) and resize while open, so the popover stays anchored rather than only positioning once at click time. createPortal comes from preact/compat, already resolvable through the existing preact dependency -- no new package.json entry. Verified against argus's own repro shape: a 1-row table, scripted click on the filter icon (same real-DOM-event technique as this PR's first round), screenshot shows the popover rendering fully rather than clipped, no stray scrollbar. |
||
| .. | ||
| packages | ||
| .gitignore | ||
| npm-deps-hash | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
hyperhive frontend
npm workspaces project for the hyperhive browser-facing assets:
packages/shared/— shared modules used by both surfaces (terminal pane, Catppuccin palette + body typography).packages/dashboard/— the hive-c0re dashboard SPA.packages/agent/— the per-container web UI (default agent page, stats, screen).
Build
npm install # one-off; uses the checked-in package-lock.json
npm run build # builds every workspace into packages/*/dist/
The Rust binaries serve packages/dashboard/dist/ and
packages/agent/dist/ via tower_http::ServeDir at runtime; the
build derivation is wired up in nix/packages/frontend.nix. Per-agent
additions are layered on top of the default agent dist via the
hyperhive.frontend.extraFiles option in agent.nix.
Why npm + esbuild
- Hermetic: dependencies vendored via the checked-in lockfile;
buildNpmPackagein nix uses it as the source-of-truth so the output is reproducible without network access at build time. - esbuild: vanilla-JS bundler, no framework runtime overhead.
Each workspace's
build.mjsis ~30 lines. - Single-PR migration: see issue #273 for the design proposal and the four-commit shape (npm scaffold → nix derivations → container plumbing → Rust cutover).