Skip to content

fix: webview layout, input contrast, and error-status visibility - #27

Merged
slverma merged 8 commits into
mainfrom
fix/webview-ui-issues
Sep 13, 2026
Merged

slverma merged 8 commits into
mainfrom
fix/webview-ui-issues

Conversation

@slverma

@slverma slverma commented Sep 13, 2026

Copy link
Copy Markdown
Owner

Summary

  • Fix the Request editor keeping stale collection config (base URL, headers, env vars) after a request or an ancestor folder is moved elsewhere — an open panel was still pinned to the folder it was opened with.
  • Redesign the environment "active" indicator: it read as a radio button and gave no in-list feedback; now a plain tick icon plus an "Active" badge, and the first environment created for a collection auto-activates.
  • Restructure Headers/Params/Cookies/Form-data rows (and the Environment Variables table) into a deterministic two-column layout — checkbox+name | value+buttons — that collapses to a single column via a container query on a narrow panel, with a divider between consecutive rows.
  • Fix the {{variable}} autocomplete popup rendering behind a later sibling section — it lived inside a position: relative fieldset's own stacking context, so z-index couldn't save it; now portaled to <body> like the header-suggestion dropdown already was.
  • Fix zero vertical padding on auto-growing textareas (Headers/Params/Form-data), which left text flush against the field border with no breathing room.
  • Give real input/textarea/select controls (URL bar, method selector, row fields, Auth fields, JSON body editor) the theme's --vscode-input-border instead of a low-contrast panel/glass-border token, so field boundaries are identifiable; buttons, cards, and menus are untouched.
  • Make 4xx/5xx response status badges a solid red with white text instead of a ~20%-opacity tint, so an error response can't be mistaken for a successful one just because it still returned a body.

Test plan

  • Open a request, move it (or its folder) to a different collection while the panel stays open, confirm base URL/headers/active environment refresh to the destination collection
  • Create multiple environments in a collection; confirm only the first auto-activates
  • Toggle a variable / header / param checkbox; confirm a native tick renders
  • Shrink the Request editor and Collection/Folder settings panels; confirm Headers/Params/Cookies/Form-data/Env-var rows collapse to one column and stay usable
  • Type {{ near a field close to a section boundary (e.g. Base URL, just above Headers); confirm the suggestion popup isn't clipped
  • Send a request that returns 404 or 500; confirm the status badge is solid red and clearly distinct from a 200
  • npx tsc --noEmit passes

🤖 Generated with Claude Code

slverma and others added 8 commits September 13, 2026 14:15
Moving a request (or an ancestor folder) via the sidebar left any open
request-editor panel pinned to the folderId it was opened with, so it
kept using the old collection's base URL, headers, and environment
instead of the destination's. Track the panel's current folder
separately and push a refresh whenever it moves.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- The "set active" toggle was a plain circle that only changed fill
  color (read as a radio button, gave no feedback in the list itself).
  Replace it with an icon-only tick that's colored when active and
  only hinted on hover otherwise, plus an explicit "Active" badge in
  the list row.
- The first environment created for a collection is now made active
  automatically; later ones leave the current active environment
  alone.
- Restructure the variables table into the same two-column
  (checkbox+key | value+delete) row layout used elsewhere, collapsing
  to one column on a narrow panel via a container query.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Headers/Query Parameters rows in the settings editor were cramped on
  a narrow panel: the key/value fields (and their checkbox/delete
  button) shrank together instead of ever wrapping, and a plain
  <input> sibling next to a wrapped AutocompleteInput/EnvVarInput
  never sized evenly with it since the wrapper div, not the class on
  the inner textarea, is the actual flex item. Restructure each row
  into two explicit column-groups (checkbox+name | value+delete) that
  collapse to a single column via a container query.
- The `{{variable}}` completion popup rendered inside a fieldset with
  `position: relative`, which creates its own stacking context — a
  later sibling fieldset (e.g. "Headers") painted over the popup
  regardless of its z-index. Portal it to <body> with a live computed
  position instead, matching how AutocompleteInput already avoids this.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Headers/Params/Cookies/Form Data rows were cramped and never wrapped
  on a narrow panel, for the same reasons as the Collection/Folder
  settings equivalent: no min-width/wrap on the flex row, and a plain
  <input> next to a wrapped AutocompleteInput/VarInput never sized
  evenly with it since the wrapper div is the real flex item, not the
  class on the inner textarea. Restructure each row into two explicit
  column-groups (checkbox+name | value+buttons) that collapse to a
  single column via a container query.
- .header-key/.header-value/.form-data-key/.form-data-value had zero
  vertical padding, which is invisible on a native <input> (browsers
  auto-center it) but leaves an auto-growing <textarea> flush against
  its own border since textareas don't auto-center. Give them real
  vertical padding.
- The `{{variable}}` completion popup rendered inside a fieldset with
  `position: relative`, creating its own stacking context — a later
  sibling fieldset (e.g. the Auth tab's) painted over the popup
  regardless of z-index. Portal it to <body> with a live computed
  position instead, matching AutocompleteInput's existing approach.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Text fields, selects, and the JSON body editor were bordered with
either --vscode-panel-border (meant for subtle panel/divider lines)
or a decorative ~8%-opacity "glass" token, both chosen for soft card
edges rather than field affordance — making it hard to tell where an
editable box starts and ends. Use the theme's dedicated
--vscode-input-border where available, falling back to the previous
value on themes that don't define it, so there's no regression.

Left buttons, card/fieldset containers, and dropdown menus on their
existing borders — this is scoped to controls a user actually types
into (URL bar, method select, header/param/cookie/form-data rows,
Auth fields, content-type select, JSON editor).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Headers/Params/Cookies/Form-data rows, and the Environment Variables
table, put a subtle border-right on the name column (checkbox+key)
rather than on either field's own box, so it reads as a row divider
sitting in the column gap instead of a third competing border. Removed
again by the same container query that collapses each row to a single
stacked column on a narrow panel, since a vertical divider makes no
sense once the columns aren't side by side.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The vertical divider between key/value columns (previous commit)
wasn't actually what was wanted — a horizontal line between
consecutive rows helps identify each key/value pair, including once a
row's value wraps to multiple lines or the row stacks into a single
column on a narrow panel, neither of which a vertical column divider
addresses.

Applied to Headers/Params/Cookies/Form-data rows and the Environment
Variables table (as a border-bottom with no divider after the last
row in each list). Left Collection/Folder settings' Headers/Params
rows alone — those already have their own full box border per row.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
A 404 (or any error) response still returns a body, and the only
signal it wasn't a success was a status badge styled as a soft ~20%
opacity tint — similar enough to the success/redirect badges next to
it that it was easy to read the returned body as normal data and miss
the status entirely.

Client and server error statuses (and the network-error fallback) now
share one solid red badge with white text and a red glow, instead of
color-only differentiation between amber (4xx) and muted red (5xx).
Applied in both request/styles.css and history/styles.css since the
history components are shared between the standalone History view and
the Request editor's own History tab, each with its own bundled CSS.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@slverma
slverma merged commit 3951e14 into main Sep 13, 2026
1 check passed
slverma pushed a commit that referenced this pull request Sep 13, 2026
## <small>1.9.1 (2026-09-13)</small>

* fix: webview layout, input contrast, and error-status visibility (#27) ([3951e14](3951e14)), closes [#27](#27)
* chore: add graphify knowledge graph output (#26) ([b56e785](b56e785)), closes [#26](#26)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant