The PairEditor ref callback used strict equality to determine when all
rows were ready, but placeholder params (like :id) regenerate fresh IDs
on every keystroke, causing rowsRef to accumulate entries. Using >=
allows the ref to be set even when there are more registered rows than
current pairs.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Move active tab persistence into Tabs component with storageKey + activeTabKey props
- Change value prop to defaultValue so callers don't manage tab state
- Add TabsRef with setActiveTab method for programmatic tab switching
- Restore request_pane.focus_tab listener for :param placeholder clicks
- Update all Tab consumers to use new pattern
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Separate selected item from panel open state (closing panel keeps selection)
- Scroll selected item into view when detail panel opens
- Enter/Space opens detail panel, Escape closes it
- Remove browser focus outline on scroll container
- Add prefix prop to EventDetailHeader for labels
- Make timestamp optional in EventViewerRow
- Add close button to EventDetailHeader
- Fix title truncation with min-w-0
- Consolidate HttpResponseTimeline title generation
- Add ID/event labels to SSE detail header
- Remove fake timestamp from SSE events
Closes https://feedback.yaak.app/p/feedback-on-sse-viewer-ux-in-yaak
- Add getCookieCounts function to parse cookie headers and count
individual cookies (not just headers)
- Deduplicates by cookie name using Sets
- Display as sent/received format like Headers tab
- Add showZero to CountBadge so 0/3 displays properly
- Add tests for getCookieCounts
The nested menu PR introduced an early return null when !isOpen,
which prevented MenuItemHotKey components from being rendered.
Fixed by extracting hotKeyElements and rendering them even when
the menu is closed.
Two issues fixed:
1. Initialize stateExtensions with empty object {} instead of undefined.
When called with no argument, the schema state was undefined, causing
jsonCompletion() to return [] instead of a proper result object, which
CodeMirror's autocomplete didn't handle correctly.
2. Change editorView from useRef to useState so the effect that calls
updateSchema() properly re-runs when the editor view is set. With useRef,
the effect could run before the editor was mounted or with a stale
reference when the editor was recreated.
- Change from data.buffer to new Uint8Array(data) to fix ArrayBufferLike type compatibility with Blob constructor
- Fixes TS2322 errors about SharedArrayBuffer not being assignable to BlobPart