diff --git a/src/app/globals.css b/src/app/globals.css index 6dae48f..1f7e9c7 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -21,6 +21,10 @@ --danger-100: rgba(220, 38, 38, 1); --button-text-size: 18px; + + --textbox-50: rgb(204, 204, 204, 0.5); + --textbox-75: rgb(204, 204, 204, 0.75); + --textbox-100: rgb(204, 204, 204, 1); } @media (prefers-color-scheme: dark) { diff --git a/src/app/login/login.module.css b/src/app/login/login.module.css new file mode 100644 index 0000000..a099cbb --- /dev/null +++ b/src/app/login/login.module.css @@ -0,0 +1,14 @@ +/* /home/max/Git/MeetUp/src/app/login/login.module.css */ +.loginContainer { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + min-height: 100vh; + gap: 1.5rem; + padding: 2rem; +} + +.loginContainer h1 { + margin-bottom: 1rem; +} diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx index 44e80c0..74b9f00 100644 --- a/src/app/login/page.tsx +++ b/src/app/login/page.tsx @@ -1,17 +1,36 @@ +// /home/max/Git/MeetUp/src/app/login/page.tsx import { auth } from '@/auth'; +import LabeledInput from '@/components/labeled-input'; import Login from '@/components/user/login-button'; import { redirect } from 'next/navigation'; +import style from './login.module.css'; + +import '@/app/globals.css'; + export default async function LoginPage() { const session = await auth(); if (session?.user) { - redirect('/'); + redirect('/home'); } return ( -
+

Login

+ + +
); diff --git a/src/components/Button.module.css b/src/components/Button.module.css deleted file mode 100644 index 85e67b6..0000000 --- a/src/components/Button.module.css +++ /dev/null @@ -1,54 +0,0 @@ -.button { - background-color: var(--color-50); - border-radius: 9999px; - padding: 10px 20px; - outline: none; - border: 2px solid var(--color-100); - transition: background-color 0.3s ease; - height: 50px; -} - -.button:hover { - background-color: var(--color-75); -} - -.button:active { - background-color: var(--color-100); -} - -.button span { - color: var(--foreground); - font-size: var(--button-text-size); - font-weight: 600; -} - -.icon { - display: grid; - grid-template-columns: 25px 1fr; - gap: 10px; - align-items: center; -} - -.style_primary { - --color-50: var(--primary-50); - --color-75: var(--primary-75); - --color-100: var(--primary-100); -} - -.style_warning { - --color-50: var(--warning-50); - --color-75: var(--warning-75); - --color-100: var(--warning-100); -} - -.style_success { - --color-50: var(--success-50); - --color-75: var(--success-75); - --color-100: var(--success-100); -} - -.style_danger { - --color-50: var(--danger-50); - --color-75: var(--danger-75); - --color-100: var(--danger-100); -} diff --git a/src/components/Button.tsx b/src/components/Button.tsx deleted file mode 100644 index 7fee3ff..0000000 --- a/src/components/Button.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import style from './Button.module.css'; - -import { IconProp } from '@fortawesome/fontawesome-svg-core'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; - -export default function Button({ - type, - children, - mode = 'primary', - icon, -}: { - type?: 'button' | 'submit' | 'reset'; - children?: React.ReactNode; - mode?: 'primary' | 'warning' | 'success' | 'danger'; - icon?: IconProp; -}) { - if (!icon) { - return ( - - ); - } else { - return ( - - ); - } -} diff --git a/src/components/labeled-input.module.css b/src/components/labeled-input.module.css new file mode 100644 index 0000000..e4f614d --- /dev/null +++ b/src/components/labeled-input.module.css @@ -0,0 +1,37 @@ +.input, +.input * { + box-sizing: border-box; +} + +.input { + height: 50px; + position: relative; + overflow: visible; +} + +.input input { + width: 100%; + height: 100%; + border: 1px solid var(--textbox-75); + border-radius: 9999px; + padding: 10px 20px; + background-color: var(--textbox-50); + color: var(--foreground); + font-size: 16px; + transition: + background-color 0.2s ease, + border-color 0.2s ease, + box-shadow 0.2s ease; +} + +.input input:hover { + background-color: var(--textbox-75); + border-color: var(--textbox-100); +} + +.input input:focus { + outline: none; + background-color: var(--textbox-100); + border-color: var(--primary-100); + box-shadow: 0 0 0 2px var(--primary-50); +} diff --git a/src/components/labeled-input.tsx b/src/components/labeled-input.tsx new file mode 100644 index 0000000..ea89c29 --- /dev/null +++ b/src/components/labeled-input.tsx @@ -0,0 +1,55 @@ +import style from './labeled-input.module.css'; + +export default function LabeledInput({ + type, + size = 'default', + label, + placeholder, + value, +}: { + type: 'text' | 'email' | 'password'; + size: 'default' | 'login' | 'settings'; + label?: string; + placeholder?: string; + value?: string; +}) { + if (!label) { + return ( +
+ +
+ ); + } else { + return ( +
+

+ +

+ + +
+ ); + } +}