{"$schema":"https://ui.shadcn.com/schema/registry-item.json","name":"auth-4","description":"Two-column signup form in a centered layout — fast account creation above pricing.","dependencies":["motion"],"registryDependencies":["@nusaiba/foundation","button","input","label"],"files":[{"path":"registry/blocks/auth/auth-data.ts","content":"export const authSite = {\n\tname: \"Nusaiba\",\n\tdomain: \"nusaiba.dev\",\n\tnamespace: \"@nusaiba\",\n\tcopyrightYear: 2026,\n} as const;\n\nexport const authSignInCopy = {\n\teyebrow: \"Welcome back\",\n\ttitle: \"Sign in to Nusaiba\",\n\tdescription: \"Access your registry token, Pro blocks, and account settings.\",\n\tsubmit: \"Sign in\",\n\tforgot: \"Forgot password?\",\n\tswitchPrompt: \"No account?\",\n\tswitchAction: \"Create one\",\n} as const;\n\nexport const authSignUpCopy = {\n\teyebrow: \"Get started\",\n\ttitle: \"Create your Nusaiba account\",\n\tdescription:\n\t\t\"Install motion blocks into your repo, unlock Pro registry access, and keep every file.\",\n\tsubmit: \"Create account\",\n\tswitchPrompt: \"Already have an account?\",\n\tswitchAction: \"Sign in\",\n\tterms:\n\t\t\"By continuing, you agree to our Terms and acknowledge that blocks install into your own codebase.\",\n} as const;\n\nexport const authCenteredSignInCopy = {\n\teyebrow: \"Account\",\n\ttitle: \"Log in\",\n\tdescription: \"Continue to your registry token, billing, and saved blocks.\",\n} as const;\n\nexport const authMagicLinkCopy = {\n\teyebrow: \"Passwordless\",\n\ttitle: \"Sign in with email\",\n\tdescription:\n\t\t\"We'll send a one-time link — no password to remember. Perfect for quick access before you install blocks.\",\n\tsubmit: \"Send magic link\",\n\thint: \"Check your inbox at the address you used to purchase Pro.\",\n} as const;\n\nexport const authOAuthCopy = {\n\teyebrow: \"Sign in\",\n\ttitle: \"Choose how to continue\",\n\tdescription: \"Use a provider or your work email — same account across CLI and site.\",\n\tdivider: \"or continue with email\",\n} as const;\n\nexport const authOtpCopy = {\n\teyebrow: \"Verify\",\n\ttitle: \"Enter the code\",\n\tdescription: \"We sent a 6-digit code to your email. Paste it below to unlock Pro install.\",\n\tresend: \"Resend code\",\n} as const;\n\nexport const authBenefitsCopy = {\n\teyebrow: \"Why sign in\",\n\ttitle: \"Ship landing pages faster\",\n\tdescription:\n\t\t\"One account for preview, purchase, and registry token — then install sections straight into your repo.\",\n} as const;\n\nexport const authBenefits = [\n\t\"Registry token for Pro block install\",\n\t\"Copy Prompt history and CLI shortcuts\",\n\t\"Commercial license for client projects\",\n\t\"Lifetime updates on purchased blocks\",\n] as const;\n\nexport const authFramedCopy = {\n\teyebrow: \"Registry access\",\n\ttitle: \"Sign in to install\",\n\tdescription: \"Preview blocks live, then add them to your landing page with one shadcn command.\",\n} as const;\n\nexport const authOAuthProviders = [\n\t{ id: \"github\", label: \"Continue with GitHub\" },\n\t{ id: \"google\", label: \"Continue with Google\" },\n] as const;\n\nexport const authVisualCopy = {\n\teyebrow: \"Install\",\n\ttitle: \"Blocks that land in your repo\",\n\tdescription:\n\t\t\"Sign in to copy your registry token, unlock Pro sections, and keep full source ownership.\",\n} as const;\n","type":"registry:lib"},{"path":"registry/blocks/auth/4/auth-section.tsx","content":"\"use client\";\n\nimport Link from \"next/link\";\nimport { useRef } from \"react\";\nimport { motion, useInView, useReducedMotion } from \"motion/react\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Label } from \"@/components/ui/label\";\nimport { motionStagger, motionViewport } from \"@/lib/motion-tokens\";\nimport { cn } from \"@/lib/utils\";\nimport { authSignUpCopy } from \"../auth-data\";\nimport { SectionShell } from \"@/components/layout-contract\";\n\nconst spring = { type: \"spring\" as const, duration: 0.3, bounce: 0 };\n\nexport function AuthCenteredSignUpSection() {\n\tconst reduceMotion = useReducedMotion();\n\tconst ref = useRef<HTMLElement>(null);\n\tconst inView = useInView(ref, motionViewport);\n\n\tconst itemVariants = reduceMotion\n\t\t? { hidden: { opacity: 1 }, visible: { opacity: 1 } }\n\t\t: {\n\t\t\t\thidden: { opacity: 0, filter: \"blur(4px)\", y: 8 },\n\t\t\t\tvisible: { opacity: 1, filter: \"blur(0px)\", y: 0, transition: spring },\n\t\t\t};\n\n\treturn (\n\t\t<SectionShell spacingMode=\"section\" ref={ref}>\n\t\t\t<motion.div\n\t\t\t\tanimate={inView ? \"visible\" : \"hidden\"}\n\t\t\t\tclassName=\"mx-auto w-full max-w-lg\"\n\t\t\t\tinitial=\"hidden\"\n\t\t\t\tvariants={{\n\t\t\t\t\thidden: {},\n\t\t\t\t\tvisible: { transition: { staggerChildren: motionStagger.item, delayChildren: 0.04 } },\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<motion.div className=\"text-center\" variants={itemVariants}>\n\t\t\t\t\t<p className=\"font-medium text-primary text-xs uppercase tracking-[0.22em]\">\n\t\t\t\t\t\t{authSignUpCopy.eyebrow}\n\t\t\t\t\t</p>\n\t\t\t\t\t<h1 className=\"mt-3 text-balance font-medium text-2xl tracking-tight md:text-3xl\">\n\t\t\t\t\t\tStart building your page\n\t\t\t\t\t</h1>\n\t\t\t\t\t<p className=\"mt-3 text-pretty text-muted-foreground text-sm\">\n\t\t\t\t\t\tCreate an account to save your registry token and Pro license.\n\t\t\t\t\t</p>\n\t\t\t\t</motion.div>\n\n\t\t\t\t<motion.form\n\t\t\t\t\tclassName=\"mt-8 grid gap-4 sm:grid-cols-2\"\n\t\t\t\t\tvariants={itemVariants}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"space-y-2 sm:col-span-2\">\n\t\t\t\t\t\t<Label htmlFor=\"auth-4-name\">Full name</Label>\n\t\t\t\t\t\t<Input autoComplete=\"name\" id=\"auth-4-name\" placeholder=\"Alex Morgan\" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"space-y-2\">\n\t\t\t\t\t\t<Label htmlFor=\"auth-4-email\">Email</Label>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\tautoComplete=\"email\"\n\t\t\t\t\t\t\tid=\"auth-4-email\"\n\t\t\t\t\t\t\tplaceholder=\"you@nusaiba.dev\"\n\t\t\t\t\t\t\ttype=\"email\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"space-y-2\">\n\t\t\t\t\t\t<Label htmlFor=\"auth-4-password\">Password</Label>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\tautoComplete=\"new-password\"\n\t\t\t\t\t\t\tid=\"auth-4-password\"\n\t\t\t\t\t\t\tplaceholder=\"8+ characters\"\n\t\t\t\t\t\t\ttype=\"password\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"sm:col-span-2\">\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tclassName={cn(\"w-full active:scale-[0.96] transition-transform\")}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{authSignUpCopy.submit}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\t\t\t\t</motion.form>\n\n\t\t\t\t<motion.p\n\t\t\t\t\tclassName=\"mt-4 text-pretty text-center text-muted-foreground text-xs\"\n\t\t\t\t\tvariants={itemVariants}\n\t\t\t\t>\n\t\t\t\t\t{authSignUpCopy.terms}\n\t\t\t\t</motion.p>\n\t\t\t\t<motion.p className=\"mt-4 text-center text-muted-foreground text-sm\" variants={itemVariants}>\n\t\t\t\t\t{authSignUpCopy.switchPrompt}{\" \"}\n\t\t\t\t\t<Link className=\"text-foreground underline-offset-4 hover:underline\" href=\"#\">\n\t\t\t\t\t\t{authSignUpCopy.switchAction}\n\t\t\t\t\t</Link>\n\t\t\t\t</motion.p>\n\t\t\t</motion.div>\n\t\t</SectionShell>\n\t);\n}\n","type":"registry:component"}],"categories":["auth"],"type":"registry:block","layoutMode":"contained","spacingMode":"section","dividerMode":"none"}