feat/chore: add setup and 2 stages (dmy, no logic, wip), bump
This commit is contained in:
parent
5f7d19ba0c
commit
0316745bc2
20
package.json
20
package.json
@ -16,21 +16,21 @@
|
|||||||
"lucide-react": "^0.503.0",
|
"lucide-react": "^0.503.0",
|
||||||
"next": "15.3.0",
|
"next": "15.3.0",
|
||||||
"next-themes": "^0.4.6",
|
"next-themes": "^0.4.6",
|
||||||
"react": "^19.0.0",
|
"react": "^19.1.0",
|
||||||
"react-dom": "^19.0.0",
|
"react-dom": "^19.1.0",
|
||||||
"tailwind-merge": "^3.2.0",
|
"tailwind-merge": "^3.2.0",
|
||||||
"tw-animate-css": "^1.2.8"
|
"tw-animate-css": "^1.2.8"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"typescript": "^5",
|
"typescript": "^5.8.3",
|
||||||
"@types/node": "^20",
|
"@types/node": "^20.17.30",
|
||||||
"@types/react": "^19",
|
"@types/react": "^19.1.2",
|
||||||
"@types/react-dom": "^19",
|
"@types/react-dom": "^19.1.2",
|
||||||
"@tailwindcss/postcss": "^4",
|
"@tailwindcss/postcss": "^4.1.4",
|
||||||
"tailwindcss": "^4",
|
"tailwindcss": "^4.1.4",
|
||||||
"eslint": "^9",
|
"eslint": "^9.25.1",
|
||||||
"eslint-config-next": "15.3.0",
|
"eslint-config-next": "15.3.0",
|
||||||
"@eslint/eslintrc": "^3"
|
"@eslint/eslintrc": "^3.3.1"
|
||||||
},
|
},
|
||||||
"trustedDependencies": [
|
"trustedDependencies": [
|
||||||
"unrs-resolver"
|
"unrs-resolver"
|
||||||
|
16
src/app/setup/page.tsx
Normal file
16
src/app/setup/page.tsx
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
"use client"
|
||||||
|
|
||||||
|
import { useState } from "react"
|
||||||
|
import StageOne from "@/components/setup/StageOne"
|
||||||
|
import StageTwo from "@/components/setup/StageTwo"
|
||||||
|
|
||||||
|
export default function Home() {
|
||||||
|
const [stage, setStage] = useState(1)
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="flex flex-col items-center justify-center h-screen">
|
||||||
|
{stage === 1 && <StageOne setStage={setStage} />}
|
||||||
|
{stage === 2 && <StageTwo setStage={setStage} />}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
36
src/components/setup/StageOne.tsx
Normal file
36
src/components/setup/StageOne.tsx
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
import { Button } from "@/components/ui/button"
|
||||||
|
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
|
||||||
|
import { Key, Mail } from "lucide-react"
|
||||||
|
|
||||||
|
interface StageOneProps {
|
||||||
|
setStage: (stage: number) => void
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function Home({ setStage }: StageOneProps) {
|
||||||
|
return (
|
||||||
|
<Card className="w-96">
|
||||||
|
<CardHeader>
|
||||||
|
<div className="flex flex-col items-center justify-center gap-2">
|
||||||
|
<CardTitle className="flex items-center justify-center text-3xl font-bold">
|
||||||
|
<div className="flex items-center gap-2">
|
||||||
|
<Mail size={32} />
|
||||||
|
Mailseer
|
||||||
|
</div>
|
||||||
|
</CardTitle>
|
||||||
|
</div>
|
||||||
|
</CardHeader>
|
||||||
|
<CardContent>
|
||||||
|
<h1 className="text-2xl font-bold mb-3">Step One</h1>
|
||||||
|
<p className="text-sm text-muted-foreground">
|
||||||
|
Welcome to Mailseer! This is the first step of the setup process.
|
||||||
|
</p>
|
||||||
|
<p className="text-sm text-muted-foreground mt-4 mb-8">
|
||||||
|
We'll guide you through the installation process from here.
|
||||||
|
</p>
|
||||||
|
<Button className="w-full cursor-pointer" onClick={() => setStage(2)}>
|
||||||
|
Continue
|
||||||
|
</Button>
|
||||||
|
</CardContent>
|
||||||
|
</Card>
|
||||||
|
)
|
||||||
|
}
|
60
src/components/setup/StageTwo.tsx
Normal file
60
src/components/setup/StageTwo.tsx
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
import { Button } from "@/components/ui/button"
|
||||||
|
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
|
||||||
|
import { Key, Mail } from "lucide-react"
|
||||||
|
import { Input } from "../ui/input"
|
||||||
|
import { Label } from "../ui/label"
|
||||||
|
|
||||||
|
interface StageTwoProps {
|
||||||
|
setStage: (stage: number) => void
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function Home({ setStage }: StageTwoProps) {
|
||||||
|
return (
|
||||||
|
<Card className="w-96">
|
||||||
|
<CardHeader>
|
||||||
|
<div className="flex flex-col items-center justify-center gap-2">
|
||||||
|
<CardTitle className="flex items-center justify-center text-3xl font-bold">
|
||||||
|
<div className="flex items-center gap-2">
|
||||||
|
<Mail size={32} />
|
||||||
|
Mailseer
|
||||||
|
</div>
|
||||||
|
</CardTitle>
|
||||||
|
</div>
|
||||||
|
</CardHeader>
|
||||||
|
<CardContent>
|
||||||
|
<h1 className="text-2xl font-bold mb-3">Step Two</h1>
|
||||||
|
<p className="text-sm text-muted-foreground">
|
||||||
|
Let's setup the first admin account.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div className="flex flex-col gap-2 mt-6">
|
||||||
|
<Label className="mb-1">
|
||||||
|
<Mail size={16} />
|
||||||
|
Email
|
||||||
|
</Label>
|
||||||
|
<Input type="email" placeholder="Email" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="flex flex-col gap-2 mt-4">
|
||||||
|
<Label className="mb-1">
|
||||||
|
<Key size={16} />
|
||||||
|
Password
|
||||||
|
</Label>
|
||||||
|
<Input type="password" placeholder="Password" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="flex flex-col gap-2 mt-4 mb-8">
|
||||||
|
<Label className="mb-1">
|
||||||
|
<Key size={16} />
|
||||||
|
Confirm Password
|
||||||
|
</Label>
|
||||||
|
<Input type="password" placeholder="Confirm Password" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<Button className="w-full cursor-pointer" onClick={() => setStage(3)}>
|
||||||
|
Continue
|
||||||
|
</Button>
|
||||||
|
</CardContent>
|
||||||
|
</Card>
|
||||||
|
)
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user