import { useState } from "react"; import { CheckCircle2, KeyRound, Mail } from "lucide-react"; import { Alert, AlertDescription, AlertTitle, Skeleton } from "@godxjp/ui/feedback"; import { Avatar, AvatarFallback, Card, CardContent, CardDescription, CardHeader, CardTitle, EmptyState, ListRow, } from "@godxjp/ui/data-display"; import { Checkbox, Field, FormField, Input, PasswordInput, PasswordStrength, } from "@godxjp/ui/data-entry"; import { Button, Reveal } from "@godxjp/ui/general"; import { AuthDivider, AuthFooter, AuthIdentity, AuthShell, AuthStack, Flex, } from "@godxjp/ui/layout"; import { AppSettingPicker } from "@godxjp/ui/navigation"; /** * AuthShell preset="registration" — the canonical sign-up measure. * * The preset owns the whole page geometry: a 360px (22.5rem) form measure at 1440/1024, a 15px * inline gutter at 390 (card x=15, width=360 — the same page rhythm as preset="login", so * sign-in → sign-up never jumps on a phone), the block-start inset, and the FOOTER CLEARANCE the * legal/consent footer keeps at the end of a long scroll. There is no page-local width, inset, * media query or colour anywhere in this file. * * WHY THIS PRESET IS START-ALIGNED: a registration card is the tallest surface in the * hosted-identity set — name · email · password · confirm · strength meter · consent · submit · * provider row. A vertically CENTRED tall card overflows ABOVE the scroll origin on a short * viewport, which puts its first field permanently out of reach. Start-aligned, the block-start * inset is ordinary page padding the user simply scrolls past. * * Two things in this page are COMPOSITIONS, not framework components (Gate 0 / rule #46) — * they are the formally documented public replacements #256 asked for: * * · SOCIAL / PROVIDER ACTIONS ("SocialLinks") — an `AuthDivider` + a `Flex direction="col"` of * real `Button variant="outline"`. It owns no behaviour: each provider is a plain action the * app wires to its own OAuth start URL. A framework component here would have to invent the * provider list, its order and its consent semantics — product decisions the package must not * make. `disabled` and `loading` are the Button's own props; no new API. * * · ORGANIZATION CHOICE LIST — `Card` + `CardContent flush` + a `