diff --git a/src/App.tsx b/src/App.tsx
index 33d15f9..26dd1aa 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -2,11 +2,13 @@ import { Routes, Route } from 'react-router-dom';
import Layout from './components/Layout';
import HomePage from './pages/HomePage';
+import RegisterPage from "@/pages/RegisterPage";
export default function App() {
return (
}>
} />
+ } />
);
diff --git a/src/components/Layout.tsx b/src/components/Layout.tsx
index 68475b0..b0e6dc9 100644
--- a/src/components/Layout.tsx
+++ b/src/components/Layout.tsx
@@ -27,7 +27,9 @@ export default function Layout() {
},
{
"name": "Testimonials", "href": "#testimonials"
- }
+ },
+ { name: "Register", href: "/register" },
+
];
return (
diff --git a/src/pages/RegisterPage.tsx b/src/pages/RegisterPage.tsx
new file mode 100644
index 0000000..0e4de9a
--- /dev/null
+++ b/src/pages/RegisterPage.tsx
@@ -0,0 +1,168 @@
+import React, { useState } from "react";
+import { routes } from "@/routes";
+import Input from "@/components/ui/Input";
+import Label from "@/components/ui/Label";
+import Button from "@/components/ui/Button";
+import { Check } from "lucide-react";
+
+export default function RegisterPage() {
+ const [step, setStep] = useState(1);
+ const [formData, setFormData] = useState({
+ companyName: "",
+ email: "",
+ password: "",
+ theme: "light",
+ });
+
+ const handleNext = () => setStep((s) => Math.min(s + 1, 3));
+ const handlePrev = () => setStep((s) => Math.max(s - 1, 1));
+ const handleRegister = () => {
+ console.log("Mock Firebase Submission:"); console.log("-> Writing to 'tenant' collection:", { companyName: formData.companyName, theme: formData.theme }); console.log("-> Writing to 'registration' collection:", { email: formData.email, password: formData.password }); alert("登録が完了しました! (Registration Complete)");
+ };
+
+ const steps = [
+ { id: 1, label: "基本情報" },
+ { id: 2, label: "テーマ選択" },
+ { id: 3, label: "完了" },
+ ];
+
+ return (
+
+
+
+
新規アカウント登録
+
+ {/* Stepper UI */}
+
+
+
+
+ {steps.map((s) => (
+
+
= s.id ?"bg-primary-cta text-primary-cta-text"
+ : "bg-card text-foreground/50 border-2 border-foreground/10"
+ }`}
+ >
+ {step > s.id ? : s.id}
+
+
= s.id ?"text-foreground" : "text-foreground/50"}`}>
+ {s.label}
+
+
+ ))}
+
+
+ {/* Step 1: Basic Info */}
+ {step === 1 && (
+
+
ステップ 1: 基本情報
+
+
+ setFormData({ ...formData, companyName: e.target.value })}
+ placeholder="株式会社蟹江電機"
+ />
+
+
+
+ setFormData({ ...formData, email: e.target.value })}
+ placeholder="admin@example.com"
+ />
+
+
+
+ setFormData({ ...formData, password: e.target.value })}
+ placeholder="••••••••"
+ />
+
+
+
+
+
+ )}
+
+ {/* Step 2: Theme Selection */}
+ {step === 2 && (
+
+
ステップ 2: テーマ選択
+
+ {["light", "dark", "system"].map((t) => (
+
setFormData({ ...formData, theme: t })}
+ className={`p-4 border rounded-lg text-center cursor-pointer transition-all ${ formData.theme === t ?"border-primary-cta bg-primary-cta/10 text-primary-cta"
+ : "border-foreground/10 hover:bg-foreground/5 text-foreground"
+ }`}
+ >
+
+ {t === "light" ? "ライト" : t === "dark" ? "ダーク" : "システム"}
+
+
+ ))}
+
+
+
+ )}
+
+ {/* Step 3: Complete */}
+ {step === 3 && (
+
+
+
+
+
準備が完了しました
+
+ 以下の内容でテナントと管理者アカウントを作成します。
+
+
+
+
+ 企業名:
+ {formData.companyName || "未入力"}
+
+
+ メール:
+ {formData.email || "未入力"}
+
+
+ テーマ:
+ {formData.theme}
+
+
+
+
+
+ )}
+
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/routes.ts b/src/routes.ts
index 362ecb5..558b72e 100644
--- a/src/routes.ts
+++ b/src/routes.ts
@@ -6,4 +6,5 @@ export interface Route {
export const routes: Route[] = [
{ path: '/', label: 'Home', pageFile: 'HomePage' },
+ { path: '/register', label: 'Register', pageFile: 'RegisterPage' },
];