Source identity
| Field | Recorded value |
|---|---|
| Source type | GitHub source |
| Original record | Janady13/missionmatch / frontend/src/components/ui.tsx |
| Date | Not specified in source |
| Repository | Janady13/missionmatch |
| Revision | 720d47fae476b0d38477ae4401697d372b1ea2bc |
| Branch | feature/opportunity-to-outcome |
| Path or archive member | frontend/src/components/ui.tsx |
| Original SHA-256 | 9cf11b9c3328f7fb9f2e04e60986353df51a92ba3ab99a68727a63d6ca0d0360 |
| Git blob SHA | a430defa5877e36b36b0abf137aefb7f5bca9141 |
| Reading-copy SHA-256 | 9cf11b9c3328f7fb9f2e04e60986353df51a92ba3ab99a68727a63d6ca0d0360 |
Every recorded occurrence
These 35 records contain identical original source bytes. Their paths and revisions remain part of the archive.
| Original record | Branch or archive | Revision / identifier | Original location |
|---|---|---|---|
| Janady13/missionmatch / frontend/src/components/ui.tsx | feature/opportunity-to-outcome | 720d47fae476b0d38477ae4401697d372b1ea2bc | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | per-tenant-routing | 9bde0f9a74b89d01980fa658e5253acda7528d0c | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | collision-deconfliction | 4ee5a09972608ed89f8377c6665542d5f450f0a6 | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | ws6-retrieval | 6c56e29231ec05735927fa265c97d517499dfeaf | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | workstream-a-shared-core | e0de03ac3a1ec826bd15d0e048e3b02baa23eeff | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | m5-price-to-win | 41000ad30fff4129fdaf5ec84e15ba14c27d4890 | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | workstream-c-slatematch | 5cd60c918301b46ecd6ed3e03e20c395da0062e2 | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | ws1-ontology-sync | b596f449a32a1016fbd403c36505cc00a1ac9ee6 | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | master | 1e9249840a4302ec82e123b9c9cb6f75badea3e4 | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | ws8-teaching-loop | c823f0fb6bb2aba0f39001eb6de96f4000d9321f | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | w3-ai-staffing-recommendations | 43d56387270ef4da4cabd794d97ca6a49909bc7d | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | mag-substrate | b82c7100a492dec67dfd1eda6b3f53def859be35 | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | ws3-clearance | 4b8e7ce594c068621867f9c9deed0ec64ae6c553 | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | workstream-d-command-center | 255e7d1d420abf5e277d0cd8c9b14f6f72b6acb9 | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | phase2-eval-fairness | d361af254701975fe239927656ababb56374655e | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | workstream-e-dataflow-deploy | 433815a042f9741411e60fa553fe72143e9b10db | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | ruthless-debug-sweep | b7d742f8f032984be3817efffa3eb8b13b651c1f | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | time-to-fill-survival | b66e1e505863d4f17741a4b9ede73509e45bd6c6 | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | ai-intelligence-layer | 5d5ddff70393a197c5f54a45280bb5dd42b24755 | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | graphrag-foundation | b0ddeb9f633fd138d09309d1a17b7d13bc3a67f7 | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | workstream-a-opportunity-intelligence | 1675031db74316e100782d063e9eda1a597fe3a1 | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | deploy-and-ops | bdacd9d0b4d5998d25fc74bf4007f4c3ec538c7a | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | ws9-bench-ingestion | f585a9ef32fa554663ce1fba9a414a54b6e49cf0 | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | ws2-alias-relationship | e4dada4601c6eb101830f9d223a9655dfa120616 | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | presentation-readiness | eb574acaa29d71ce4d0f852572e87c275c79fdb7 | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | vendor-intelligence | fe9796a19c261951d3f2565206c0c1b5ac294465 | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | workstream-b-screenmatch | 09015496d565a172bcaa15cfe9a8e4b072b13df0 | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | ws7-federal-signal | 6a9f6ce9cfb13345ffb47770d4960e7c2d9c17c2 | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | workstream-e-commercial-stubs | 4437da660539284a400ee380b9b427a300c369ee | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | ai-brain-live | aac32fc49c878cc5bca099459307611562d0bac1 | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | workstream-d-missionmatch | 3be46ba89edb737182075a2b320509b42dc916f8 | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | phase2-connectors | e038d4c687aec16f8bd9bc4d907eea14d91f8704 | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | workstream-b-sam-contract-awards | d5101cceb98e70000cebb31d3e7ac73d747d3a6d | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | feature/aioe-upgrade | 2178e7298d0e5d9af83afa12402fd587f0ba6ed8 | Open original |
| Janady13/missionmatch / frontend/src/components/ui.tsx | capture-readiness | bae6af7cb2997e819174a9e9cfff5e16067a1975 | Open original |
Recovered source transcript
Download complete source text ↓190 lines · 5.2 KB
import { type ReactNode, useEffect } from 'react'
import { X } from 'lucide-react'
import { num } from '../lib/format'
// Modal is a dependency free overlay: a dimmed backdrop plus a centered, scrollable panel. Escape and a
// backdrop click close it. The body scroll is locked while it is open so a tall result does not jump.
export function Modal({
open,
onClose,
title,
children,
}: {
open: boolean
onClose: () => void
title: string
children: ReactNode
}) {
useEffect(() => {
if (!open) return
const onKey = (e: KeyboardEvent) => {
if (e.key === 'Escape') onClose()
}
document.addEventListener('keydown', onKey)
const prev = document.body.style.overflow
document.body.style.overflow = 'hidden'
return () => {
document.removeEventListener('keydown', onKey)
document.body.style.overflow = prev
}
}, [open, onClose])
if (!open) return null
return (
<div
className="fixed inset-0 z-50 grid place-items-start overflow-y-auto bg-black/60 p-4 backdrop-blur-sm sm:p-8"
onClick={onClose}
>
<div
className="mx-auto w-full max-w-3xl rounded-xl border border-line/70 bg-surface shadow-2xl"
onClick={(e) => e.stopPropagation()}
>
<header className="flex items-center justify-between border-b border-line/60 px-4 py-3">
<h3 className="text-sm font-bold">{title}</h3>
<button
onClick={onClose}
aria-label="Close"
className="grid size-7 place-items-center rounded-md text-muted hover:bg-navy-800 hover:text-ink"
>
<X size={16} />
</button>
</header>
<div className="p-4">{children}</div>
</div>
</div>
)
}
export function Panel({
children,
className = '',
title,
hint,
}: {
children: ReactNode
className?: string
title?: string
hint?: string
}) {
return (
<section
className={`rounded-xl border border-line/70 bg-surface/80 backdrop-blur-sm shadow-[0_1px_0_0_rgba(255,255,255,0.03)_inset] ${className}`}
>
{title && (
<header className="flex items-center justify-between px-4 pt-3.5 pb-2">
<h3 className="text-[11px] font-bold uppercase tracking-[0.14em] text-muted">{title}</h3>
{hint && <span className="text-[11px] text-faint">{hint}</span>}
</header>
)}
<div className={title ? 'px-4 pb-4' : 'p-4'}>{children}</div>
</section>
)
}
export function Bar({ value, color }: { value: number; color: string }) {
return (
<div className="h-2 w-full overflow-hidden rounded-full bg-navy-800">
<div
className="h-full rounded-full transition-[width] duration-700 ease-out"
style={{ width: `${Math.max(0, Math.min(100, value))}%`, background: color }}
/>
</div>
)
}
export function Badge({
children,
color,
subtle = false,
}: {
children: ReactNode
color: string
subtle?: boolean
}) {
return (
<span
className="inline-flex items-center gap-1.5 rounded-full px-2.5 py-1 text-[11px] font-semibold uppercase tracking-wide"
style={
subtle
? { color, background: `color-mix(in srgb, ${color} 14%, transparent)` }
: { color: '#06121f', background: color }
}
>
{children}
</span>
)
}
export function Dot({ color }: { color: string }) {
return <span className="inline-block size-2 rounded-full" style={{ background: color }} />
}
export function Stat({
label,
value,
accent,
icon,
}: {
label: string
value: ReactNode
accent?: string
icon?: ReactNode
}) {
return (
<Panel className="px-4 py-3.5">
<div className="flex items-center justify-between">
<span className="text-[11px] font-semibold uppercase tracking-wider text-muted">{label}</span>
{icon && <span style={{ color: accent ?? 'var(--color-blue-soft)' }}>{icon}</span>}
</div>
<div className="mt-1 text-3xl font-extrabold tabular-nums" style={{ color: accent }}>
{value}
</div>
</Panel>
)
}
// CheckRow renders a met (✓) / unmet (⚠) requirement line.
export function CheckRow({ ok, label }: { ok: boolean; label: string }) {
return (
<div className="flex items-center gap-2 text-sm">
<span
className="grid size-4 place-items-center rounded-full text-[10px] font-bold"
style={{
color: '#06121f',
background: ok ? 'var(--color-ok)' : 'var(--color-warn)',
}}
>
{ok ? '✓' : '!'}
</span>
<span className={ok ? 'text-ink' : 'text-warn'}>{label}</span>
</div>
)
}
export function ScoreRow({
name,
weight,
score,
color,
}: {
name: string
weight: string
score: string
color: string
}) {
return (
<div className="grid grid-cols-[1fr_auto] items-center gap-x-3 gap-y-1.5">
<div className="flex items-baseline justify-between">
<span className="text-sm text-ink">{name}</span>
<span className="text-[11px] text-faint">{Math.round(Number(weight) * 100)}%</span>
</div>
<span className="text-sm font-semibold tabular-nums" style={{ color }}>
{num(score).toFixed(0)}%
</span>
<div className="col-span-2 -mt-0.5">
<Bar value={num(score)} color={color} />
</div>
</div>
)
}