refactor(compare): row-label help uses InfoPopover, not native title
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,24 @@
|
|||||||
|
import { render, screen } from '@testing-library/react';
|
||||||
|
import userEvent from '@testing-library/user-event';
|
||||||
|
import { RowLabel } from '@/components/compare/sectionShared';
|
||||||
|
|
||||||
|
describe('RowLabel', () => {
|
||||||
|
it('renders its label text', () => {
|
||||||
|
render(<RowLabel>Attainment 8</RowLabel>);
|
||||||
|
expect(screen.getByText('Attainment 8')).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('shows no help affordance when no tip is given', () => {
|
||||||
|
render(<RowLabel>Attainment 8</RowLabel>);
|
||||||
|
expect(screen.queryByRole('button')).not.toBeInTheDocument();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('opens the tip in a popover on click', async () => {
|
||||||
|
const user = userEvent.setup();
|
||||||
|
render(<RowLabel tip="Average GCSE score across 8 subjects">Attainment 8</RowLabel>);
|
||||||
|
await user.click(screen.getByRole('button'));
|
||||||
|
expect(await screen.findByRole('tooltip')).toHaveTextContent(
|
||||||
|
'Average GCSE score across 8 subjects',
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -132,20 +132,6 @@
|
|||||||
color: var(--text-secondary);
|
color: var(--text-secondary);
|
||||||
}
|
}
|
||||||
|
|
||||||
.help {
|
|
||||||
display: inline-flex;
|
|
||||||
width: 15px;
|
|
||||||
height: 15px;
|
|
||||||
border-radius: 50%;
|
|
||||||
border: 1px solid var(--text-muted);
|
|
||||||
color: var(--text-muted);
|
|
||||||
font-size: 0.65rem;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
cursor: help;
|
|
||||||
flex: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.badge {
|
.badge {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import type { CSSProperties, ReactNode } from 'react';
|
|||||||
|
|
||||||
import type { School } from '@/lib/types';
|
import type { School } from '@/lib/types';
|
||||||
import { CHART_COLORS, CHART_TEXT_COLORS, shortName } from '@/lib/utils';
|
import { CHART_COLORS, CHART_TEXT_COLORS, shortName } from '@/lib/utils';
|
||||||
|
import { InfoPopover } from '@/components/InfoPopover';
|
||||||
import styles from './compareSections.module.css';
|
import styles from './compareSections.module.css';
|
||||||
|
|
||||||
export function Section({
|
export function Section({
|
||||||
@@ -52,11 +53,7 @@ export function RowLabel({ children, tip }: { children: ReactNode; tip?: string
|
|||||||
return (
|
return (
|
||||||
<div className={styles.rowLabel}>
|
<div className={styles.rowLabel}>
|
||||||
{children}
|
{children}
|
||||||
{tip && (
|
{tip && <InfoPopover plain={tip} />}
|
||||||
<span className={styles.help} title={tip} aria-label={tip}>
|
|
||||||
?
|
|
||||||
</span>
|
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user