v1.1.0: Add cancelled course, duplicate prevention, and credit bar ticks

- Mark "Managing Growing Companies" as cancelled with visual indicator and solver exclusion
- Prevent selecting duplicate courses across elective sets (e.g., same course in Spring and Summer)
- Add 2.5-credit interval tick marks to specialization progress bars
- Bump version to 1.1.0 with date display in UI header
This commit is contained in:
2026-03-13 16:11:56 -04:00
parent 5c598d1fc6
commit 8b887f7750
14 changed files with 156 additions and 39 deletions

View File

@@ -33,6 +33,12 @@ function CreditBar({ allocated, potential, threshold }: { allocated: number; pot
const allocPct = Math.min((allocated / maxWidth) * 100, 100);
const potentialPct = Math.min((potential / maxWidth) * 100, 100);
// Generate tick marks at 2.5 credit intervals
const ticks: number[] = [];
for (let t = 2.5; t < maxWidth; t += 2.5) {
ticks.push(t);
}
return (
<div style={{ position: 'relative', height: '6px', background: '#e5e7eb', borderRadius: '3px', marginTop: '4px' }}>
{potential > allocated && (
@@ -51,11 +57,22 @@ function CreditBar({ allocated, potential, threshold }: { allocated: number; pot
borderRadius: '3px', transition: 'width 300ms ease-out',
}}
/>
{/* Tick marks at 2.5 credit intervals — rendered above bar fills */}
{ticks.map((t) => (
<div
key={t}
style={{
position: 'absolute', left: `${(t / maxWidth) * 100}%`, top: 0,
width: '1px', height: '6px', background: 'rgba(0,0,0,0.2)',
zIndex: 1, transition: 'left 300ms ease-out',
}}
/>
))}
<div
style={{
position: 'absolute', left: `${(threshold / maxWidth) * 100}%`, top: '-2px',
width: '2px', height: '10px', background: '#666',
transition: 'left 300ms ease-out',
zIndex: 2, transition: 'left 300ms ease-out',
}}
/>
</div>