From c0b0ec3f7d6e655c1c822f27e327bd84b2a6c8b4 Mon Sep 17 00:00:00 2001 From: KhaledSaeed18 Date: Fri, 26 Sep 2025 18:39:55 +0300 Subject: [PATCH 1/6] feat(blocks/authentication): add basic signup form --- app/blocks/authentication/authentication.tsx | 20 +++++++ components/ui/8bit/blocks/signup-form.tsx | 61 ++++++++++++++++++++ public/r/registry.json | 39 +++++++++++++ public/r/signup-form.json | 51 ++++++++++++++++ registry.json | 39 +++++++++++++ 5 files changed, 210 insertions(+) create mode 100644 components/ui/8bit/blocks/signup-form.tsx create mode 100644 public/r/signup-form.json diff --git a/app/blocks/authentication/authentication.tsx b/app/blocks/authentication/authentication.tsx index 19fd854e..4cf69a2c 100644 --- a/app/blocks/authentication/authentication.tsx +++ b/app/blocks/authentication/authentication.tsx @@ -1,6 +1,7 @@ import { LoginForm } from "@/components/ui/8bit/blocks/login-form"; import { LoginForm as LoginForm2 } from "@/components/ui/8bit/blocks/login-form-2"; import { LoginForm as LoginFormWithImage } from "@/components/ui/8bit/blocks/login-form-with-image"; +import { SignupForm } from "@/components/ui/8bit/blocks/signup-form"; import CopyCommandButton from "../../docs/components/copy-command-button"; import { OpenInV0Button } from "../../docs/components/open-in-v0-button"; @@ -87,6 +88,25 @@ export default function AuthenticationBlocks() { + +
+
+

+ A simple signup form +

+ +
+ + +
+
+
+ +
+
); } diff --git a/components/ui/8bit/blocks/signup-form.tsx b/components/ui/8bit/blocks/signup-form.tsx new file mode 100644 index 00000000..d5da4822 --- /dev/null +++ b/components/ui/8bit/blocks/signup-form.tsx @@ -0,0 +1,61 @@ +import { cn } from "@/lib/utils"; + +import { Button } from "@/components/ui/8bit/button"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/8bit/card"; +import { Input } from "@/components/ui/8bit/input"; +import { Label } from "@/components/ui/8bit/label"; + +export function SignupForm({ + className, + ...props +}: React.ComponentPropsWithoutRef<"div">) { + return ( +
+ + + Sign up + + Enter your email and choose a password to create your account + + + +
+
+
+ + +
+
+ + +
+ + +
+
+ Already have an account?{" "} + + Log in + +
+
+
+
+
+ ); +} diff --git a/public/r/registry.json b/public/r/registry.json index 44b6ed82..c1fa3997 100644 --- a/public/r/registry.json +++ b/public/r/registry.json @@ -1789,6 +1789,45 @@ "target": "components/ui/8bit/styles/retro.css" } ] + }, + { + "name": "signup-form", + "type": "registry:component", + "title": "8-bit Signup Form", + "description": "A simple 8-bit signup form component", + "registryDependencies": ["button", "card", "input", "label"], + "files": [ + { + "path": "components/ui/8bit/blocks/signup-form.tsx", + "type": "registry:component", + "target": "components/ui/8bit/blocks/signup-form.tsx" + }, + { + "path": "components/ui/8bit/button.tsx", + "type": "registry:component", + "target": "components/ui/8bit/button.tsx" + }, + { + "path": "components/ui/8bit/card.tsx", + "type": "registry:component", + "target": "components/ui/8bit/card.tsx" + }, + { + "path": "components/ui/8bit/input.tsx", + "type": "registry:component", + "target": "components/ui/8bit/input.tsx" + }, + { + "path": "components/ui/8bit/label.tsx", + "type": "registry:component", + "target": "components/ui/8bit/label.tsx" + }, + { + "path": "components/ui/8bit/styles/retro.css", + "type": "registry:component", + "target": "components/ui/8bit/styles/retro.css" + } + ] } ] } diff --git a/public/r/signup-form.json b/public/r/signup-form.json new file mode 100644 index 00000000..e85cc77c --- /dev/null +++ b/public/r/signup-form.json @@ -0,0 +1,51 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "signup-form", + "type": "registry:component", + "title": "8-bit Signup Form", + "description": "A simple 8-bit signup form component", + "registryDependencies": [ + "button", + "card", + "input", + "label" + ], + "files": [ + { + "path": "components/ui/8bit/blocks/signup-form.tsx", + "content": "import { cn } from \"@/lib/utils\";\n\nimport { Button } from \"@/components/ui/8bit/button\";\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@/components/ui/8bit/card\";\nimport { Input } from \"@/components/ui/8bit/input\";\nimport { Label } from \"@/components/ui/8bit/label\";\n\nexport function SignupForm({\n className,\n ...props\n}: React.ComponentPropsWithoutRef<\"div\">) {\n return (\n
\n \n \n Sign up\n \n Enter your email and choose a password to create your account\n \n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n \n \n
\n
\n Already have an account?{\" \"}\n \n Log in\n \n
\n
\n
\n
\n
\n );\n}\n", + "type": "registry:component", + "target": "components/ui/8bit/blocks/signup-form.tsx" + }, + { + "path": "components/ui/8bit/button.tsx", + "content": "import { type VariantProps, cva } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nimport { Button as ShadcnButton } from \"@/components/ui/button\";\n\nimport \"./styles/retro.css\";\n\nexport const buttonVariants = cva(\"\", {\n variants: {\n font: {\n normal: \"\",\n retro: \"retro\",\n },\n variant: {\n default: \"bg-foreground\",\n destructive: \"bg-foreground\",\n outline: \"bg-foreground\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n});\n\nexport interface BitButtonProps\n extends React.ButtonHTMLAttributes,\n VariantProps {\n asChild?: boolean;\n ref?: React.Ref;\n}\n\nfunction Button({ children, asChild, ...props }: BitButtonProps) {\n const { variant, size, className, font } = props;\n\n return (\n \n {asChild ? (\n \n {children}\n\n {variant !== \"ghost\" && variant !== \"link\" && size !== \"icon\" && (\n <>\n {/* Pixelated border */}\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n {variant !== \"outline\" && (\n <>\n {/* Top shadow */}\n
\n
\n\n {/* Bottom shadow */}\n
\n
\n \n )}\n \n )}\n\n {size === \"icon\" && (\n <>\n
\n
\n
\n
\n
\n
\n \n )}\n \n ) : (\n <>\n {children}\n\n {variant !== \"ghost\" && variant !== \"link\" && size !== \"icon\" && (\n <>\n {/* Pixelated border */}\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n {variant !== \"outline\" && (\n <>\n {/* Top shadow */}\n
\n
\n\n {/* Bottom shadow */}\n
\n
\n \n )}\n \n )}\n\n {size === \"icon\" && (\n <>\n
\n
\n
\n
\n
\n
\n \n )}\n \n )}\n \n );\n}\n\nexport { Button };\n", + "type": "registry:component", + "target": "components/ui/8bit/button.tsx" + }, + { + "path": "components/ui/8bit/card.tsx", + "content": "import { type VariantProps, cva } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nimport {\n Card as ShadcnCard,\n CardAction as ShadcnCardAction,\n CardContent as ShadcnCardContent,\n CardDescription as ShadcnCardDescription,\n CardFooter as ShadcnCardFooter,\n CardHeader as ShadcnCardHeader,\n CardTitle as ShadcnCardTitle,\n} from \"@/components/ui/card\";\n\nimport \"./styles/retro.css\";\n\nexport const cardVariants = cva(\"\", {\n variants: {\n font: {\n normal: \"\",\n retro: \"retro\",\n },\n },\n defaultVariants: {\n font: \"retro\",\n },\n});\n\nexport interface BitCardProps\n extends React.ComponentProps<\"div\">,\n VariantProps {\n asChild?: boolean;\n}\n\nfunction Card({ ...props }: BitCardProps) {\n const { className, font } = props;\n\n return (\n \n \n\n \n
\n );\n}\n\nfunction CardHeader({ ...props }: BitCardProps) {\n const { className, font } = props;\n\n return (\n \n );\n}\n\nfunction CardTitle({ ...props }: BitCardProps) {\n const { className, font } = props;\n\n return (\n \n );\n}\n\nfunction CardDescription({ ...props }: BitCardProps) {\n const { className, font } = props;\n\n return (\n \n );\n}\n\nfunction CardAction({ ...props }: BitCardProps) {\n const { className, font } = props;\n\n return (\n \n );\n}\n\nfunction CardContent({ ...props }: BitCardProps) {\n const { className, font } = props;\n\n return (\n \n );\n}\n\nfunction CardFooter({ ...props }: BitCardProps) {\n const { className, font } = props;\n\n return (\n \n );\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n};\n", + "type": "registry:component", + "target": "components/ui/8bit/card.tsx" + }, + { + "path": "components/ui/8bit/input.tsx", + "content": "import { type VariantProps, cva } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nimport { Input as ShadcnInput } from \"@/components/ui/input\";\n\nimport \"./styles/retro.css\";\n\nexport const inputVariants = cva(\"\", {\n variants: {\n font: {\n normal: \"\",\n retro: \"retro\",\n },\n },\n defaultVariants: {\n font: \"retro\",\n },\n});\n\nexport interface BitInputProps\n extends React.InputHTMLAttributes,\n VariantProps {\n asChild?: boolean;\n}\n\nfunction Input({ ...props }: BitInputProps) {\n const { className, font } = props;\n\n return (\n \n \n\n \n
\n );\n}\n\nexport { Input };\n", + "type": "registry:component", + "target": "components/ui/8bit/input.tsx" + }, + { + "path": "components/ui/8bit/label.tsx", + "content": "\"use client\";\n\nimport * as React from \"react\";\n\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { type VariantProps, cva } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nimport { Label as ShadcnLabel } from \"@/components/ui/label\";\n\nimport \"./styles/retro.css\";\n\nexport const inputVariants = cva(\"\", {\n variants: {\n font: {\n normal: \"\",\n retro: \"retro\",\n },\n },\n defaultVariants: {\n font: \"retro\",\n },\n});\n\ninterface BitLabelProps\n extends React.ComponentProps,\n VariantProps {\n asChild?: boolean;\n}\n\nfunction Label({ className, font, ...props }: BitLabelProps) {\n return (\n \n );\n}\n\nexport { Label };\n", + "type": "registry:component", + "target": "components/ui/8bit/label.tsx" + }, + { + "path": "components/ui/8bit/styles/retro.css", + "content": "@import url(\"https://fonts.googleapis.com/css2?family=Press+Start+2P&display=swap\");\n\n.retro {\n font-family:\n \"Press Start 2P\",\n system-ui,\n -apple-system,\n sans-serif;\n line-height: 1.5;\n letter-spacing: 0.5px;\n}\n", + "type": "registry:component", + "target": "components/ui/8bit/styles/retro.css" + } + ] +} \ No newline at end of file diff --git a/registry.json b/registry.json index 44b6ed82..c1fa3997 100644 --- a/registry.json +++ b/registry.json @@ -1789,6 +1789,45 @@ "target": "components/ui/8bit/styles/retro.css" } ] + }, + { + "name": "signup-form", + "type": "registry:component", + "title": "8-bit Signup Form", + "description": "A simple 8-bit signup form component", + "registryDependencies": ["button", "card", "input", "label"], + "files": [ + { + "path": "components/ui/8bit/blocks/signup-form.tsx", + "type": "registry:component", + "target": "components/ui/8bit/blocks/signup-form.tsx" + }, + { + "path": "components/ui/8bit/button.tsx", + "type": "registry:component", + "target": "components/ui/8bit/button.tsx" + }, + { + "path": "components/ui/8bit/card.tsx", + "type": "registry:component", + "target": "components/ui/8bit/card.tsx" + }, + { + "path": "components/ui/8bit/input.tsx", + "type": "registry:component", + "target": "components/ui/8bit/input.tsx" + }, + { + "path": "components/ui/8bit/label.tsx", + "type": "registry:component", + "target": "components/ui/8bit/label.tsx" + }, + { + "path": "components/ui/8bit/styles/retro.css", + "type": "registry:component", + "target": "components/ui/8bit/styles/retro.css" + } + ] } ] } From c3f519aec460b1e5b273b7b6bd621df917e5d47d Mon Sep 17 00:00:00 2001 From: KhaledSaeed18 Date: Fri, 26 Sep 2025 18:45:17 +0300 Subject: [PATCH 2/6] feat(blocks/authentication): add two-column signup page with cover image --- app/blocks/authentication/authentication.tsx | 20 +++++++ app/signup/page.tsx | 32 +++++++++++ public/r/registry.json | 44 +++++++++++++++ public/r/signup-page.json | 57 ++++++++++++++++++++ registry.json | 44 +++++++++++++++ 5 files changed, 197 insertions(+) create mode 100644 app/signup/page.tsx create mode 100644 public/r/signup-page.json diff --git a/app/blocks/authentication/authentication.tsx b/app/blocks/authentication/authentication.tsx index 4cf69a2c..a31c6f32 100644 --- a/app/blocks/authentication/authentication.tsx +++ b/app/blocks/authentication/authentication.tsx @@ -6,6 +6,7 @@ import { SignupForm } from "@/components/ui/8bit/blocks/signup-form"; import CopyCommandButton from "../../docs/components/copy-command-button"; import { OpenInV0Button } from "../../docs/components/open-in-v0-button"; import LoginPage from "../../login/page"; +import SignupPage from "../../signup/page"; export default function AuthenticationBlocks() { return ( @@ -107,6 +108,25 @@ export default function AuthenticationBlocks() {
+ +
+

+ A two column signup page with a cover image. +

+ +
+ + +
+
+
+
+ +
+
); } diff --git a/app/signup/page.tsx b/app/signup/page.tsx new file mode 100644 index 00000000..2c5946e6 --- /dev/null +++ b/app/signup/page.tsx @@ -0,0 +1,32 @@ +import { GalleryVerticalEnd } from "lucide-react"; + +import { SignupForm } from "@/components/ui/8bit/blocks/signup-form"; + +export default function SignupPage() { + return ( +
+
+ Image +
+
+ +
+
+ +
+
+
+
+ ); +} diff --git a/public/r/registry.json b/public/r/registry.json index c1fa3997..ebebc2f6 100644 --- a/public/r/registry.json +++ b/public/r/registry.json @@ -1828,6 +1828,50 @@ "target": "components/ui/8bit/styles/retro.css" } ] + }, + { + "name": "signup-page", + "type": "registry:component", + "title": "8-bit Signup Page", + "description": "A simple 8-bit signup page component", + "registryDependencies": ["button", "card", "input", "label"], + "files": [ + { + "path": "app/signup/page.tsx", + "type": "registry:component", + "target": "app/signup/page.tsx" + }, + { + "path": "components/ui/8bit/blocks/signup-form.tsx", + "type": "registry:component", + "target": "components/ui/8bit/blocks/signup-form.tsx" + }, + { + "path": "components/ui/8bit/button.tsx", + "type": "registry:component", + "target": "components/ui/8bit/button.tsx" + }, + { + "path": "components/ui/8bit/card.tsx", + "type": "registry:component", + "target": "components/ui/8bit/card.tsx" + }, + { + "path": "components/ui/8bit/input.tsx", + "type": "registry:component", + "target": "components/ui/8bit/input.tsx" + }, + { + "path": "components/ui/8bit/label.tsx", + "type": "registry:component", + "target": "components/ui/8bit/label.tsx" + }, + { + "path": "components/ui/8bit/styles/retro.css", + "type": "registry:component", + "target": "components/ui/8bit/styles/retro.css" + } + ] } ] } diff --git a/public/r/signup-page.json b/public/r/signup-page.json new file mode 100644 index 00000000..5490ad52 --- /dev/null +++ b/public/r/signup-page.json @@ -0,0 +1,57 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "signup-page", + "type": "registry:component", + "title": "8-bit Signup Page", + "description": "A simple 8-bit signup page component", + "registryDependencies": [ + "button", + "card", + "input", + "label" + ], + "files": [ + { + "path": "app/signup/page.tsx", + "content": "import { GalleryVerticalEnd } from \"lucide-react\";\n\nimport { SignupForm } from \"@/components/ui/8bit/blocks/signup-form\";\n\nexport default function SignupPage() {\n return (\n
\n \n
\n \n
\n
\n \n
\n
\n
\n
\n );\n}\n", + "type": "registry:component", + "target": "app/signup/page.tsx" + }, + { + "path": "components/ui/8bit/blocks/signup-form.tsx", + "content": "import { cn } from \"@/lib/utils\";\n\nimport { Button } from \"@/components/ui/8bit/button\";\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@/components/ui/8bit/card\";\nimport { Input } from \"@/components/ui/8bit/input\";\nimport { Label } from \"@/components/ui/8bit/label\";\n\nexport function SignupForm({\n className,\n ...props\n}: React.ComponentPropsWithoutRef<\"div\">) {\n return (\n
\n \n \n Sign up\n \n Enter your email and choose a password to create your account\n \n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n \n \n
\n
\n Already have an account?{\" \"}\n \n Log in\n \n
\n
\n
\n
\n
\n );\n}\n", + "type": "registry:component", + "target": "components/ui/8bit/blocks/signup-form.tsx" + }, + { + "path": "components/ui/8bit/button.tsx", + "content": "import { type VariantProps, cva } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nimport { Button as ShadcnButton } from \"@/components/ui/button\";\n\nimport \"./styles/retro.css\";\n\nexport const buttonVariants = cva(\"\", {\n variants: {\n font: {\n normal: \"\",\n retro: \"retro\",\n },\n variant: {\n default: \"bg-foreground\",\n destructive: \"bg-foreground\",\n outline: \"bg-foreground\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n});\n\nexport interface BitButtonProps\n extends React.ButtonHTMLAttributes,\n VariantProps {\n asChild?: boolean;\n ref?: React.Ref;\n}\n\nfunction Button({ children, asChild, ...props }: BitButtonProps) {\n const { variant, size, className, font } = props;\n\n return (\n \n {asChild ? (\n \n {children}\n\n {variant !== \"ghost\" && variant !== \"link\" && size !== \"icon\" && (\n <>\n {/* Pixelated border */}\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n {variant !== \"outline\" && (\n <>\n {/* Top shadow */}\n
\n
\n\n {/* Bottom shadow */}\n
\n
\n \n )}\n \n )}\n\n {size === \"icon\" && (\n <>\n
\n
\n
\n
\n
\n
\n \n )}\n \n ) : (\n <>\n {children}\n\n {variant !== \"ghost\" && variant !== \"link\" && size !== \"icon\" && (\n <>\n {/* Pixelated border */}\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n {variant !== \"outline\" && (\n <>\n {/* Top shadow */}\n
\n
\n\n {/* Bottom shadow */}\n
\n
\n \n )}\n \n )}\n\n {size === \"icon\" && (\n <>\n
\n
\n
\n
\n
\n
\n \n )}\n \n )}\n \n );\n}\n\nexport { Button };\n", + "type": "registry:component", + "target": "components/ui/8bit/button.tsx" + }, + { + "path": "components/ui/8bit/card.tsx", + "content": "import { type VariantProps, cva } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nimport {\n Card as ShadcnCard,\n CardAction as ShadcnCardAction,\n CardContent as ShadcnCardContent,\n CardDescription as ShadcnCardDescription,\n CardFooter as ShadcnCardFooter,\n CardHeader as ShadcnCardHeader,\n CardTitle as ShadcnCardTitle,\n} from \"@/components/ui/card\";\n\nimport \"./styles/retro.css\";\n\nexport const cardVariants = cva(\"\", {\n variants: {\n font: {\n normal: \"\",\n retro: \"retro\",\n },\n },\n defaultVariants: {\n font: \"retro\",\n },\n});\n\nexport interface BitCardProps\n extends React.ComponentProps<\"div\">,\n VariantProps {\n asChild?: boolean;\n}\n\nfunction Card({ ...props }: BitCardProps) {\n const { className, font } = props;\n\n return (\n \n \n\n \n
\n );\n}\n\nfunction CardHeader({ ...props }: BitCardProps) {\n const { className, font } = props;\n\n return (\n \n );\n}\n\nfunction CardTitle({ ...props }: BitCardProps) {\n const { className, font } = props;\n\n return (\n \n );\n}\n\nfunction CardDescription({ ...props }: BitCardProps) {\n const { className, font } = props;\n\n return (\n \n );\n}\n\nfunction CardAction({ ...props }: BitCardProps) {\n const { className, font } = props;\n\n return (\n \n );\n}\n\nfunction CardContent({ ...props }: BitCardProps) {\n const { className, font } = props;\n\n return (\n \n );\n}\n\nfunction CardFooter({ ...props }: BitCardProps) {\n const { className, font } = props;\n\n return (\n \n );\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n};\n", + "type": "registry:component", + "target": "components/ui/8bit/card.tsx" + }, + { + "path": "components/ui/8bit/input.tsx", + "content": "import { type VariantProps, cva } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nimport { Input as ShadcnInput } from \"@/components/ui/input\";\n\nimport \"./styles/retro.css\";\n\nexport const inputVariants = cva(\"\", {\n variants: {\n font: {\n normal: \"\",\n retro: \"retro\",\n },\n },\n defaultVariants: {\n font: \"retro\",\n },\n});\n\nexport interface BitInputProps\n extends React.InputHTMLAttributes,\n VariantProps {\n asChild?: boolean;\n}\n\nfunction Input({ ...props }: BitInputProps) {\n const { className, font } = props;\n\n return (\n \n \n\n \n
\n );\n}\n\nexport { Input };\n", + "type": "registry:component", + "target": "components/ui/8bit/input.tsx" + }, + { + "path": "components/ui/8bit/label.tsx", + "content": "\"use client\";\n\nimport * as React from \"react\";\n\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { type VariantProps, cva } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nimport { Label as ShadcnLabel } from \"@/components/ui/label\";\n\nimport \"./styles/retro.css\";\n\nexport const inputVariants = cva(\"\", {\n variants: {\n font: {\n normal: \"\",\n retro: \"retro\",\n },\n },\n defaultVariants: {\n font: \"retro\",\n },\n});\n\ninterface BitLabelProps\n extends React.ComponentProps,\n VariantProps {\n asChild?: boolean;\n}\n\nfunction Label({ className, font, ...props }: BitLabelProps) {\n return (\n \n );\n}\n\nexport { Label };\n", + "type": "registry:component", + "target": "components/ui/8bit/label.tsx" + }, + { + "path": "components/ui/8bit/styles/retro.css", + "content": "@import url(\"https://fonts.googleapis.com/css2?family=Press+Start+2P&display=swap\");\n\n.retro {\n font-family:\n \"Press Start 2P\",\n system-ui,\n -apple-system,\n sans-serif;\n line-height: 1.5;\n letter-spacing: 0.5px;\n}\n", + "type": "registry:component", + "target": "components/ui/8bit/styles/retro.css" + } + ] +} \ No newline at end of file diff --git a/registry.json b/registry.json index c1fa3997..ebebc2f6 100644 --- a/registry.json +++ b/registry.json @@ -1828,6 +1828,50 @@ "target": "components/ui/8bit/styles/retro.css" } ] + }, + { + "name": "signup-page", + "type": "registry:component", + "title": "8-bit Signup Page", + "description": "A simple 8-bit signup page component", + "registryDependencies": ["button", "card", "input", "label"], + "files": [ + { + "path": "app/signup/page.tsx", + "type": "registry:component", + "target": "app/signup/page.tsx" + }, + { + "path": "components/ui/8bit/blocks/signup-form.tsx", + "type": "registry:component", + "target": "components/ui/8bit/blocks/signup-form.tsx" + }, + { + "path": "components/ui/8bit/button.tsx", + "type": "registry:component", + "target": "components/ui/8bit/button.tsx" + }, + { + "path": "components/ui/8bit/card.tsx", + "type": "registry:component", + "target": "components/ui/8bit/card.tsx" + }, + { + "path": "components/ui/8bit/input.tsx", + "type": "registry:component", + "target": "components/ui/8bit/input.tsx" + }, + { + "path": "components/ui/8bit/label.tsx", + "type": "registry:component", + "target": "components/ui/8bit/label.tsx" + }, + { + "path": "components/ui/8bit/styles/retro.css", + "type": "registry:component", + "target": "components/ui/8bit/styles/retro.css" + } + ] } ] } From 648364460d8e914e70478dbff6da5f6daa05e95b Mon Sep 17 00:00:00 2001 From: KhaledSaeed18 Date: Fri, 26 Sep 2025 18:58:39 +0300 Subject: [PATCH 3/6] feat(blocks/authentication): add signup form with icons --- app/blocks/authentication/authentication.tsx | 20 +++++ components/ui/8bit/blocks/signup-form-2.tsx | 92 ++++++++++++++++++++ public/r/registry.json | 39 +++++++++ public/r/signup-form-2.json | 51 +++++++++++ registry.json | 39 +++++++++ 5 files changed, 241 insertions(+) create mode 100644 components/ui/8bit/blocks/signup-form-2.tsx create mode 100644 public/r/signup-form-2.json diff --git a/app/blocks/authentication/authentication.tsx b/app/blocks/authentication/authentication.tsx index a31c6f32..dc1a80d1 100644 --- a/app/blocks/authentication/authentication.tsx +++ b/app/blocks/authentication/authentication.tsx @@ -2,6 +2,7 @@ import { LoginForm } from "@/components/ui/8bit/blocks/login-form"; import { LoginForm as LoginForm2 } from "@/components/ui/8bit/blocks/login-form-2"; import { LoginForm as LoginFormWithImage } from "@/components/ui/8bit/blocks/login-form-with-image"; import { SignupForm } from "@/components/ui/8bit/blocks/signup-form"; +import { SignupForm as SignupForm2 } from "@/components/ui/8bit/blocks/signup-form-2"; import CopyCommandButton from "../../docs/components/copy-command-button"; import { OpenInV0Button } from "../../docs/components/open-in-v0-button"; @@ -127,6 +128,25 @@ export default function AuthenticationBlocks() {
+ +
+
+

+ A simple signup form with icons +

+ +
+ + +
+
+
+ +
+
); } diff --git a/components/ui/8bit/blocks/signup-form-2.tsx b/components/ui/8bit/blocks/signup-form-2.tsx new file mode 100644 index 00000000..9209b661 --- /dev/null +++ b/components/ui/8bit/blocks/signup-form-2.tsx @@ -0,0 +1,92 @@ +import { cn } from "@/lib/utils"; + +import { Button } from "@/components/ui/8bit/button"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/8bit/card"; +import { Input } from "@/components/ui/8bit/input"; +import { Label } from "@/components/ui/8bit/label"; + +import "../styles/retro.css"; + +export function SignupForm({ + className, + ...props +}: React.ComponentPropsWithoutRef<"div">) { + return ( +
+ + + Create an account + + Sign up with your Apple or Google account + + + +
+
+
+ + +
+
+ + Or continue with + +
+
+
+ + +
+
+ + +
+ +
+
+ Already have an account?{" "} + + Sign in + +
+
+
+
+
+ +
+ ); +} diff --git a/public/r/registry.json b/public/r/registry.json index ebebc2f6..c357f71c 100644 --- a/public/r/registry.json +++ b/public/r/registry.json @@ -1872,6 +1872,45 @@ "target": "components/ui/8bit/styles/retro.css" } ] + }, + { + "name": "signup-form-2", + "type": "registry:component", + "title": "8-bit Signup Form 2", + "description": "A simple 8-bit signup form component", + "registryDependencies": ["button", "card", "input", "label"], + "files": [ + { + "path": "components/ui/8bit/blocks/signup-form-2.tsx", + "type": "registry:component", + "target": "components/ui/8bit/blocks/signup-form-2.tsx" + }, + { + "path": "components/ui/8bit/button.tsx", + "type": "registry:component", + "target": "components/ui/8bit/button.tsx" + }, + { + "path": "components/ui/8bit/card.tsx", + "type": "registry:component", + "target": "components/ui/8bit/card.tsx" + }, + { + "path": "components/ui/8bit/input.tsx", + "type": "registry:component", + "target": "components/ui/8bit/input.tsx" + }, + { + "path": "components/ui/8bit/label.tsx", + "type": "registry:component", + "target": "components/ui/8bit/label.tsx" + }, + { + "path": "components/ui/8bit/styles/retro.css", + "type": "registry:component", + "target": "components/ui/8bit/styles/retro.css" + } + ] } ] } diff --git a/public/r/signup-form-2.json b/public/r/signup-form-2.json new file mode 100644 index 00000000..999282ce --- /dev/null +++ b/public/r/signup-form-2.json @@ -0,0 +1,51 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "signup-form-2", + "type": "registry:component", + "title": "8-bit Signup Form 2", + "description": "A simple 8-bit signup form component", + "registryDependencies": [ + "button", + "card", + "input", + "label" + ], + "files": [ + { + "path": "components/ui/8bit/blocks/signup-form-2.tsx", + "content": "import { cn } from \"@/lib/utils\";\n\nimport { Button } from \"@/components/ui/8bit/button\";\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@/components/ui/8bit/card\";\nimport { Input } from \"@/components/ui/8bit/input\";\nimport { Label } from \"@/components/ui/8bit/label\";\n\nimport \"../styles/retro.css\";\n\nexport function SignupForm({\n className,\n ...props\n}: React.ComponentPropsWithoutRef<\"div\">) {\n return (\n
\n \n \n Create an account\n \n Sign up with your Apple or Google account\n \n \n \n
\n
\n
\n \n \n
\n
\n \n Or continue with\n \n
\n
\n
\n \n \n
\n
\n \n \n
\n \n
\n
\n Already have an account?{\" \"}\n \n Sign in\n \n
\n
\n
\n
\n
\n \n Terms of Service and Privacy Policy.\n
\n
\n );\n}\n", + "type": "registry:component", + "target": "components/ui/8bit/blocks/signup-form-2.tsx" + }, + { + "path": "components/ui/8bit/button.tsx", + "content": "import { type VariantProps, cva } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nimport { Button as ShadcnButton } from \"@/components/ui/button\";\n\nimport \"./styles/retro.css\";\n\nexport const buttonVariants = cva(\"\", {\n variants: {\n font: {\n normal: \"\",\n retro: \"retro\",\n },\n variant: {\n default: \"bg-foreground\",\n destructive: \"bg-foreground\",\n outline: \"bg-foreground\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n});\n\nexport interface BitButtonProps\n extends React.ButtonHTMLAttributes,\n VariantProps {\n asChild?: boolean;\n ref?: React.Ref;\n}\n\nfunction Button({ children, asChild, ...props }: BitButtonProps) {\n const { variant, size, className, font } = props;\n\n return (\n \n {asChild ? (\n \n {children}\n\n {variant !== \"ghost\" && variant !== \"link\" && size !== \"icon\" && (\n <>\n {/* Pixelated border */}\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n {variant !== \"outline\" && (\n <>\n {/* Top shadow */}\n
\n
\n\n {/* Bottom shadow */}\n
\n
\n \n )}\n \n )}\n\n {size === \"icon\" && (\n <>\n
\n
\n
\n
\n
\n
\n \n )}\n \n ) : (\n <>\n {children}\n\n {variant !== \"ghost\" && variant !== \"link\" && size !== \"icon\" && (\n <>\n {/* Pixelated border */}\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n {variant !== \"outline\" && (\n <>\n {/* Top shadow */}\n
\n
\n\n {/* Bottom shadow */}\n
\n
\n \n )}\n \n )}\n\n {size === \"icon\" && (\n <>\n
\n
\n
\n
\n
\n
\n \n )}\n \n )}\n \n );\n}\n\nexport { Button };\n", + "type": "registry:component", + "target": "components/ui/8bit/button.tsx" + }, + { + "path": "components/ui/8bit/card.tsx", + "content": "import { type VariantProps, cva } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nimport {\n Card as ShadcnCard,\n CardAction as ShadcnCardAction,\n CardContent as ShadcnCardContent,\n CardDescription as ShadcnCardDescription,\n CardFooter as ShadcnCardFooter,\n CardHeader as ShadcnCardHeader,\n CardTitle as ShadcnCardTitle,\n} from \"@/components/ui/card\";\n\nimport \"./styles/retro.css\";\n\nexport const cardVariants = cva(\"\", {\n variants: {\n font: {\n normal: \"\",\n retro: \"retro\",\n },\n },\n defaultVariants: {\n font: \"retro\",\n },\n});\n\nexport interface BitCardProps\n extends React.ComponentProps<\"div\">,\n VariantProps {\n asChild?: boolean;\n}\n\nfunction Card({ ...props }: BitCardProps) {\n const { className, font } = props;\n\n return (\n \n \n\n \n
\n );\n}\n\nfunction CardHeader({ ...props }: BitCardProps) {\n const { className, font } = props;\n\n return (\n \n );\n}\n\nfunction CardTitle({ ...props }: BitCardProps) {\n const { className, font } = props;\n\n return (\n \n );\n}\n\nfunction CardDescription({ ...props }: BitCardProps) {\n const { className, font } = props;\n\n return (\n \n );\n}\n\nfunction CardAction({ ...props }: BitCardProps) {\n const { className, font } = props;\n\n return (\n \n );\n}\n\nfunction CardContent({ ...props }: BitCardProps) {\n const { className, font } = props;\n\n return (\n \n );\n}\n\nfunction CardFooter({ ...props }: BitCardProps) {\n const { className, font } = props;\n\n return (\n \n );\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n};\n", + "type": "registry:component", + "target": "components/ui/8bit/card.tsx" + }, + { + "path": "components/ui/8bit/input.tsx", + "content": "import { type VariantProps, cva } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nimport { Input as ShadcnInput } from \"@/components/ui/input\";\n\nimport \"./styles/retro.css\";\n\nexport const inputVariants = cva(\"\", {\n variants: {\n font: {\n normal: \"\",\n retro: \"retro\",\n },\n },\n defaultVariants: {\n font: \"retro\",\n },\n});\n\nexport interface BitInputProps\n extends React.InputHTMLAttributes,\n VariantProps {\n asChild?: boolean;\n}\n\nfunction Input({ ...props }: BitInputProps) {\n const { className, font } = props;\n\n return (\n \n \n\n \n
\n );\n}\n\nexport { Input };\n", + "type": "registry:component", + "target": "components/ui/8bit/input.tsx" + }, + { + "path": "components/ui/8bit/label.tsx", + "content": "\"use client\";\n\nimport * as React from \"react\";\n\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { type VariantProps, cva } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nimport { Label as ShadcnLabel } from \"@/components/ui/label\";\n\nimport \"./styles/retro.css\";\n\nexport const inputVariants = cva(\"\", {\n variants: {\n font: {\n normal: \"\",\n retro: \"retro\",\n },\n },\n defaultVariants: {\n font: \"retro\",\n },\n});\n\ninterface BitLabelProps\n extends React.ComponentProps,\n VariantProps {\n asChild?: boolean;\n}\n\nfunction Label({ className, font, ...props }: BitLabelProps) {\n return (\n \n );\n}\n\nexport { Label };\n", + "type": "registry:component", + "target": "components/ui/8bit/label.tsx" + }, + { + "path": "components/ui/8bit/styles/retro.css", + "content": "@import url(\"https://fonts.googleapis.com/css2?family=Press+Start+2P&display=swap\");\n\n.retro {\n font-family:\n \"Press Start 2P\",\n system-ui,\n -apple-system,\n sans-serif;\n line-height: 1.5;\n letter-spacing: 0.5px;\n}\n", + "type": "registry:component", + "target": "components/ui/8bit/styles/retro.css" + } + ] +} \ No newline at end of file diff --git a/registry.json b/registry.json index ebebc2f6..c357f71c 100644 --- a/registry.json +++ b/registry.json @@ -1872,6 +1872,45 @@ "target": "components/ui/8bit/styles/retro.css" } ] + }, + { + "name": "signup-form-2", + "type": "registry:component", + "title": "8-bit Signup Form 2", + "description": "A simple 8-bit signup form component", + "registryDependencies": ["button", "card", "input", "label"], + "files": [ + { + "path": "components/ui/8bit/blocks/signup-form-2.tsx", + "type": "registry:component", + "target": "components/ui/8bit/blocks/signup-form-2.tsx" + }, + { + "path": "components/ui/8bit/button.tsx", + "type": "registry:component", + "target": "components/ui/8bit/button.tsx" + }, + { + "path": "components/ui/8bit/card.tsx", + "type": "registry:component", + "target": "components/ui/8bit/card.tsx" + }, + { + "path": "components/ui/8bit/input.tsx", + "type": "registry:component", + "target": "components/ui/8bit/input.tsx" + }, + { + "path": "components/ui/8bit/label.tsx", + "type": "registry:component", + "target": "components/ui/8bit/label.tsx" + }, + { + "path": "components/ui/8bit/styles/retro.css", + "type": "registry:component", + "target": "components/ui/8bit/styles/retro.css" + } + ] } ] } From edd6421a40c30018bf390388656a37f4c5f14005 Mon Sep 17 00:00:00 2001 From: KhaledSaeed18 Date: Fri, 26 Sep 2025 19:12:11 +0300 Subject: [PATCH 4/6] feat(blocks/authentication): add signup form with image --- app/blocks/authentication/authentication.tsx | 23 ++++ .../ui/8bit/blocks/signup-form-with-image.tsx | 101 ++++++++++++++++++ public/r/registry.json | 39 +++++++ public/r/signup-form-2.json | 2 +- public/r/signup-form-with-image.json | 51 +++++++++ registry.json | 39 +++++++ 6 files changed, 254 insertions(+), 1 deletion(-) create mode 100644 components/ui/8bit/blocks/signup-form-with-image.tsx create mode 100644 public/r/signup-form-with-image.json diff --git a/app/blocks/authentication/authentication.tsx b/app/blocks/authentication/authentication.tsx index dc1a80d1..0263b11a 100644 --- a/app/blocks/authentication/authentication.tsx +++ b/app/blocks/authentication/authentication.tsx @@ -3,6 +3,7 @@ import { LoginForm as LoginForm2 } from "@/components/ui/8bit/blocks/login-form- import { LoginForm as LoginFormWithImage } from "@/components/ui/8bit/blocks/login-form-with-image"; import { SignupForm } from "@/components/ui/8bit/blocks/signup-form"; import { SignupForm as SignupForm2 } from "@/components/ui/8bit/blocks/signup-form-2"; +import { SignupForm as SignupFormWithImage } from "@/components/ui/8bit/blocks/signup-form-with-image"; import CopyCommandButton from "../../docs/components/copy-command-button"; import { OpenInV0Button } from "../../docs/components/open-in-v0-button"; @@ -147,6 +148,28 @@ export default function AuthenticationBlocks() {
+ +
+
+

