Decision card: presence faces and tooltips - #232
MaggieAppleton wants to merge 7 commits into
Conversation
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…lled by scroll Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
Review and fixes (pushed to this branch). Gap closed: faces now appear in real sessions. Tests. Unit: Review notes, no change needed. Tooltip is supplementary: the group's aria-label names everyone (including those behind +N) and faces keep img names; non-button tooltip targets are not focusable, which is acceptable as the information is not tooltip-only. Tokens/static class maps OK. Design-contract hashes renewed (no new dynamic data flow). Checks: fix, test (1745 pass), types, ci all green; e2e fixtures sidecar + responsive-decisions + collab: 41 passed after merging #231. Unrelated: |
Stacked on #231 (base
design/decision-card-restyle). Retarget tomainafter #231 merges.Summary
The
@handlepills in the decision card header become a face stack with design-system tooltips.QuestionViewgainsrenderPeople(people); without it the old pills still render. The editor host suppliesPresenceFaces: 24pxFace(ring="page"), overlapping by 0.375rem, deduped by handle (case-insensitive), max 3 then+N(--text-xs600 tertiary), centred on the 1.5rem mark row.IconTooltipnow works on any element withdata-tooltip(not only buttons);data-tooltip-verbatimskips capitalisation so handles keep their casing. Faces tooltip the handle,+Nlists the hidden handles, comma separated.Face: radius scales with size (18px and under--radius-sm, larger--radius-md), and a newtitled={false}prop suppresses the nativetitlewhere a tooltip is used (no DOM stripping).Decisions made
+N; the+Nitself is not a separate a11y node beyond its tooltip.+Ncounts unique hidden handles, not connections.size <= 18is small. Implemented as a static class map (FACE_RADIUS_CLASS) to avoid a new dynamic design-contract exception;sourceHashrenewed forface.tsx,question-view.tsx,questionnaire.tsx(no new dynamic data flow).tooltipText) is unit tested; hover/DOM behaviour is in Playwright sincebun testhas no DOM.question:presencewith a question (only clears it), so faces only appear when such frames arrive. The e2e injects peer presence frames throughrouteWebSocket. Wiring focus-to-presence is a separate change.Before / after (2x)
+NtooltipChecks
bun run fix,bun test(1741 pass, 2 skip, 0 fail),bun run types(exit 0),bun run ci(exit 0).--project=fixtures):sidecar.e2e.ts(38 passed, including the new face tooltip test), plusresponsive-decisions,collab,toolbar(40 passed in the combined run). Oneresponsive-decisions390x844 run showed a transient strict-mode duplicate card that did not reproduce on rerun.🤖 Generated with Claude Code