From edda3f744307ea2f6dd77f1836c4fdc7db9ffc60 Mon Sep 17 00:00:00 2001 From: Sergey Elpashev Date: Wed, 2 Apr 2025 16:01:24 +0300 Subject: [PATCH] feat: login page --- bun.lock | 5 +++++ package.json | 1 + src/app.tsx | 24 ++++++++++++++++++------ src/components/ui/Button.module.scss | 2 +- src/components/ui/Button.tsx | 4 ++-- src/components/ui/Input.module.scss | 4 ++++ src/components/ui/Input.tsx | 23 ++++++++++++++++++++--- src/pages/login.module.scss | 6 +++++- src/pages/login.tsx | 8 +++++--- 9 files changed, 61 insertions(+), 16 deletions(-) diff --git a/bun.lock b/bun.lock index 3e7023c..93b6852 100644 --- a/bun.lock +++ b/bun.lock @@ -10,6 +10,7 @@ "clsx": "^2.1.1", "postcss": "^8.5.3", "preact": "^10.26.2", + "preact-iso": "^2.9.1", "tailwind-merge": "^3.0.2", "tailwind-variants": "^1.0.0", "tailwindcss": "^4.0.17", @@ -564,6 +565,10 @@ "preact": ["preact@10.26.4", "", {}, "sha512-KJhO7LBFTjP71d83trW+Ilnjbo+ySsaAgCfXOXUlmGzJ4ygYPWmysm77yg4emwfmoz3b22yvH5IsVFHbhUaH5w=="], + "preact-iso": ["preact-iso@2.9.1", "", { "peerDependencies": { "preact": ">=10", "preact-render-to-string": ">=6.4.0" } }, "sha512-65+oY5FHeSC3mjq2Dg6v72HYjsTYTqI9hXl1BK6vtUkxwfCqDJ5aqk33zjOH3aSuCY7duWiulyqMQ53GXpPIIQ=="], + + "preact-render-to-string": ["preact-render-to-string@6.5.13", "", { "peerDependencies": { "preact": ">=10" } }, "sha512-iGPd+hKPMFKsfpR2vL4kJ6ZPcFIoWZEcBf0Dpm3zOpdVvj77aY8RlLiQji5OMrngEyaxGogeakTb54uS2FvA6w=="], + "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], "prettier": ["prettier@3.5.3", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw=="], diff --git a/package.json b/package.json index c6e7868..2e7c667 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "clsx": "^2.1.1", "postcss": "^8.5.3", "preact": "^10.26.2", + "preact-iso": "^2.9.1", "tailwind-merge": "^3.0.2", "tailwind-variants": "^1.0.0", "tailwindcss": "^4.0.17" diff --git a/src/app.tsx b/src/app.tsx index 9d50cfe..ffe7b4d 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -1,13 +1,25 @@ -import { useSignal } from "@preact/signals"; +import { FunctionComponent } from "preact"; +import { ErrorBoundary, LocationProvider, Route, Router, useLocation } from "preact-iso"; import "preact/debug"; -import classes from "./app.module.scss"; -import Button from "./components/ui/Button"; +import LoginPage from "./pages/login"; + +const HomePage: FunctionComponent = () => { + const location = useLocation(); + location.route("/login"); + return
Redirecting to login...
; +}; + export function App() { - const counter = useSignal(0); return ( <> -

Hello, World!

- + + + + + + + + ); } diff --git a/src/components/ui/Button.module.scss b/src/components/ui/Button.module.scss index fee13e6..a0ef1e0 100644 --- a/src/components/ui/Button.module.scss +++ b/src/components/ui/Button.module.scss @@ -1,5 +1,5 @@ @reference '../../index.scss'; .button { - @apply rounded-2xl border-2 border-black p-5 text-white; + @apply rounded-2xl border-2 py-3 font-semibold text-white transition-colors hover:cursor-pointer; } diff --git a/src/components/ui/Button.tsx b/src/components/ui/Button.tsx index d6d39f6..0b5303e 100644 --- a/src/components/ui/Button.tsx +++ b/src/components/ui/Button.tsx @@ -5,8 +5,8 @@ const button = tv({ base: classes.button, variants: { color: { - primary: "bg-blue-400", - secondary: "bg-red-400", + primary: "bg-blue-400 hover:bg-blue-500", + secondary: "bg-red-400 hover:bg-red-500", }, }, }); diff --git a/src/components/ui/Input.module.scss b/src/components/ui/Input.module.scss index 192f0a4..9c65ddf 100644 --- a/src/components/ui/Input.module.scss +++ b/src/components/ui/Input.module.scss @@ -1 +1,5 @@ @reference "../../index.scss"; + +.input_field { + @apply rounded-md border border-gray-300 p-2; +} diff --git a/src/components/ui/Input.tsx b/src/components/ui/Input.tsx index 7beb4b5..1c9bfd0 100644 --- a/src/components/ui/Input.tsx +++ b/src/components/ui/Input.tsx @@ -1,17 +1,34 @@ import { FunctionComponent } from "preact"; import { tv } from "tailwind-variants"; +import classes from "./Input.module.scss"; const input = tv({ - base: "rounded-md border border-gray-300 p-2", + base: classes.input_field, + variants: { + "text-align": { + center: "text-center", + left: "text-left", + }, + }, + defaultVariants: { + "text-align": "left", + }, }); interface InputProps { isPassword?: boolean; placeholder?: string; + textAlign?: "center" | "left"; } -const Input: FunctionComponent = ({ isPassword = false, placeholder = "" }: InputProps) => { - return ; +const Input: FunctionComponent = ({ isPassword = false, placeholder = "", textAlign }: InputProps) => { + return ( + + ); }; export default Input; diff --git a/src/pages/login.module.scss b/src/pages/login.module.scss index 8acccad..4127265 100644 --- a/src/pages/login.module.scss +++ b/src/pages/login.module.scss @@ -1,5 +1,9 @@ @reference "../index.scss"; .login_container { - @apply flex flex-row justify-center gap-2 align-middle; + @apply flex min-h-screen flex-col items-center justify-center; +} + +.login_card { + @apply flex w-[95%] min-w-[300px] flex-col justify-center gap-2 rounded-md border-gray-400 p-5 shadow-md md:w-[350px]; } diff --git a/src/pages/login.tsx b/src/pages/login.tsx index 0042254..a684268 100644 --- a/src/pages/login.tsx +++ b/src/pages/login.tsx @@ -5,9 +5,11 @@ import classes from "./login.module.scss"; const LoginPage: FunctionComponent = () => { return (
- - - +
+ + + +
); };