/** * Step 3 — Policy profile picker. * * The 6 built-in profiles mirror policy/profiles.py. Selecting * one decides the runtime guardrails (consent gates, region * blocks, narration moderation). For the mature_gated profile we * surface an extra warning banner so authors can't pick it * accidentally. */ import React from "react"; import { ShieldAlert, ShieldCheck } from "lucide-react"; import type { WizardForm } from "../wizardState"; export interface Step3Props { form: WizardForm; setForm: (patch: Partial) => void; } interface ProfileOption { id: string; label: string; short: string; long: string; mature: boolean; } const PROFILES: ProfileOption[] = [ { id: "sfw_general", label: "SFW · General", short: "Safe for any audience.", long: "Default guardrails. No mature intents. No consent prompt.", mature: false }, { id: "sfw_education", label: "SFW · Education", short: "Tutorials and lessons.", long: "Adds curriculum-friendly tone defaults; same SFW gates.", mature: false }, { id: "language_learning", label: "Language learning", short: "Conversational practice.", long: "CEFR-aware progression; SFW gates with permissive tone presets.", mature: false }, { id: "enterprise_training", label: "Enterprise training", short: "Onboarding & compliance.", long: "Strict tone profile + audit-friendly events. Region block enforced.", mature: false }, { id: "social_romantic", label: "Social / Romantic", short: "Mood-aware companions.", long: "Allows flirty / affectionate intents. Universal-block intents stay blocked.", mature: false }, { id: "mature_gated", label: "Mature (gated)", short: "Adults only — explicit consent required.", long: "Enables mature narration intents. REQUIRES consent + region check.", mature: true }, ]; export function Step3Policy({ form, setForm }: Step3Props) { const selected = PROFILES.find((p) => p.id === form.policy_profile_id); return (
{PROFILES.map((p) => { const isSelected = form.policy_profile_id === p.id; return ( ); })}
{selected && (
{selected.label}. {selected.long}
)}
); } /** Always valid — every option is a known profile. */ export function step3Valid(_f: WizardForm): boolean { return true; }