"use client" import { Check, Copy, ShieldCheck, TriangleAlert } from "lucide-react" import { useState } from "react" import { trackOnboardingEvent } from "@/lib/onboarding-events" import { formatProjectIntakeStarterRequest, projectIntakeStarterTemplates, type ProjectIntakeStarterTemplate, } from "@/lib/project-intake-starter-templates" type CopyState = "idle" | "copied" | "unavailable" export function ProjectIntakeTemplateBuilder() { const [selected, setSelected] = useState(null) const [copyState, setCopyState] = useState("idle") function selectTemplate(starter: ProjectIntakeStarterTemplate) { setSelected(starter) setCopyState("idle") trackOnboardingEvent("onboarding_project_intake_template_selected", { template_kind: starter.key }) } async function copyRequest() { if (!selected) return try { if (!navigator.clipboard?.writeText) throw new Error("Clipboard API is unavailable") await navigator.clipboard.writeText(formatProjectIntakeStarterRequest(selected)) setCopyState("copied") trackOnboardingEvent("onboarding_project_intake_template_copied", { template_kind: selected.key }) window.setTimeout(() => setCopyState("idle"), 2200) } catch { setCopyState("unavailable") } } return (
Choose a no-sensitive-data starter policy

Each sample is valid for preview_project_intake, has no approved media paths, and requests a preview only. A policy owner must review and replace its bins, media rules, and checks before real use.

{projectIntakeStarterTemplates.map((starter) => { const isSelected = selected?.key === starter.key return ( ) })}
{selected ? (
{formatProjectIntakeStarterRequest(selected)}
{copyState === "unavailable" ? (

) : null}
) : null}
) }