/** * [INPUT]: 依赖 ./Tag 的 StatusPill * [OUTPUT]: 对外提供 VerifyShell(第三方人机验证的常驻外围壳)与 VERIFY_STATES(通过/冷却/限流三态文案) * [POS]: src/extracted 的安全模式,1:1 提炼自 edu AdmDesign「06」样张(.08/.12 细线与 9px/54px 为样张原值)。 * 真实 iframe 由 Cloudflare Turnstile / 阿里云验证码渲染在 children 位置;外壳负责「始终可见 + 三种反馈态」, * 不让第三方控件的出现/消失把表单顶得跳动 * [PROTOCOL]: 变更时更新此头部,然后检查 CLAUDE.md */ import { StatusPill } from './Tag' const MONO = "ui-monospace,'SF Mono',Menlo,monospace" export const VERIFY_STATES = { ok: { tone: 'ok', text: '验证通过 · 可发送' }, cooldown: { tone: 'neutral', text: '冷却中 · 60s' }, limited: { tone: 'danger', text: '请求过多 · 暂时拦截' }, } export function VerifyShell({ title = '第三方安全验证 · 始终可见外围壳', provider = 'CLOUDFLARE\nTURNSTILE', states = ['ok', 'cooldown', 'limited'], children }) { return (
{title}
{children ?? ( <> 正在进行人机验证… {provider} )}
{states.length ? (
{states.map((k) => {VERIFY_STATES[k].text})}
) : null}
) }