Repository navigation
feat(ui): consolidate the desktop design system - #138
Merged
Merged
Conversation
- Icon::Ellipsis, dropdown_menu, danger_menu_item, disabled_menu_item, and menu_separator for one reusable overflow menu - detail_header / detail_title / detail_body: one fixed, edge-to-edge ruled header for every detail card - list_section_label for group headings in list cards - baseline_offset puts smaller text on a larger line's baseline - MENU_WIDTH / MENU_OFFSET tokens; section labels inset to card text; pane_list centres its empty state
Meetings detail keeps Copy transcript and Rename visible and moves Copy summary, Reveal, Summarize/Regenerate, and Delete… into a … menu. Delete keeps its two-step confirmation in the action row; refusal rules are unchanged. Stop & transcribe is a Secondary button with a red dot and the elapsed time; the sidebar Update is Secondary with an accent dot. Polish: shared detail headers in Meetings, History, and Commands; timestamp and detail-row baselines; section labels on the card text edge; wider side segments; transcript labels on the bubble text; one menu width; Commands context moved into the detail; ... -> …; no closing period on one-phrase descriptions. Adds the --open-meeting-actions preview flag.
- History metadata rows sit directly in the detail body so values keep the full width (they collapsed to one character per line) - An armed meeting delete replaces the action row; actions wrap - Left / Either / Right selector width follows its segment widths - Ellipsis draws one icon size up to match the other glyphs optically
kitlangton
force-pushed
the
feat/design-system
branch
from
October 18, 2026 23:31
e673f73 to
4b7c627
Compare
kitlangton
marked this pull request as ready for review
October 18, 2026 23:59
Hona
added a commit
that referenced
this pull request
Oct 19, 2026
Hona
added a commit
that referenced
this pull request
Oct 19, 2026
Hona
added a commit
that referenced
this pull request
Oct 19, 2026
…e, and x64 + ARM64 release (#141) * feat: Windows beta with streaming dictation, Hold/Toggle shortcut mode, and release pipeline Ports the windows-shell branch onto main, adds a GPU streaming finish for Parakeet Unified English with a whole-clip fallback, a cross-platform Hold/Toggle shortcut mode, x64 and ARM64 Windows CI and release feeds, and the website Windows download. * copy: Enabled/Disabled status on Linux and in the shared Activity labels * ci: install SPIRV-Headers for the x64 Vulkan build and gate the Windows-only device query * refactor: one implementation per concept across macOS, Linux, and Windows The Windows port carried its own copies of modules main already has. Each concept now has one implementation: - UI: Windows uses main's design system (design_tokens, desktop_ui, text_input, desktop_transcription_picker types) instead of a Fluent copy. Windows-only bits are small cfg additions: Segoe Fluent Icons for Icon, Windows text-editing key bindings, fixed-height and read-only text inputs, and the shared slider_track component. windows_ui keeps the window chrome and the anchored dropdowns, now drawn with menu/menu_item. - Windows chrome: the sidebar runs the full window height as on macOS. The caption row is split: the brand sits over the sidebar, the window buttons over the content, and both halves stay OS drag regions. - Commands: Windows uses main's commands, command_grammar, context, keys, and personal_commands. The SDK provisioner accepts the embedded TypeScript src layout; Windows execute() opens URLs and paths with ShellExecuteW. - OpenCode: dictation_processor is the one client and ordered policy (corrections, rewrite, transformations) on macOS and Windows. Windows keeps its opencode2 api CLI transport in a cfg'd submodule; the ranked catalog, prompts, Voice Action generation, and the transformation stage are shared. - desktop_activity is shared; the Windows Settings contract is windows_desktop_host, without #[path] aliases. - self_update is the signed-feed core for both the Linux and Windows updaters. - Windows copy follows the design system: sentence case and "Hex". * chore(windows): flat app icon that stays crisp at taskbar sizes * chore: mark the Windows-only screens to consolidate with app_window after #138 * fix(linux): wait for partial X11 grabs to be released before reporting a conflict
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.
Why
The GPUI app had grown four visual dialects. Text came in 11 explicit sizes plus GPUI's inherited 16 px, so inputs and transcript bubbles looked like a different app. There were 7 button looks and 35 raw colour literals sitting beside 18 tokens. Section labels were in all caps, the product was called "HEX", and list cards overhung the header rule by 12 px. A
.truncate()row could clip mid-glyph or collapse to "…". Every new pane added another helper because nothing said which one to use.What Changes
Tokens:
src/design_tokens.rsis now the only place a raw colour, type size, line height, radius, or control height is written. The V2 surface colours are unchanged. The oldFAINT(#6e6e6e) text was below 4.5:1 on cards, so it merges intoTEXT_TERTIARY(#969696) and survives only asTEXT_DISABLED.Type scale: five steps, applied with
.text_caption()….text_title(). Each step sets its own line height, and the window frame setsBODY, so unsized text and inputs are 13 px.Components:
src/desktop_ui.rsnow has one button system:button/small_button/icon_button× Primary, Secondary, Ghost, Danger. Primary is the single accent fill, used for at most one action per screen, so the white meeting buttons are gone. There is also one non-interactivetag, plusmenu/menu_item,pane_list/pane_detail,error_panel,empty_state, andtruncated_line. Every superseded helper is deleted:header_button,canvas_button,compact_*,meeting_action_button,pane_list_card, and others.Geometry: one
PANE_GUTTERis shared by the header and the body, so cards line up with the header rule. Controls are 30 px (24 px small).Truncation:
truncated_lineshapes its text at paint time against its final width, so lines end in "…" instead of clipping or keeping a provisional width.Copy: sentence case everywhere ("Stop & transcribe", "Permissions needed", "Open settings"). The product is "Hex" in window titles, menus, and copy. Duplicate state words beside toggles are gone. Native macOS menus keep title case.
Icons: one
Iconset of line-weight SF Symbols at medium weight. No.fillnavigation symbols, no "×" or "+" text glyphs, and a globe instead of letter monograms for web pages.Meeting capsules: they use the shared tokens and buttons. The 2 px countdown bar and the "· 600s" suffix are removed. The 20 s timeout is unchanged.
Docs:
docs/design-system.mddocuments the tokens, which component does which job, the copy and icon rules, verification, and the full before → after audit. InAGENTS.md, the two desktop-UI invariants are replaced by a short mandatory pointer to it.design_tokens::tests::desktop_sources_use_tokens_instead_of_raw_stylesfails on raw colours, sizes, line heights, radii, or.truncate()in desktop sources.Behaviour, entry points, and debug selectors are unchanged. The dictation HUD is untouched.
Meetings actions and accent colour
…button. Its menu holds Copy summary, Reveal Markdown/files, and Summarize/Regenerate summary ("Summarizing…" is shown disabled while it runs), then Delete… in red after a separator. It's built from new shared pieces:dropdown_menu,danger_menu_item,disabled_menu_item,menu_separator, andIcon::Ellipsis. Delete… keeps its two-step confirmation: the Trash button and Cancel replace the action row until you pick one. Copy summary keeps the menu open so "Copied" stays visible. Visibility and refusal rules haven't changed: nothing is offered while a meeting is recording or transcribing, and Delete is hidden while notes are being written. New preview flag:--open-meeting-actions.docs/design-system.md(Rules 6–7, Colour) and in theAGENTS.mdpointer.Polish pass
detail_header(detail_title, meta, actions)over adetail_body. Each has the same insets and an edge-to-edge rule under the actions. History used an inset rule before, and Commands had none.px_4) in Settings, Voice Action, the setup sheet, and Modes. Before, they sat 4 px in from the card edge, which matched nothing.baseline_offset(LARGER, SMALLER)token puts the History timestamps on the title baseline (they sat about 3 px high) anddetail_rowlabels on the value baseline.list_section_labelis shared by Meetings and Commands. The first group in Commands used to start 8 px lower than the first group in Meetings.pane_listcentres its empty message vertically, like the detail placeholder beside it.MENU_WIDTHand oneMENU_OFFSETfor the history retention, microphone, mode context, and meeting menus. Before they used 148, 160, or 220 px with a literal 4 px offset.Ellipsisis drawn one size up so its dots look as heavy as the other glyphs.Demo
Release-build previews (
voice-control preview …) on a MacBook Pro. Before is main 1c3dacf. After is the head of this branch. The full contact sheet is at~/Library/Caches/hex-design/index.html.Verification
git diff --checkpass, and 59 targeted tests pass. New tests:meeting_overflow_menu_opens_beside_the_visible_actions,history_detail_rows_keep_their_values_on_one_line,detail_rows_fill_a_detail_body, andbaseline_offset_lowers_smaller_text_onto_the_larger_baseline. The existing tests still cover contrast, the raw-style guard, and truncation layout.linux_app.rslocally. Linux CI covers it.detail_bodya block. It's verified by a fresh capture.