Sidebar:
- Add -webkit-user-select: none to section headers (WebKit prefix)
- Fix class mismatches: sidebar-section-chevron → section-chevron,
sidebar-section-count → section-count, sidebar-section-list → sidebar-list
Terminal resize:
- Poll container dimensions after creation — retry fit every 50ms
until container has non-zero width/height (up to 20 attempts)
- Add flex: 1 and min-height: 0 to .xterm inside session-panel
so it participates in flex layout correctly
.gitignore:
- Comprehensive rewrite covering build output, Wails bindings,
frontend libs, IDE files, OS metadata, and application data
Theme:
- Replace all purple/blue-tinted backgrounds (#1a1a2e, #1f1f35, etc.)
with true neutral charcoal greys (#1c1c1c, #232323, #2a2a2a, etc.)
- Neutralise text colours (remove blue tint from secondary/tertiary)
- Update xterm.js theme and session overlay to match
Terminal resize:
- Add fitSession(sessionId) method for targeted terminal fitting
- Fire fit at 30ms, 150ms, and 500ms after 'connected' state event
- Ensures terminal fills container even when layout settles late
- Add pencil edit button on each sidebar profile item (visible on hover)
- Fire fitAddon.fit() multiple times after terminal creation (50/150/400ms)
to catch the panel finishing its CSS layout
- Re-fit terminal when session:state transitions to 'connected'
Layout:
- Add panel-container and session-panel CSS so workspace content
doesn't overlap sidebar
- Session panels use position: absolute to fill workspace area
- Workspace is now flex column for proper empty-state/panel stacking
Terminal:
- xterm.js overrides now target .session-panel in addition to
.terminal-container so terminal fills available space
- Added debounced window resize handler for terminal re-fit
Notifications:
- Rewrote Notifications class to emit .notification-* classes matching
the existing polished CSS (was emitting .toast-* with no CSS)
- Icon is now a small coloured circle badge instead of oversized SVG
Sidebar:
- Fixed class mismatches: sidebar-dot → protocol-indicator,
sidebar-item-sub → sidebar-item-host, sidebar-star → sidebar-item-star
- protocolColour() now returns proto-ssh etc. matching CSS selectors
Other:
- Replaced prompt() in tab rename with custom _inputPrompt modal
- Change ConnectSession/ConnectQuick to return SessionInfo (not string)
- Change UpdateProfile to return (Profile, error) for frontend use
- Make session connection asynchronous to avoid Wails event loop deadlock
- Implement event-based secret prompt (backend ↔ frontend via requestID)
- Add TestConnection API for TCP reachability checks with latency
- Add 'Save & Connect' button in profile editor
- Wire _testConnection to real backend TCP check
- Add btn-accent CSS for the green action button
Add cursor: pointer and -webkit-user-select: none to form section
headers so WebKit does not initiate text selection on the first click,
which was swallowing the toggle interaction.
WebKit's WKWebView rejects top-level const/let declarations that shadow
global function names. Since utils.js defines functions like stateLabel()
at the global scope (non-module scripts), and later files destructure
the same names from window.NexusTerminal using const, WebKit throws:
SyntaxError: Can't create duplicate variable that shadows a global property
Fix: wrap every JS file in an IIFE so all declarations are function-scoped.
Also remove temporary diagnostic instrumentation.
Replace ES module import/export with a global namespace pattern to avoid
silent failures in the Wails v2 WKWebView which does not reliably support
<script type="module"> tags.
- Remove all import/export statements from JS files
- Register each module's exports on window.NexusTerminal
- Destructure dependencies from window.NexusTerminal at file top
- Load all scripts in dependency order in index.html as plain <script> tags
- Moved main.go from cmd/app/ to project root (Wails convention)
- Makefile now resolves wails binary via GOPATH/bin fallback
- Updated wails/v2 dependency from v2.9.2 to v2.12.0
- Fixed preferences round-trip bug (store as single JSON blob)
- Fixed import strategy test (needs non-empty profile data)
- embed.go: embed index.html + all:src directly instead of all:dist,
so `go build` works without a prior npm build step
- index.html: add missing xterm.css vendor stylesheet link
- build.js: add buildDist() to assemble dist/ with index.html and the
full src/ tree; update required-file paths to match dist/ layout
- Add placeholder xterm lib stubs in src/js/lib/ and src/css/lib/ so
the app can start before `npm install` is run
- .gitignore: stop ignoring the lib placeholder files so they are
available on a fresh clone