Skip to content

Interactive affordance vocabulary + Info-pane header & world-switch polish - #82

Merged
thalida merged 10 commits into
mainfrom
feat/issue-78-affordance
Jun 27, 2026
Merged

Interactive affordance vocabulary + Info-pane header & world-switch polish#82
thalida merged 10 commits into
mainfrom
feat/issue-78-affordance

Conversation

@thalida

@thalida thalida commented Jun 27, 2026

Copy link
Copy Markdown
Owner

Closes #78.

#78 — interactive elements now read as interactive

A token-driven affordance vocabulary, applied through the existing styles/ kit (no bespoke per-component styles):

  • Links.link (prose/markdown: accent + always underlined, AA-safe) and .link--chrome (repo URL / SHA: accent + underline on hover). The three hand-rolled baselines (.almanac-meta a, .almanac-sha-link, .info-markdown a) collapse onto these; the shared underline color is the new --cc-accent-light-border token.
  • Tabs.pane-tab becomes an underline strip; the duplicate .modal-tabs styling is deleted and the source picker reuses PaneTabs. One tab component, compatible with Reorganize Settings pane onto PaneTabs subtabs #69's Settings subtabs.
  • Focus — one global :focus-visible ring (styles/focus.css) covering every button, link, tab, and row. Closes the keyboard gap (coordinates with Accessibility audit #79).
  • Text buttons — breadcrumb non-leaf segments underline on hover (leaf stays static).
  • Contrast (AA) — verified every interactive resting color; the one real failure (inactive tab label = 4.45:1 on the modal surface) was fixed by bumping .pane-tab rest from --cc-text-faint to --cc-text-muted (6.08:1). Links land at 10:1+, the active-tab underline at 7:1.

Beyond #78 — Info-pane header & world-switch UX (requested in review)

Grouped in their own commits so the affordance work stays separable:

  • Info pane headerPane gains a headerSlot; the close × is extracted to a shared <PaneCloseButton>. Info drops its "Info" title row and renders the Overview/Readme tabs as the header itself, reclaiming a row of vertical space. Tabs sit flush-left with internal label padding.
  • World-switch reactions (keyed on CURRENT_SOURCE, so in-place refreshes don't trigger them): reset the picker → right sidebar closes + tree highlight clears (it previously carried a stale node into the new world); expand the left sidebar; reset the Info subtab to Overview.
  • Activity bar — dropped the top padding so the first icon sits flush.

Verification

Verified visually in the running app (just dev) with mouse + keyboard across every audited surface, plus just lint and just test (2373 passing).

thalida added 10 commits June 26, 2026 21:15
Unifies the two tab patterns. Part of #78, keeps #69 compatible.
text-faint is 4.45:1 on the modal surface; text-muted is 6.08:1. Part of #78, coordinates with #79.
First tab sits flush with the content edge; each tab gets horizontal
padding so the underline runs wider than the label. PaneTabs accepts a
`class` pass-through; the source picker uses `pane-tabs--modal` for the
gap above its form. Part of #78.
Pane gains a `headerSlot` that replaces the default title bar; the close
button is extracted to a shared <PaneCloseButton>. Info drops its "Info"
title row and renders the Overview/Readme tabs as the header, reclaiming a
row of vertical space. Also resets the subtab to Overview on world switch
(InfoPane stays mounted, so its subtab would otherwise persist).
On each world commit (keyed on CURRENT_SOURCE): reset the picker selection
so the right sidebar closes and the tree highlight clears (it previously
carried a stale node into the new world), and expand the left sidebar
alongside the existing open-to-Info reset. Also drops the activity bar's
top padding so the first icon sits flush.
@thalida thalida linked an issue Jun 27, 2026 that may be closed by this pull request
@thalida
thalida merged commit 4220a78 into main Jun 27, 2026
1 check passed
@thalida
thalida deleted the feat/issue-78-affordance branch June 27, 2026 04:41
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.

Interactive elements don't read as interactive (links, buttons, tabs)

1 participant