From 517bc11c566ecb526edca17e210310cd66707441 Mon Sep 17 00:00:00 2001 From: Pijus Kamandulis Date: Sun, 6 Oct 2024 16:52:39 +0300 Subject: [PATCH] Added tailwind and style login screen --- .prettierrc | 1 + bun.lockb | Bin 133154 -> 163950 bytes package.json | 6 ++ postcss.config.js | 6 ++ src/components/Button.tsx | 41 +++++++++++ src/components/Input.tsx | 25 +++++++ src/components/index.ts | 4 ++ src/index.css | 4 ++ src/pages/Home.tsx | 2 +- src/pages/Login.tsx | 138 ++++++++++++++++++++++++-------------- tailwind.config.js | 8 +++ 11 files changed, 185 insertions(+), 50 deletions(-) create mode 100644 postcss.config.js create mode 100644 src/components/Button.tsx create mode 100644 src/components/Input.tsx create mode 100644 src/components/index.ts create mode 100644 tailwind.config.js diff --git a/.prettierrc b/.prettierrc index 4a95970..a7716ac 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,4 +1,5 @@ { + "plugins": ["prettier-plugin-tailwindcss"], "trailingComma": "all", "singleQuote": true, "endOfLine": "lf", diff --git a/bun.lockb b/bun.lockb index 82a62a3e015a9c744b1882199f4103e90667f5ee..5187839250ba22ae97d1ce66d84ce3d50505d397 100755 GIT binary patch delta 43794 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�-t|SOO+Jq#;QpJ?Y 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 diff --git a/package.json b/package.json index db26a49..86947a1 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "@tanstack/react-form": "^0.33.0", "@tanstack/react-router": "^1.62.0", "appwrite": "^16.0.2", + "classnames": "^2.5.1", "react": "^18.3.1", "react-dom": "^18.3.1" }, @@ -21,11 +22,16 @@ "@types/react": "^18.3.10", "@types/react-dom": "^18.3.0", "@vitejs/plugin-react-swc": "^3.5.0", + "autoprefixer": "^10.4.20", "eslint": "^9.11.1", "eslint-plugin-react": "^7.37.1", "eslint-plugin-react-hooks": "^5.1.0-rc.0", "eslint-plugin-react-refresh": "^0.4.12", "globals": "^15.9.0", + "postcss": "^8.4.47", + "prettier": "^3.3.3", + "prettier-plugin-tailwindcss": "^0.6.8", + "tailwindcss": "^3.4.13", "typescript": "^5.5.3", "typescript-eslint": "^8.7.0", "vite": "^5.4.8" diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..2e7af2b --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/src/components/Button.tsx b/src/components/Button.tsx new file mode 100644 index 0000000..fa2e82e --- /dev/null +++ b/src/components/Button.tsx @@ -0,0 +1,41 @@ +import classNames from 'classnames'; + +enum ButtonColor { + Primary = 'primary', + Secondary = 'secondary', + Error = 'error', + Success = 'success', +} + +interface ButtonProps extends React.ButtonHTMLAttributes { + color?: ButtonColor; +} + +const Button: React.FC = ({ + children, + color = ButtonColor.Primary, + ...props +}) => { + const buttonClass = classNames( + 'flex w-full justify-center rounded-md px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2', + { + 'bg-indigo-600 hover:bg-indigo-500 focus-visible:outline-indigo-600': + color === ButtonColor.Primary, + 'bg-gray-600 hover:bg-gray-500 focus-visible:outline-gray-600': + color === ButtonColor.Secondary, + 'bg-red-600 hover:bg-red-500 focus-visible:outline-red-600': + color === ButtonColor.Error, + 'bg-green-600 hover:bg-green-500 focus-visible:outline-green-600': + color === ButtonColor.Success, + }, + ); + + return ( + + ); +}; + +export { ButtonColor }; +export default Button; diff --git a/src/components/Input.tsx b/src/components/Input.tsx new file mode 100644 index 0000000..3e58e38 --- /dev/null +++ b/src/components/Input.tsx @@ -0,0 +1,25 @@ +const Input = ({ + label, + ...props +}: React.DetailedHTMLProps< + React.InputHTMLAttributes, + HTMLInputElement +> & { + label?: string; +}) => { + return ( + <> + {label && ( + + )} +
+ +
+ + ); +}; + +export default Input; diff --git a/src/components/index.ts b/src/components/index.ts new file mode 100644 index 0000000..6289584 --- /dev/null +++ b/src/components/index.ts @@ -0,0 +1,4 @@ +import Input from './Input'; +import Button, { ButtonColor } from './Button'; + +export { Input, Button, ButtonColor }; diff --git a/src/index.css b/src/index.css index 6119ad9..e7d4bb2 100644 --- a/src/index.css +++ b/src/index.css @@ -1,3 +1,7 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + :root { font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; line-height: 1.5; diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx index 38bf87b..015efda 100644 --- a/src/pages/Home.tsx +++ b/src/pages/Home.tsx @@ -19,7 +19,7 @@ function Home() { React logo -

Scrummie-Poker

+

Scrummie-Poker

  • diff --git a/src/pages/Login.tsx b/src/pages/Login.tsx index 2ca76c5..aa0e116 100644 --- a/src/pages/Login.tsx +++ b/src/pages/Login.tsx @@ -1,5 +1,6 @@ import { useForm } from '@tanstack/react-form'; import { useUser } from '../lib/context/user'; +import { Button, ButtonColor, Input } from '../components'; const Login = () => { const user = useUser(); @@ -15,56 +16,95 @@ const Login = () => { return ( <> -

    Login or register

    -
    - ( - field.handleChange(e.target.value)} - /> - )} - /> - ( - field.handleChange(e.target.value)} - /> - )} - /> -
    - - +
    +
    +

    + Sign in to your account +

    - - + +
    +
    +
    + ( + field.handleChange(e.target.value)} + /> + )} + /> +
    + +
    + ( + field.handleChange(e.target.value)} + /> + )} + /> +
    + +
    +
    + + + +
    +
    +
    + +

    + Don't want to create an account?{' '} + user.loginAsGuest()} + > + Sign in as a guest + +

    +
    +
    ); }; diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..d21f1cd --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,8 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'], + theme: { + extend: {}, + }, + plugins: [], +};