Skip to content

feat(ui): convert the chrome pictographs to dot-matrix glyphs (RIG-3739) - #1211

Merged
trunk-io[bot] merged 1 commit into
compass-ux/3738-activitybar-unionfrom
compass-ux/3739-chrome-glyphs
Sep 13, 2026
Merged

trunk-io[bot] merged 1 commit into
compass-ux/3738-activitybar-unionfrom
compass-ux/3739-chrome-glyphs

Conversation

@rigel-mintaka

@rigel-mintaka rigel-mintaka commented Sep 13, 2026

Copy link
Copy Markdown
Contributor

This PR is part of a stack containing 5 PRs:

  1. main
  2. feat(ui): add the dot-matrix Glyph primitive and its four chrome bitmaps (RIG-3736) #1194
  3. feat(ui): derive the activity-bar avatar initial through one owner (RIG-3737) #1199
  4. feat(ui): split ActivityBarItem into its glyph and avatar arms (RIG-3738) #1202
  5. "feat(ui): convert the chrome pictographs to dot-matrix glyphs (RIG-3739)" (this PR)
  6. feat(ui): finish the chrome glyph conversion (RIG-3739) #1219

T5a and T5b of the glyph work: every rendered pictographic character in
LeftSidebar, App, RightSidebar, and AgentView becomes a <Glyph>
bitmap. 18 new semantic names join the four the activity bar already used, for
22 total. Names describe the role, never the character — pin/pin-outline
for /, disclosure for the caret — so a later art change does not
falsify the name.

The two verdict-mark sites are the reason the record calls this out. <Glyph>
is aria-hidden, so a bare / that WAS the accessible name reads as
nothing once converted. Those wrappers now carry role="img" plus the verdict
word; RightSidebar.prpane.test.tsx covers all three verdicts and reddens if
either attribute is dropped (measured: 0 pass / 2 fail with the aria-label
removed, and again with the role).

FILE_ICON was a two-entry map of characters, one of which stays text (· is
in the brand face). Rather than widen its value type to GlyphName | string,
it becomes a FileIcon component switching on the closed FileNode["kind"]
union — no cast, no mixed map.

The audit table lands in components.md rather than the frozen design record,
which the ledger says is never edited past its Status: header. It records
every site's decorative-vs-name-bearing decision, and the two keeps (·, )
with the reason each is safe: both are present in the Space Mono cmap, verified
by parsing the font rather than by eye.

The eight drifted baselines are recaptured here, not deferred: the commit that
repaints the pixels owns its baseline, so every commit in the stack stays green
and a bisect means something. Verified the drift is the glyph swap and nothing
else — in bridge.png, changed pixels fall only in the left sidebar (x 0..255)
and the right activity bar (x 1216..1279), with EXACTLY ZERO in the content area
between them, so no text reflowed.

Verified: 1111 pass / 0 fail (up from 1109); compass-ui:typecheck,
stylelint, biome check, and markdownlint all clean. Reviewed; the a11y of
all ~20 converted sites was audited against the JSX individually.

@linear-code

linear-code Bot commented Sep 13, 2026

Copy link
Copy Markdown

RIG-3739

@rigel-mintaka
rigel-mintaka added this pull request to stack #1200 September 13, 2026 20:17
@rigel-mintaka
rigel-mintaka marked this pull request as ready for review September 13, 2026 20:17
@github-actions

github-actions Bot commented Sep 13, 2026

Copy link
Copy Markdown

Compass engineering docs preview: https://compass-ux-3739-chrome-glyph.compass-eng-docs.pages.dev

Deployed from compass-ux/3739-chrome-glyphs at 03ea891.

Changed pages:

@trunk-io

trunk-io Bot commented Sep 13, 2026

Copy link
Copy Markdown

😎 Stack merged successfully - details.

T5a and T5b of the glyph work: every rendered pictographic character in
`LeftSidebar`, `App`, `RightSidebar`, and `AgentView` becomes a `<Glyph>`
bitmap. 18 new semantic names join the four the activity bar already used, for
22 total. Names describe the role, never the character — `pin`/`pin-outline`
for `★`/`☆`, `disclosure` for the caret — so a later art change does not
falsify the name.

The two verdict-mark sites are the reason the record calls this out. `<Glyph>`
is `aria-hidden`, so a bare `✓`/`✗` that WAS the accessible name reads as
nothing once converted. Those wrappers now carry `role="img"` plus the verdict
word; `RightSidebar.prpane.test.tsx` covers all three verdicts and reddens if
either attribute is dropped (measured: 0 pass / 2 fail with the `aria-label`
removed, and again with the `role`).

`FILE_ICON` was a two-entry map of characters, one of which stays text (`·` is
in the brand face). Rather than widen its value type to `GlyphName | string`,
it becomes a `FileIcon` component switching on the closed `FileNode["kind"]`
union — no cast, no mixed map.

The audit table lands in `components.md` rather than the frozen design record,
which the ledger says is never edited past its `Status:` header. It records
every site's decorative-vs-name-bearing decision, and the two keeps (`·`, `−`)
with the reason each is safe: both are present in the Space Mono cmap, verified
by parsing the font rather than by eye.

The eight drifted baselines are recaptured here, not deferred: the commit that
repaints the pixels owns its baseline, so every commit in the stack stays green
and a bisect means something. Verified the drift is the glyph swap and nothing
else — in `bridge.png`, changed pixels fall only in the left sidebar (x 0..255)
and the right activity bar (x 1216..1279), with EXACTLY ZERO in the content area
between them, so no text reflowed.

Verified: 1111 pass / 0 fail (up from 1109); `compass-ui:typecheck`,
`stylelint`, `biome check`, and markdownlint all clean. Reviewed; the a11y of
all ~20 converted sites was audited against the JSX individually.
@rigel-mintaka
rigel-mintaka force-pushed the compass-ux/3739-chrome-glyphs branch from c3e2ada to 03ea891 Compare September 13, 2026 22:06
@trunk-io
trunk-io Bot merged commit 81aff4d into main Sep 13, 2026
18 of 28 checks passed
@trunk-io
trunk-io Bot deleted the compass-ux/3739-chrome-glyphs branch September 13, 2026 22:44
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.

2 participants