+ A simple signup form with image +

+ +
+ + +
+
+
+ +
+
); } diff --git a/components/ui/8bit/blocks/signup-form-with-image.tsx b/components/ui/8bit/blocks/signup-form-with-image.tsx new file mode 100644 index 00000000..1bc69663 --- /dev/null +++ b/components/ui/8bit/blocks/signup-form-with-image.tsx @@ -0,0 +1,101 @@ +import { cn } from "@/lib/utils"; + +import { Button } from "@/components/ui/8bit/button"; +import { Card, CardContent } from "@/components/ui/8bit/card"; +import { Input } from "@/components/ui/8bit/input"; +import { Label } from "@/components/ui/8bit/label"; + +import "../styles/retro.css"; + +export function SignupForm({ + className, + ...props +}: React.ComponentProps<"div">) { + return ( +
+ + +
+ Image +
+
+
+
+

Create your account

+

+ Sign up for an Acme Inc account to get started +

+
+
+ + +
+
+ + +
+ +
+ + Or continue with + +
+
+ + + +
+
+ Already have an account?{" "} + + Sign in + +
+
+
+
+
+

+ By clicking create account, you agree to our{" "} + Terms of Service and Privacy Policy. +

+
+ ); +} diff --git a/public/r/registry.json b/public/r/registry.json index c357f71c..6dc0d126 100644 --- a/public/r/registry.json +++ b/public/r/registry.json @@ -1911,6 +1911,45 @@ "target": "components/ui/8bit/styles/retro.css" } ] + }, + { + "name": "signup-form-with-image", + "type": "registry:component", + "title": "8-bit Signup Form with Image", + "description": "A simple 8-bit signup form component with image", + "registryDependencies": ["button", "card", "input", "label"], + "files": [ + { + "path": "components/ui/8bit/blocks/signup-form-with-image.tsx", + "type": "registry:component", + "target": "components/ui/8bit/blocks/signup-form-with-image.tsx" + }, + { + "path": "components/ui/8bit/button.tsx", + "type": "registry:component", + "target": "components/ui/8bit/button.tsx" + }, + { + "path": "components/ui/8bit/card.tsx", + "type": "registry:component", + "target": "components/ui/8bit/card.tsx" + }, + { + "path": "components/ui/8bit/input.tsx", + "type": "registry:component", + "target": "components/ui/8bit/input.tsx" + }, + { + "path": "components/ui/8bit/label.tsx", + "type": "registry:component", + "target": "components/ui/8bit/label.tsx" + }, + { + "path": "components/ui/8bit/styles/retro.css", + "type": "registry:component", + "target": "components/ui/8bit/styles/retro.css" + } + ] } ] } diff --git a/public/r/signup-form-2.json b/public/r/signup-form-2.json index 999282ce..b054af54 100644 --- a/public/r/signup-form-2.json +++ b/public/r/signup-form-2.json @@ -13,7 +13,7 @@ "files": [ { "path": "components/ui/8bit/blocks/signup-form-2.tsx", - "content": "import { cn } from \"@/lib/utils\";\n\nimport { Button } from \"@/components/ui/8bit/button\";\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@/components/ui/8bit/card\";\nimport { Input } from \"@/components/ui/8bit/input\";\nimport { Label } from \"@/components/ui/8bit/label\";\n\nimport \"../styles/retro.css\";\n\nexport function SignupForm({\n className,\n ...props\n}: React.ComponentPropsWithoutRef<\"div\">) {\n return (\n
\n \n \n Create an account\n \n Sign up with your Apple or Google account\n \n \n \n
\n
\n
\n \n \n
\n
\n \n Or continue with\n \n
\n
\n
\n \n \n
\n
\n \n \n
\n \n
\n
\n Already have an account?{\" \"}\n \n Sign in\n \n
\n
\n
\n
\n
\n \n Terms of Service and Privacy Policy.\n
\n
\n );\n}\n", + "content": "import { cn } from \"@/lib/utils\";\n\nimport { Button } from \"@/components/ui/8bit/button\";\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@/components/ui/8bit/card\";\nimport { Input } from \"@/components/ui/8bit/input\";\nimport { Label } from \"@/components/ui/8bit/label\";\n\nimport \"../styles/retro.css\";\n\nexport function SignupForm({\n className,\n ...props\n}: React.ComponentPropsWithoutRef<\"div\">) {\n return (\n
\n \n \n Create an account\n \n Sign up with your Apple or Google account\n \n \n \n
\n
\n
\n \n \n
\n
\n \n Or continue with\n \n
\n
\n
\n \n \n
\n
\n \n \n
\n \n
\n
\n Already have an account?{\" \"}\n \n Sign in\n \n
\n
\n
\n
\n
\n \n Terms of Service and Privacy Policy.\n
\n
\n );\n}\n", "type": "registry:component", "target": "components/ui/8bit/blocks/signup-form-2.tsx" }, diff --git a/public/r/signup-form-with-image.json b/public/r/signup-form-with-image.json new file mode 100644 index 00000000..d7b33943 --- /dev/null +++ b/public/r/signup-form-with-image.json @@ -0,0 +1,51 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "signup-form-with-image", + "type": "registry:component", + "title": "8-bit Signup Form with Image", + "description": "A simple 8-bit signup form component with image", + "registryDependencies": [ + "button", + "card", + "input", + "label" + ], + "files": [ + { + "path": "components/ui/8bit/blocks/signup-form-with-image.tsx", + "content": "import { cn } from \"@/lib/utils\";\n\nimport { Button } from \"@/components/ui/8bit/button\";\nimport { Card, CardContent } from \"@/components/ui/8bit/card\";\nimport { Input } from \"@/components/ui/8bit/input\";\nimport { Label } from \"@/components/ui/8bit/label\";\n\nimport \"../styles/retro.css\";\n\nexport function SignupForm({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n
\n \n \n \n
\n
\n
\n

