setLayout(v as FieldLayout)}
aria-label="Field label layout"
options={[...LAYOUT_OPTIONS]}
/>
{layout === "top" ? (
Question stem
Shown to learners during delivery.
Program setNotifications(v === true)}
/>
Email coordinators when published
Review by
) : (
Title
Short text with persistent help.
Question stem
Label left, control right.
Program
Review by
MM/DD/YYYY
Question type
{PLAN_OPTIONS.map((opt) => (
{opt.label}
))}
Reference ID
Format: REF-####
Enter four digits after REF.
Owner
This value is managed by the workspace.
Created by
Read-only values remain selectable.
Notifications
Email when published
)}
)
}
export function FormRhfPreview({ className }: { className?: string }) {
const form = useForm<{ email: string; notes: string }>({
mode: "onBlur",
shouldFocusError: false,
defaultValues: { email: "", notes: "" },
})
const errorSummaryRef = React.useRef(null)
const focusedSubmitCountRef = React.useRef(0)
const [saved, setSaved] = React.useState(false)
const errors = Object.entries(form.formState.errors)
React.useEffect(() => {
const submitCount = form.formState.submitCount
if (submitCount > focusedSubmitCountRef.current) {
focusedSubmitCountRef.current = submitCount
if (errors.length > 0) errorSummaryRef.current?.focus()
}
}, [errors.length, form.formState.submitCount])
React.useEffect(() => {
const subscription = form.watch(() => setSaved(false))
return () => subscription.unsubscribe()
}, [form])
async function saveForm() {
setSaved(false)
await new Promise((resolve) => setTimeout(resolve, 600))
setSaved(true)
}
return (
)
}
/** Single vertical Field: label, control, help. */
export function FieldBasicPreview() {
return (
Site name
Shown on placement offers and site directories.
)
}
/** Invalid Field + aria-invalid control. */
export function FieldInvalidPreview() {
return (
Coordinator email
Enter a school email address.
Enter a valid school email address.
)
}
/** Disabled Field + disabled control. */
export function FieldDisabledPreview() {
return (
Program code
Unavailable while program data is syncing.
)
}
/** Read-only Field remains focusable and selectable. */
export function FieldReadOnlyPreview() {
return (
Program code
Assigned by the registrar.
)
}
export function FormHierarchyPreview() {
return (
)
}
export function FormInCardPreview() {
const [enabled, setEnabled] = React.useState(true)
return (
)
}
export function RichTextFormPreview() {
const form = useForm<{ description: string }>({
mode: "onBlur",
defaultValues: {
description:
"
Students complete supervised clinical experiences across approved partner sites.