Taste skill UI ux update#21
Merged
Merged
Conversation
Retint Bootstrap's dark tokens to one cool palette + accent, refine navbar, buttons, forms, focus rings, and honor prefers-reduced-motion. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
All panels except Home/Help now slide in as a right-side drawer so the 3D scene stays visible and interactive while operating on it. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Neutralize responsive column wrappers inside drawers and rebuild the per-layer selection into tidy rows with aligned Hide/Labels toggles. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Restructure into a hero header, figure + readable intro grid, quick-start action cards, and a de-emphasized citation block. Fix drawer specificity so Home/Help render full-width. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Replace the light-on-dark tab strip with accent pill tabs and restyle headings, code blocks, images, and links to match the dark chrome. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Turn the bare "waiting" hint into a centered empty-state card, restyle the navigation-controls headings/dividers and Recenter button, and replace the raw-red node-description close button with a themed control. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Auto-collapse the mobile navbar menu after picking a tab so the chosen panel isn't buried, and pad drawers to clear the fixed footer bar. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…liders Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
navControlButtonsDiv shared #info's z-index, so #info's top edge clipped the bottom of the "Navigation Controls" button when both overlapped by a few px. Give the buttons a higher z-index so they always render above the panel below them. #info also carried pointer-events: none unconditionally (meant only for the pre-load hint state), so its own scrollbar swallowed no clicks and drags fell through to the canvas, dragging the scene instead of scrolling. Pointer-events: none now applies only while #info holds no table (the hint state); once the controls table is present the panel is fully interactive. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
interLayerEdgesRenderPauseButton's label never actually reflected ctx.interLayerEdgesRenderPauseFlag (a stub noted in edge.ts). It now swaps a bars/play icon + label in sync with the flag on every click. displayCanvasControlsButton gets a chevron that flips between open and closed state instead of a static label with no visual affordance. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Action-panel drawers (File/Layouts/Scene/.../Data) could only be dismissed by navigating back to Main View through the navbar tabs. Add a small chevron handle docked to the drawer's left seam: '>' collapses the open drawer to the canvas, '<' reopens the last one that was open. Derives the active pane from the shown.bs.tab event's own data-bs-target rather than querying '.tab-pane.show': Bootstrap fires that event as soon as the (unanimated) nav button activates, before the pane's own fade transition adds its 'show' class, so a DOM query at that instant could still match the pane being deactivated. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
getRandomArbitrary drew from Math.random(), so every Load Example or upload scattered nodes to a different layout. Back it with a seeded mulberry32 PRNG and re-seed at the start of scrambleNodes with a fixed seed (123, mirroring the backend's random.seed(123)), so the same network always produces the same layout. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
After a network upload, Load Example, or session import succeeds, switch to the empty Main View pane so the drawer closes and the 3D scene is revealed without a manual tab change. The panelDrawerToggle picks up the change through its existing shown.bs.tab listener and shows the closed state. On error the drawer stays open so the message is visible. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Buttons attach top-right on first network load and dispatch ChangeThemeCommand, so theme switches are undoable. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
applyTheme set layer colors via repaintLayers(theme.floor) but never updated the #floor_color input, which is the source of truth on the picker priority path. Hover-exit repaint (repaintLayers() / Layer.getColor()) read the stale input and reverted layers to the dark default. Restore the v2 behaviour of writing the theme floor into #floor_color. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Arena3Dweb — Frontend UI/UX Redesign (taste-skill)
Design read: Redesign-preserve of a scientific 3D-network visualization
tool for bioinformatics researchers. Dark "instrument" canvas app built on
Bootstrap 5 + Vite/TypeScript/Three.js. Direction: cohesive dark instrument
panel, single cool-blue accent, restrained motion, strong hierarchy — without
touching any backend contract, route, data flow, or feature.
Approach followed the token-saviour + ponytail path: kept Bootstrap and
retinted its dark tokens instead of ripping the framework out or rewriting to
React. Most changes are CSS + small, surgical markup edits. One feature per
commit, no push.
Summary of improvements
Unified design foundation. Retinted Bootstrap's dark theme to one cool
palette + accent so every
.btn/.form-control/.nav/.tableinherits the system. Refined navbar (frosted, active-tab pill), buttons
(accent fill, tactile
:activepress), inputs (focus ring),:focus-visiblerings, and a global
prefers-reduced-motionguard.Side-drawer panels (key UX fix). Action panels used to overlay the whole
3D scene. They now slide in as a right-side drawer (
min(440px, 94vw), widerfor the data table) so the scene stays visible and interactive while you
operate on it. Only Home and Help remain full-width, per the explicit
constraint. Drawer has a slide-in animation (reduced-motion aware).
Panel content fits the drawer. Neutralized the now-pointless responsive
column wrappers inside drawers, and rebuilt the cramped per-layer checkbox
group into tidy bordered rows with a truncating layer name and aligned
Hide / Labels toggles.
Home panel redesign. Hero header with tagline, a figure + readable-measure
intro grid, two quick-start action cards (Upload / Examples), and a
de-emphasized citation block. Collapses to one column on mobile.
Help panel themed. Replaced the light-on-dark tab strip with accent pill
tabs; restyled headings, code blocks, images, and links for the dark chrome
and a comfortable reading measure.
Scene overlays + empty state. The bare "waiting for network" line is now a
centered empty-state card. Restyled the navigation-controls headings and
dividers, gave the Recenter button an accent treatment, and replaced the
raw-red node-description close button with a themed control.
Responsive behavior. The mobile navbar menu now auto-collapses after a tab
is picked (so the chosen panel isn't left buried under an open menu), and
drawers pad their bottom to clear the fixed footer. Verified at desktop
(1440), tablet (820), and mobile (390).
Files changed
frontend/src/style.cssfrontend/index.htmlfrontend/src/ui/home.tsfrontend/src/ui/layouts.tsfrontend/src/event_listeners.tsNo backend files, API endpoints, request/response shapes, routes, or auth logic
were touched.
Validation commands run
npx tsc --noEmit— clean (after each change)npm run lint(eslint) — cleannpx vitest run— 106 passed (15 files)npx playwright test— 1 passed (existingnetwork-flowE2E)Playwright flows tested (baseline + post-change screenshots)
applied", scene re-renders)
Known limitations / follow-ups
unavoidable at that width; the desktop/tablet constraint (don't cover the
scene) is fully met.
but not re-laid-out; a future pass could card-ify the longer help spec tables.
original PNGs — left as-is to avoid asset churn; could become inline SVG later
for crispness on HiDPI.