Create your account

\n

\n Sign up for an Acme Inc account to get started\n

\n
\n
\n \n \n
\n
\n \n \n
\n \n
\n \n Or continue with\n \n
\n
\n \n \n \n
\n
\n Already have an account?{\" \"}\n \n Sign in\n \n
\n
\n
\n
\n
\n \n By clicking create account, you agree to our Terms of Service{\" \"}\n and Privacy Policy.\n

\n
\n );\n}\n", + "type": "registry:component", + "target": "components/ui/8bit/blocks/signup-form-with-image.tsx" + }, + { + "path": "components/ui/8bit/button.tsx", + "content": "import { type VariantProps, cva } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nimport { Button as ShadcnButton } from \"@/components/ui/button\";\n\nimport \"./styles/retro.css\";\n\nexport const buttonVariants = cva(\"\", {\n variants: {\n font: {\n normal: \"\",\n retro: \"retro\",\n },\n variant: {\n default: \"bg-foreground\",\n destructive: \"bg-foreground\",\n outline: \"bg-foreground\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n});\n\nexport interface BitButtonProps\n extends React.ButtonHTMLAttributes,\n VariantProps {\n asChild?: boolean;\n ref?: React.Ref;\n}\n\nfunction Button({ children, asChild, ...props }: BitButtonProps) {\n const { variant, size, className, font } = props;\n\n return (\n \n {asChild ? (\n \n {children}\n\n {variant !== \"ghost\" && variant !== \"link\" && size !== \"icon\" && (\n <>\n {/* Pixelated border */}\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n {variant !== \"outline\" && (\n <>\n {/* Top shadow */}\n
\n
\n\n {/* Bottom shadow */}\n
\n
\n \n )}\n \n )}\n\n {size === \"icon\" && (\n <>\n
\n
\n
\n
\n
\n
\n \n )}\n \n ) : (\n <>\n {children}\n\n {variant !== \"ghost\" && variant !== \"link\" && size !== \"icon\" && (\n <>\n {/* Pixelated border */}\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n {variant !== \"outline\" && (\n <>\n {/* Top shadow */}\n
\n
\n\n {/* Bottom shadow */}\n
\n
\n \n )}\n \n )}\n\n {size === \"icon\" && (\n <>\n
\n
\n
\n
\n
\n
\n \n )}\n \n )}\n \n );\n}\n\nexport { Button };\n", + "type": "registry:component", + "target": "components/ui/8bit/button.tsx" + }, + { + "path": "components/ui/8bit/card.tsx", + "content": "import { type VariantProps, cva } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nimport {\n Card as ShadcnCard,\n CardAction as ShadcnCardAction,\n CardContent as ShadcnCardContent,\n CardDescription as ShadcnCardDescription,\n CardFooter as ShadcnCardFooter,\n CardHeader as ShadcnCardHeader,\n CardTitle as ShadcnCardTitle,\n} from \"@/components/ui/card\";\n\nimport \"./styles/retro.css\";\n\nexport const cardVariants = cva(\"\", {\n variants: {\n font: {\n normal: \"\",\n retro: \"retro\",\n },\n },\n defaultVariants: {\n font: \"retro\",\n },\n});\n\nexport interface BitCardProps\n extends React.ComponentProps<\"div\">,\n VariantProps {\n asChild?: boolean;\n}\n\nfunction Card({ ...props }: BitCardProps) {\n const { className, font } = props;\n\n return (\n \n \n\n \n
\n );\n}\n\nfunction CardHeader({ ...props }: BitCardProps) {\n const { className, font } = props;\n\n return (\n \n );\n}\n\nfunction CardTitle({ ...props }: BitCardProps) {\n const { className, font } = props;\n\n return (\n \n );\n}\n\nfunction CardDescription({ ...props }: BitCardProps) {\n const { className, font } = props;\n\n return (\n \n );\n}\n\nfunction CardAction({ ...props }: BitCardProps) {\n const { className, font } = props;\n\n return (\n \n );\n}\n\nfunction CardContent({ ...props }: BitCardProps) {\n const { className, font } = props;\n\n return (\n \n );\n}\n\nfunction CardFooter({ ...props }: BitCardProps) {\n const { className, font } = props;\n\n return (\n \n );\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n};\n", + "type": "registry:component", + "target": "components/ui/8bit/card.tsx" + }, + { + "path": "components/ui/8bit/input.tsx", + "content": "import { type VariantProps, cva } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nimport { Input as ShadcnInput } from \"@/components/ui/input\";\n\nimport \"./styles/retro.css\";\n\nexport const inputVariants = cva(\"\", {\n variants: {\n font: {\n normal: \"\",\n retro: \"retro\",\n },\n },\n defaultVariants: {\n font: \"retro\",\n },\n});\n\nexport interface BitInputProps\n extends React.InputHTMLAttributes,\n VariantProps {\n asChild?: boolean;\n}\n\nfunction Input({ ...props }: BitInputProps) {\n const { className, font } = props;\n\n return (\n \n \n\n \n
\n );\n}\n\nexport { Input };\n", + "type": "registry:component", + "target": "components/ui/8bit/input.tsx" + }, + { + "path": "components/ui/8bit/label.tsx", + "content": "\"use client\";\n\nimport * as React from \"react\";\n\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { type VariantProps, cva } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nimport { Label as ShadcnLabel } from \"@/components/ui/label\";\n\nimport \"./styles/retro.css\";\n\nexport const inputVariants = cva(\"\", {\n variants: {\n font: {\n normal: \"\",\n retro: \"retro\",\n },\n },\n defaultVariants: {\n font: \"retro\",\n },\n});\n\ninterface BitLabelProps\n extends React.ComponentProps,\n VariantProps {\n asChild?: boolean;\n}\n\nfunction Label({ className, font, ...props }: BitLabelProps) {\n return (\n \n );\n}\n\nexport { Label };\n", + "type": "registry:component", + "target": "components/ui/8bit/label.tsx" + }, + { + "path": "components/ui/8bit/styles/retro.css", + "content": "@import url(\"https://fonts.googleapis.com/css2?family=Press+Start+2P&display=swap\");\n\n.retro {\n font-family:\n \"Press Start 2P\",\n system-ui,\n -apple-system,\n sans-serif;\n line-height: 1.5;\n letter-spacing: 0.5px;\n}\n", + "type": "registry:component", + "target": "components/ui/8bit/styles/retro.css" + } + ] +} \ No newline at end of file diff --git a/registry.json b/registry.json index c357f71c..6dc0d126 100644 --- a/registry.json +++ b/registry.json @@ -1911,6 +1911,45 @@ "target": "components/ui/8bit/styles/retro.css" } ] + }, + { + "name": "signup-form-with-image", + "type": "registry:component", + "title": "8-bit Signup Form with Image", + "description": "A simple 8-bit signup form component with image", + "registryDependencies": ["button", "card", "input", "label"], + "files": [ + { + "path": "components/ui/8bit/blocks/signup-form-with-image.tsx", + "type": "registry:component", + "target": "components/ui/8bit/blocks/signup-form-with-image.tsx" + }, + { + "path": "components/ui/8bit/button.tsx", + "type": "registry:component", + "target": "components/ui/8bit/button.tsx" + }, + { + "path": "components/ui/8bit/card.tsx", + "type": "registry:component", + "target": "components/ui/8bit/card.tsx" + }, + { + "path": "components/ui/8bit/input.tsx", + "type": "registry:component", + "target": "components/ui/8bit/input.tsx" + }, + { + "path": "components/ui/8bit/label.tsx", + "type": "registry:component", + "target": "components/ui/8bit/label.tsx" + }, + { + "path": "components/ui/8bit/styles/retro.css", + "type": "registry:component", + "target": "components/ui/8bit/styles/retro.css" + } + ] } ] } From fc310c89d2cc37a00c4fe3f17e4437226dfdb41b Mon Sep 17 00:00:00 2001 From: KhaledSaeed18 Date: Fri, 26 Sep 2025 19:44:51 +0300 Subject: [PATCH 5/6] feat(blocks/authentication): add email only login form --- app/blocks/authentication/authentication.tsx | 23 ++++++ .../ui/8bit/blocks/email-only-login-form.tsx | 78 +++++++++++++++++++ public/r/email-only-login-form.json | 44 +++++++++++ public/r/registry.json | 34 ++++++++ public/r/signup-form-with-image.json | 2 +- registry.json | 34 ++++++++ 6 files changed, 214 insertions(+), 1 deletion(-) create mode 100644 components/ui/8bit/blocks/email-only-login-form.tsx create mode 100644 public/r/email-only-login-form.json diff --git a/app/blocks/authentication/authentication.tsx b/app/blocks/authentication/authentication.tsx index 0263b11a..a5bc3a05 100644 --- a/app/blocks/authentication/authentication.tsx +++ b/app/blocks/authentication/authentication.tsx @@ -1,3 +1,4 @@ +import { EmailOnlyLoginForm } from "@/components/ui/8bit/blocks/email-only-login-form"; import { LoginForm } from "@/components/ui/8bit/blocks/login-form"; import { LoginForm as LoginForm2 } from "@/components/ui/8bit/blocks/login-form-2"; import { LoginForm as LoginFormWithImage } from "@/components/ui/8bit/blocks/login-form-with-image"; @@ -92,6 +93,28 @@ export default function AuthenticationBlocks() {
+
+
+

+ A simple email-only login form +

+ +
+ + +
+
+
+ +
+
+

diff --git a/components/ui/8bit/blocks/email-only-login-form.tsx b/components/ui/8bit/blocks/email-only-login-form.tsx new file mode 100644 index 00000000..819e6ba8 --- /dev/null +++ b/components/ui/8bit/blocks/email-only-login-form.tsx @@ -0,0 +1,78 @@ +import { GalleryVerticalEnd } from "lucide-react"; + +import { cn } from "@/lib/utils"; + +import { Button } from "@/components/ui/8bit/button"; +import { Input } from "@/components/ui/8bit/input"; +import { Label } from "@/components/ui/8bit/label"; + +export function EmailOnlyLoginForm({ + className, + ...props +}: React.ComponentPropsWithoutRef<"div">) { + return ( +
+
+
+
+ +
+ +
+ Acme Inc. +
+

Welcome to Acme Inc.

+
+ Don't have an account?{" "} + + Sign up + +
+
+
+
+ + +
+ +
+
+ + Or continue with + +
+
+ + +
+
+
+
+ ); +} diff --git a/public/r/email-only-login-form.json b/public/r/email-only-login-form.json new file mode 100644 index 00000000..ce9c2099 --- /dev/null +++ b/public/r/email-only-login-form.json @@ -0,0 +1,44 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "email-only-login-form", + "type": "registry:component", + "title": "8-bit Email Only Login Form", + "description": "A simple 8-bit email only login form component", + "registryDependencies": [ + "button", + "input", + "label" + ], + "files": [ + { + "path": "components/ui/8bit/blocks/email-only-login-form.tsx", + "content": "import { cn } from \"@/lib/utils\";\nimport { GalleryVerticalEnd } from \"lucide-react\";\n\nimport { Button } from \"@/components/ui/8bit/button\";\nimport { Input } from \"@/components/ui/8bit/input\";\nimport { Label } from \"@/components/ui/8bit/label\";\n\nexport function EmailOnlyLoginForm({\n className,\n ...props\n}: React.ComponentPropsWithoutRef<\"div\">) {\n return (\n
\n
\n
\n
\n \n
\n \n
\n Acme Inc.\n \n

Welcome to Acme Inc.

\n
\n Don't have an account?{\" \"}\n \n Sign up\n \n
\n
\n
\n
\n \n \n
\n \n
\n
\n \n Or continue with\n \n
\n
\n \n \n
\n
\n
\n
\n );\n}\n", + "type": "registry:component", + "target": "components/ui/8bit/blocks/email-only-login-form.tsx" + }, + { + "path": "components/ui/8bit/button.tsx", + "content": "import { type VariantProps, cva } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nimport { Button as ShadcnButton } from \"@/components/ui/button\";\n\nimport \"./styles/retro.css\";\n\nexport const buttonVariants = cva(\"\", {\n variants: {\n font: {\n normal: \"\",\n retro: \"retro\",\n },\n variant: {\n default: \"bg-foreground\",\n destructive: \"bg-foreground\",\n outline: \"bg-foreground\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n});\n\nexport interface BitButtonProps\n extends React.ButtonHTMLAttributes,\n VariantProps {\n asChild?: boolean;\n ref?: React.Ref;\n}\n\nfunction Button({ children, asChild, ...props }: BitButtonProps) {\n const { variant, size, className, font } = props;\n\n return (\n \n {asChild ? (\n \n {children}\n\n {variant !== \"ghost\" && variant !== \"link\" && size !== \"icon\" && (\n <>\n {/* Pixelated border */}\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n {variant !== \"outline\" && (\n <>\n {/* Top shadow */}\n
\n
\n\n {/* Bottom shadow */}\n
\n
\n \n )}\n \n )}\n\n {size === \"icon\" && (\n <>\n
\n
\n
\n
\n
\n
\n \n )}\n \n ) : (\n <>\n {children}\n\n {variant !== \"ghost\" && variant !== \"link\" && size !== \"icon\" && (\n <>\n {/* Pixelated border */}\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n {variant !== \"outline\" && (\n <>\n {/* Top shadow */}\n
\n
\n\n {/* Bottom shadow */}\n
\n
\n \n )}\n \n )}\n\n {size === \"icon\" && (\n <>\n
\n
\n
\n
\n
\n
\n \n )}\n \n )}\n \n );\n}\n\nexport { Button };\n", + "type": "registry:component", + "target": "components/ui/8bit/button.tsx" + }, + { + "path": "components/ui/8bit/input.tsx", + "content": "import { type VariantProps, cva } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nimport { Input as ShadcnInput } from \"@/components/ui/input\";\n\nimport \"./styles/retro.css\";\n\nexport const inputVariants = cva(\"\", {\n variants: {\n font: {\n normal: \"\",\n retro: \"retro\",\n },\n },\n defaultVariants: {\n font: \"retro\",\n },\n});\n\nexport interface BitInputProps\n extends React.InputHTMLAttributes,\n VariantProps {\n asChild?: boolean;\n}\n\nfunction Input({ ...props }: BitInputProps) {\n const { className, font } = props;\n\n return (\n \n \n\n \n
\n );\n}\n\nexport { Input };\n", + "type": "registry:component", + "target": "components/ui/8bit/input.tsx" + }, + { + "path": "components/ui/8bit/label.tsx", + "content": "\"use client\";\n\nimport * as React from \"react\";\n\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { type VariantProps, cva } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nimport { Label as ShadcnLabel } from \"@/components/ui/label\";\n\nimport \"./styles/retro.css\";\n\nexport const inputVariants = cva(\"\", {\n variants: {\n font: {\n normal: \"\",\n retro: \"retro\",\n },\n },\n defaultVariants: {\n font: \"retro\",\n },\n});\n\ninterface BitLabelProps\n extends React.ComponentProps,\n VariantProps {\n asChild?: boolean;\n}\n\nfunction Label({ className, font, ...props }: BitLabelProps) {\n return (\n \n );\n}\n\nexport { Label };\n", + "type": "registry:component", + "target": "components/ui/8bit/label.tsx" + }, + { + "path": "components/ui/8bit/styles/retro.css", + "content": "@import url(\"https://fonts.googleapis.com/css2?family=Press+Start+2P&display=swap\");\n\n.retro {\n font-family:\n \"Press Start 2P\",\n system-ui,\n -apple-system,\n sans-serif;\n line-height: 1.5;\n letter-spacing: 0.5px;\n}\n", + "type": "registry:component", + "target": "components/ui/8bit/styles/retro.css" + } + ] +} \ No newline at end of file diff --git a/public/r/registry.json b/public/r/registry.json index 6dc0d126..80c61edc 100644 --- a/public/r/registry.json +++ b/public/r/registry.json @@ -1950,6 +1950,40 @@ "target": "components/ui/8bit/styles/retro.css" } ] + }, + { + "name": "email-only-login-form", + "type": "registry:component", + "title": "8-bit Email Only Login Form", + "description": "A simple 8-bit email only login form component", + "registryDependencies": ["button", "input", "label"], + "files": [ + { + "path": "components/ui/8bit/blocks/email-only-login-form.tsx", + "type": "registry:component", + "target": "components/ui/8bit/blocks/email-only-login-form.tsx" + }, + { + "path": "components/ui/8bit/button.tsx", + "type": "registry:component", + "target": "components/ui/8bit/button.tsx" + }, + { + "path": "components/ui/8bit/input.tsx", + "type": "registry:component", + "target": "components/ui/8bit/input.tsx" + }, + { + "path": "components/ui/8bit/label.tsx", + "type": "registry:component", + "target": "components/ui/8bit/label.tsx" + }, + { + "path": "components/ui/8bit/styles/retro.css", + "type": "registry:component", + "target": "components/ui/8bit/styles/retro.css" + } + ] } ] } diff --git a/public/r/signup-form-with-image.json b/public/r/signup-form-with-image.json index d7b33943..d7917e6a 100644 --- a/public/r/signup-form-with-image.json +++ b/public/r/signup-form-with-image.json @@ -13,7 +13,7 @@ "files": [ { "path": "components/ui/8bit/blocks/signup-form-with-image.tsx", - "content": "import { cn } from \"@/lib/utils\";\n\nimport { Button } from \"@/components/ui/8bit/button\";\nimport { Card, CardContent } from \"@/components/ui/8bit/card\";\nimport { Input } from \"@/components/ui/8bit/input\";\nimport { Label } from \"@/components/ui/8bit/label\";\n\nimport \"../styles/retro.css\";\n\nexport function SignupForm({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n
\n \n \n \n
\n
\n
\n

Create your account

\n

\n Sign up for an Acme Inc account to get started\n

\n
\n
\n \n \n
\n
\n \n \n
\n \n
\n \n Or continue with\n \n
\n
\n \n \n \n
\n
\n Already have an account?{\" \"}\n \n Sign in\n \n
\n
\n
\n
\n
\n \n By clicking create account, you agree to our Terms of Service{\" \"}\n and Privacy Policy.\n

\n
\n );\n}\n", + "content": "import { cn } from \"@/lib/utils\";\n\nimport { Button } from \"@/components/ui/8bit/button\";\nimport { Card, CardContent } from \"@/components/ui/8bit/card\";\nimport { Input } from \"@/components/ui/8bit/input\";\nimport { Label } from \"@/components/ui/8bit/label\";\n\nimport \"../styles/retro.css\";\n\nexport function SignupForm({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n
\n \n \n \n
\n
\n
\n

Create your account

\n

\n Sign up for an Acme Inc account to get started\n

\n
\n
\n \n \n
\n
\n \n \n
\n \n
\n \n Or continue with\n \n
\n
\n \n \n \n
\n
\n Already have an account?{\" \"}\n \n Sign in\n \n
\n
\n
\n
\n
\n \n By clicking create account, you agree to our{\" \"}\n Terms of Service and Privacy Policy.\n

\n
\n );\n}\n", "type": "registry:component", "target": "components/ui/8bit/blocks/signup-form-with-image.tsx" }, diff --git a/registry.json b/registry.json index 6dc0d126..80c61edc 100644 --- a/registry.json +++ b/registry.json @@ -1950,6 +1950,40 @@ "target": "components/ui/8bit/styles/retro.css" } ] + }, + { + "name": "email-only-login-form", + "type": "registry:component", + "title": "8-bit Email Only Login Form", + "description": "A simple 8-bit email only login form component", + "registryDependencies": ["button", "input", "label"], + "files": [ + { + "path": "components/ui/8bit/blocks/email-only-login-form.tsx", + "type": "registry:component", + "target": "components/ui/8bit/blocks/email-only-login-form.tsx" + }, + { + "path": "components/ui/8bit/button.tsx", + "type": "registry:component", + "target": "components/ui/8bit/button.tsx" + }, + { + "path": "components/ui/8bit/input.tsx", + "type": "registry:component", + "target": "components/ui/8bit/input.tsx" + }, + { + "path": "components/ui/8bit/label.tsx", + "type": "registry:component", + "target": "components/ui/8bit/label.tsx" + }, + { + "path": "components/ui/8bit/styles/retro.css", + "type": "registry:component", + "target": "components/ui/8bit/styles/retro.css" + } + ] } ] } From ce1e92918050d9a741d258b3e920940f9b3835d8 Mon Sep 17 00:00:00 2001 From: KhaledSaeed18 Date: Fri, 26 Sep 2025 19:48:35 +0300 Subject: [PATCH 6/6] fix(blocks/authentication): email only login form registry --- public/r/email-only-login-form.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/r/email-only-login-form.json b/public/r/email-only-login-form.json index ce9c2099..bb81cae4 100644 --- a/public/r/email-only-login-form.json +++ b/public/r/email-only-login-form.json @@ -12,7 +12,7 @@ "files": [ { "path": "components/ui/8bit/blocks/email-only-login-form.tsx", - "content": "import { cn } from \"@/lib/utils\";\nimport { GalleryVerticalEnd } from \"lucide-react\";\n\nimport { Button } from \"@/components/ui/8bit/button\";\nimport { Input } from \"@/components/ui/8bit/input\";\nimport { Label } from \"@/components/ui/8bit/label\";\n\nexport function EmailOnlyLoginForm({\n className,\n ...props\n}: React.ComponentPropsWithoutRef<\"div\">) {\n return (\n
\n
\n
\n
\n \n
\n \n
\n Acme Inc.\n \n

Welcome to Acme Inc.

\n
\n Don't have an account?{\" \"}\n \n Sign up\n \n
\n
\n
\n
\n \n \n
\n \n
\n
\n \n Or continue with\n \n
\n
\n \n \n
\n
\n
\n
\n );\n}\n", + "content": "import { GalleryVerticalEnd } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\n\nimport { Button } from \"@/components/ui/8bit/button\";\nimport { Input } from \"@/components/ui/8bit/input\";\nimport { Label } from \"@/components/ui/8bit/label\";\n\nexport function EmailOnlyLoginForm({\n className,\n ...props\n}: React.ComponentPropsWithoutRef<\"div\">) {\n return (\n
\n
\n
\n
\n \n
\n \n
\n Acme Inc.\n \n

Welcome to Acme Inc.

\n
\n Don't have an account?{\" \"}\n \n Sign up\n \n
\n
\n
\n
\n \n \n
\n \n
\n
\n \n Or continue with\n \n
\n
\n \n \n
\n
\n
\n
\n );\n}\n", "type": "registry:component", "target": "components/ui/8bit/blocks/email-only-login-form.tsx" },