{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "sign-up-form", "title": "Sign-up Form", "description": "A sign-up form worked example (Card + Field + Input + Button) wired with NSWDS components. Copy-and-adapt block — not a published component.", "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json", "https://ui.digital.nsw.gov.au/registry/r/button.json", "https://ui.digital.nsw.gov.au/registry/r/card.json", "https://ui.digital.nsw.gov.au/registry/r/field.json", "https://ui.digital.nsw.gov.au/registry/r/input.json", "https://ui.digital.nsw.gov.au/registry/r/labeled-separator.json", "https://ui.digital.nsw.gov.au/registry/r/link.json", "https://ui.digital.nsw.gov.au/registry/r/icons.json" ], "files": [ { "path": "src/patterns/sign-up-form.tsx", "content": "'use client'\n\nimport type * as React from 'react'\n\nimport { Button } from '@/components/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/card'\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldLegend,\n FieldSet,\n} from '@/components/field'\nimport { Input } from '@/components/input'\nimport { LabeledSeparator } from '@/components/labeled-separator'\nimport { Link } from '@/components/link'\nimport { IconLogin } from '@/icons/login'\nimport { IconPersonAdd } from '@/icons/person-add'\nimport { cn } from '@/lib/utils'\n\n/**\n * SignUpForm — the account-creation counterpart to LoginForm.\n *\n * A composed pattern (Card + Field + Input + Button), published as a worked\n * example: copy the source and wire the fields to your own registration\n * handler rather than configuring it through props.\n *\n * Best-practice notes baked in:\n * - Single sign-on (Microsoft Entra ID) leads as the recommended path with\n * solid emphasis; email + password registration is the fallback, grouped\n * in a FieldSet whose legend names the set for assistive tech.\n * - `autoComplete=\"new-password\"` on both the password and confirm-password\n * fields tells password managers to offer/save a generated password (vs.\n * the `current-password` hint LoginForm uses).\n * - A visible password-requirements hint is associated with the input via\n * `aria-describedby` so screen readers announce the rules (WCAG 3.3.2).\n * - Terms acceptance is communicated inline at the point of action rather\n * than via a pre-checked checkbox.\n */\nexport function SignUpForm({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n