From 51ef5d890b63f92f534bb97b7c0b506aa2fd06d7 Mon Sep 17 00:00:00 2001 From: waterWang Date: Mon, 10 Aug 2026 10:54:06 +0800 Subject: [PATCH] feat(outcomechip): add contextual help popover for first-time users Adds optional helpContent prop to OutcomeChip that renders a MechanicHelp popover with contextual information about the outcome metric/field. - New helpContent prop accepts MechanicHelpContent (type from MechanicHelp) - Help icon embedded in the chip with stopPropagation to prevent onSelect - Responsive: uses MechanicHelp's built-in desktop popover + mobile drawer - WCAG 2.1 AA: help button has aria-label, keyboard accessible - New tests: help button renders/omits, stopPropagation on click Closes #751 --- src/pages/OutcomeChip.tsx | 37 ++++++++++++++++++++++++ src/pages/__tests__/OutcomeChip.test.tsx | 36 +++++++++++++++++++++++ 2 files changed, 73 insertions(+) diff --git a/src/pages/OutcomeChip.tsx b/src/pages/OutcomeChip.tsx index e1415f33..3ffd4fcc 100644 --- a/src/pages/OutcomeChip.tsx +++ b/src/pages/OutcomeChip.tsx @@ -1,5 +1,7 @@ import * as React from "react"; +import type { MechanicHelpContent } from "@/components/patterns/MechanicHelp"; +import { MechanicHelp } from "@/components/patterns/MechanicHelp"; /** * OutcomeChip @@ -36,6 +38,12 @@ export interface OutcomeChipProps { onSelect?: () => void; /** Optional additional className for layout composition */ className?: string; + /** + * Optional contextual help content. When provided, a help icon + popover + * is rendered next to the chip label, helping first-time users understand + * the outcome metric/field. + */ + helpContent?: MechanicHelpContent; } const variantTokenMap: Record = { @@ -67,6 +75,7 @@ export const OutcomeChip: React.FC = ({ disabled = false, onSelect, className = "", + helpContent, }) => { const tokens = variantTokenMap[variant]; @@ -111,6 +120,11 @@ export const OutcomeChip: React.FC = ({ > {label} {badge ? {badge} : null} + {helpContent ? ( + e.stopPropagation()}> + + + ) : null}