Console + machines papercuts: tooltips, required fields, unique names, detail footer - #220
Merged
Conversation
- Copy action: replace the bookmark-style double-rect SVG with a shared
CopyGlyph line icon (MessageMeta, ChatTranscript, line-glyph story).
- Status labels: color-code by tone across surfaces that dropped it —
console detail page header + section cards (via a shared StatusMeta),
connect wizards, messenger identity links, chat reasoning panel,
desktop HUD, shell status bar (powerTone), and the minimized chat pill.
- Tile: selected selector dot uses a purple `accent` tone (was orange),
and a hover tooltip (DS Hint) explains the dot's meaning — caller text
("Select MAC" / object status) with a tone-word fallback.
Browser/extension targets rendered a bookmark glyph on every surface except the step-1 platform tile, because `chrome` exists only as a doticon and the glyph-based surfaces fell back to "bookmark". Point them at the chrome doticon via Icon's existing "doticons/" routing (no new asset). Fixes the machines list, detail header, and the machine provision flow's action bar (step 2 DETAILS), preview row, and success screen.
Add an optional labelInfo prop to ListRow that renders a portaled Hint "?" after the row label, wired through ConsoleDetailRow/detailRow. Set it on the machine detail's LAST SEEN row to explain the field means the last connect/disconnect, not a live check. Uses the portaled Hint (not InfoTip) so the bubble escapes the row's overflow:hidden clipping.
…holders are no longer defaults
… left, others right)
…le tooltip comment
Collaborator
Author
|
@codex review |
|
Codex Review: Didn't find any major issues. Delightful! Reviewed commit: ℹ️ About Codex in GitHubCodex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback". |
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.
Console + machines papercuts: tooltips that don't get clipped, forms that don't lie about their state, and a consistent detail-page action footer.
Tooltips
Hintinstead of the in-DOMInfoTipbubble, so they escape anyoverflow:hiddenancestor (this was clipping the LAST SEEN and connect-flow tooltips).InfoTipwas rewritten internally to wrapHint+ thehelpIconButton, keeping its API andgsv-infotipspacing — so every consumer (TextInput, Toggle, Select, TextArea, Checkbox, Radio, Counter, Segmented, Slider) is fixed in one place.(?)tooltip on LAST SEEN, browser target uses the Chrome icon (not a bookmark), copy glyph, status colors, tile tooltip.Forms: placeholders aren't defaults, required means required
TextInput/TextAreanow enforcerequirement="required": an empty required field surfaces aREQUIREDerror on blur (or via a newforceValidateprop). A caller-suppliedstatusstill wins, so existing hand-rolled validation is unaffected.Mac workstation/mac-workstation,Linux machine/linux-machine, …) and the user must type them. Genuine defaults (gitref: main,subdir: ., token expiry30) are kept.Uniqueness on create (all object types)
isNameTaken(existing, candidate)helper (trim + case-insensitive). Wired into create flows so you can't create an object whose identity already exists — gateway stays authoritative, this is an inline pre-check:reservedNamesprop onAgentEditor.Detail-page action footer
Verification
tsc --noEmitclean;277/277unit tests pass (one unrelated pre-existingChatTranscript.test.tsDOMPurify-mock failure, untouched here)./designcatalog: InfoTip bubble portals to<body>; required TextInput showsREQUIREDon blur-while-empty and clears on type; detail-template footer renders destructive-left / actions-right.